@codingame/monaco-editor-wrapper 3.9.3 → 4.0.0-next.0

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 (537) hide show
  1. package/dist/C2Hs-configuration.json.js +3 -0
  2. package/dist/C2Hs.json.js +3 -0
  3. package/dist/COBOL.tmLanguage.json.js +3 -0
  4. package/dist/Erlang.plist.js +2 -1751
  5. package/dist/Hsc2Hs-configuration.json.js +3 -0
  6. package/dist/Hsc2Hs.json.js +3 -0
  7. package/dist/JavaProperties.tmLanguage.json.js +3 -0
  8. package/dist/Kotlin.tmLanguage.js +2 -723
  9. package/dist/META.json.js +3 -0
  10. package/dist/META.json2.js +3 -0
  11. package/dist/Markdown Redcarpet.json.js +3 -0
  12. package/dist/RMarkdown.json.js +3 -0
  13. package/dist/Rcpp.json.js +3 -0
  14. package/dist/Rd (R Documentation).json.js +3 -0
  15. package/dist/Scala.tmLanguage.json.js +3 -0
  16. package/dist/_commonjsHelpers.js +35 -0
  17. package/dist/_rollupPluginBabelHelpers.js +1 -1
  18. package/dist/add.svg.js +3 -0
  19. package/dist/add.svg2.js +3 -0
  20. package/dist/adddep-dark.svg.js +3 -0
  21. package/dist/adddep-light.svg.js +3 -0
  22. package/dist/alex.json.js +3 -0
  23. package/dist/angular-directives.json.js +3 -0
  24. package/dist/angular-interpolations.json.js +3 -0
  25. package/dist/angular-template-language-configuration.json.js +3 -0
  26. package/dist/arrow-circle-up-dark.svg.js +3 -0
  27. package/dist/arrow-circle-up-light.svg.js +3 -0
  28. package/dist/aspnetcorerazor.tmLanguage.json.js +3 -0
  29. package/dist/atd.json.js +3 -0
  30. package/dist/book-dark.svg.js +3 -0
  31. package/dist/book-light.svg.js +3 -0
  32. package/dist/book-open-dark.svg.js +3 -0
  33. package/dist/book-open-light.svg.js +3 -0
  34. package/dist/buildtarget.json.js +3 -0
  35. package/dist/cabal-configuration.json.js +3 -0
  36. package/dist/cabal.json.js +3 -0
  37. package/dist/codeblock-cabal.json.js +3 -0
  38. package/dist/codeblock-haskell.json.js +3 -0
  39. package/dist/codeblock-literate-haskell.json.js +3 -0
  40. package/dist/codeblock.json.js +3 -0
  41. package/dist/codeblock.json2.js +3 -0
  42. package/dist/configuration/index.d.ts +0 -1
  43. package/dist/cram.json.js +3 -0
  44. package/dist/csharp.json.js +3 -0
  45. package/dist/css.worker.js +1 -1
  46. package/dist/d.json.js +3 -0
  47. package/dist/d.json2.js +3 -0
  48. package/dist/dart-language-configuration.json.js +3 -0
  49. package/dist/dart.json.js +3 -0
  50. package/dist/dcf-configuration.json.js +3 -0
  51. package/dist/dcf.json.js +3 -0
  52. package/dist/diet.json.js +3 -0
  53. package/dist/diet.json2.js +3 -0
  54. package/dist/diet.json3.js +3 -0
  55. package/dist/django-html.tmLanguage.json.js +3 -0
  56. package/dist/django-txt.tmLanguage.json.js +3 -0
  57. package/dist/dml.json.js +3 -0
  58. package/dist/document-search-dark.svg.js +3 -0
  59. package/dist/document-search-light.svg.js +3 -0
  60. package/dist/documentation-inverse.svg.js +3 -0
  61. package/dist/documentation.svg.js +3 -0
  62. package/dist/dub-convert-inverse.svg.js +3 -0
  63. package/dist/dub-convert.svg.js +3 -0
  64. package/dist/dune-project.json.js +3 -0
  65. package/dist/dune-project.json2.js +3 -0
  66. package/dist/dune-workspace.json.js +3 -0
  67. package/dist/dune.json.js +3 -0
  68. package/dist/dune.json2.js +3 -0
  69. package/dist/dune.json3.js +3 -0
  70. package/dist/edit-dub-inverse.svg.js +3 -0
  71. package/dist/edit-dub.svg.js +3 -0
  72. package/dist/edit-source-inverse.svg.js +3 -0
  73. package/dist/edit-source.svg.js +3 -0
  74. package/dist/eex-language-configuration.json.js +3 -0
  75. package/dist/eex.json.js +3 -0
  76. package/dist/elixir-language-configuration.json.js +3 -0
  77. package/dist/elixir.json.js +3 -0
  78. package/dist/erlang.configuration.json.js +3 -0
  79. package/dist/erlang.json.js +3 -0
  80. package/dist/expression.json.js +3 -0
  81. package/dist/extension-web.js.js +3 -0
  82. package/dist/extension-web.js2.js +3 -0
  83. package/dist/extension.browser.js.js +3 -0
  84. package/dist/extensions.d.ts +35 -0
  85. package/dist/features/htmlContribution.js +0 -1
  86. package/dist/features/jsonContribution.d.ts +2 -4
  87. package/dist/features/jsonContribution.js +10 -29
  88. package/dist/features/typescriptContribution.js +2 -2
  89. package/dist/file_type_java.svg.js +3 -0
  90. package/dist/file_type_scala.svg.js +3 -0
  91. package/dist/filters.json.js +3 -0
  92. package/dist/focus-dark.svg.js +3 -0
  93. package/dist/focus-light.svg.js +3 -0
  94. package/dist/general.json.js +3 -0
  95. package/dist/get-inverse.svg.js +3 -0
  96. package/dist/get.svg.js +3 -0
  97. package/dist/go.json.js +3 -0
  98. package/dist/go.mod.language-configuration.json.js +3 -0
  99. package/dist/go.mod.tmGrammar.json.js +3 -0
  100. package/dist/go.sum.tmGrammar.json.js +3 -0
  101. package/dist/govulncheck.tmGrammar.json.js +3 -0
  102. package/dist/happy.json.js +3 -0
  103. package/dist/haskell-configuration.json.js +3 -0
  104. package/dist/haskell.json.js +3 -0
  105. package/dist/hot-reload-tb.png.js +3 -0
  106. package/dist/hot-reload.svg.js +3 -0
  107. package/dist/html-eex.json.js +3 -0
  108. package/dist/html.worker.js +1 -1
  109. package/dist/index.d.ts +2 -3
  110. package/dist/index.js +9 -6
  111. package/dist/index2.js +2 -1351
  112. package/dist/inline-styles.json.js +3 -0
  113. package/dist/inline-template.json.js +3 -0
  114. package/dist/inspector.svg.js +3 -0
  115. package/dist/java-properties-configuration.json.js +3 -0
  116. package/dist/java.json.js +3 -0
  117. package/dist/javascript.json.js +3 -0
  118. package/dist/json.worker.js +1 -1
  119. package/dist/jvm-bytecode-verbose.json.js +3 -0
  120. package/dist/jvm-bytecode.json.js +3 -0
  121. package/dist/kotlin.configuration.json.js +3 -0
  122. package/dist/kotlin.json.js +3 -0
  123. package/dist/lang-config.json.js +3 -0
  124. package/dist/language-configuration.json.js +3 -0
  125. package/dist/language-configuration.json2.js +3 -0
  126. package/dist/language-configuration.json3.js +3 -0
  127. package/dist/language-configuration.json4.js +3 -0
  128. package/dist/language-configuration.json5.js +3 -0
  129. package/dist/language-configuration.json6.js +3 -0
  130. package/dist/language-configuration.json7.js +3 -0
  131. package/dist/language-configuration.json8.js +3 -0
  132. package/dist/languages/index.d.ts +0 -2
  133. package/dist/literate-haskell-configuration.json.js +3 -0
  134. package/dist/literateHaskell.json.js +3 -0
  135. package/dist/main.js +839 -3115
  136. package/dist/markdown-svelte-css.json.js +3 -0
  137. package/dist/markdown-svelte-js.json.js +3 -0
  138. package/dist/markdown-svelte.json.js +3 -0
  139. package/dist/menhir-action.json.js +3 -0
  140. package/dist/menhir.json.js +3 -0
  141. package/dist/menhir.json2.js +3 -0
  142. package/dist/merlin.json.js +3 -0
  143. package/dist/monaco.d.ts +6 -9
  144. package/dist/oasis.json.js +3 -0
  145. package/dist/oasis.json2.js +3 -0
  146. package/dist/ocaml-markdown-codeblock.json.js +3 -0
  147. package/dist/ocaml.interface.json.js +3 -0
  148. package/dist/ocaml.json.js +3 -0
  149. package/dist/ocaml.json2.js +3 -0
  150. package/dist/ocaml.json3.js +3 -0
  151. package/dist/ocamlbuild.json.js +3 -0
  152. package/dist/ocamlbuild.json2.js +3 -0
  153. package/dist/ocamldoc.json.js +3 -0
  154. package/dist/ocamlformat.json.js +3 -0
  155. package/dist/ocamlformat.json2.js +3 -0
  156. package/dist/ocamllex.json.js +3 -0
  157. package/dist/ocamllex.json2.js +3 -0
  158. package/dist/ocamllex.json3.js +3 -0
  159. package/dist/opam-install.json.js +3 -0
  160. package/dist/opam-install.json2.js +3 -0
  161. package/dist/opam.json.js +3 -0
  162. package/dist/opam.json2.js +3 -0
  163. package/dist/outdated-inverse.svg.js +3 -0
  164. package/dist/outdated.svg.js +3 -0
  165. package/dist/pascal.configuration.json.js +3 -0
  166. package/dist/pascal.json.js +3 -0
  167. package/dist/pascal.tmLanguage.js +2 -168
  168. package/dist/performance.svg.js +3 -0
  169. package/dist/pgsql.tmLanguage.js +2 -283
  170. package/dist/pip-requirements.json.js +3 -0
  171. package/dist/pip-requirements.tmLanguage.json.js +3 -0
  172. package/dist/plus-dark.svg.js +3 -0
  173. package/dist/plus-light.svg.js +3 -0
  174. package/dist/postcss.json.js +3 -0
  175. package/dist/preview-right-dark.svg.js +3 -0
  176. package/dist/preview-right-light.svg.js +3 -0
  177. package/dist/pug-svelte-dotblock.json.js +3 -0
  178. package/dist/pug-svelte-tags.json.js +3 -0
  179. package/dist/pug-svelte.json.js +3 -0
  180. package/dist/r-configuration.json.js +3 -0
  181. package/dist/r-snippets.json.js +3 -0
  182. package/dist/r.json.js +3 -0
  183. package/dist/rbuildignore-configuration.json.js +3 -0
  184. package/dist/rbuildignore.json.js +3 -0
  185. package/dist/rd-configuration.json.js +3 -0
  186. package/dist/reason-markdown-codeblock.json.js +3 -0
  187. package/dist/reason.json.js +3 -0
  188. package/dist/reason.json2.js +3 -0
  189. package/dist/ref-group-by-type-dark.svg.js +3 -0
  190. package/dist/ref-group-by-type-light.svg.js +3 -0
  191. package/dist/ref-ungroup-by-type-dark.svg.js +3 -0
  192. package/dist/ref-ungroup-by-type-light.svg.js +3 -0
  193. package/dist/refresh-dark.svg.js +3 -0
  194. package/dist/refresh-dark.svg2.js +3 -0
  195. package/dist/refresh-light.svg.js +3 -0
  196. package/dist/refresh-light.svg2.js +3 -0
  197. package/dist/repl.svg.js +3 -0
  198. package/dist/repl.svg2.js +3 -0
  199. package/dist/rmarkdown.json2.js +3 -0
  200. package/dist/rmd-configuration.json.js +3 -0
  201. package/dist/rnamespace-configuration.json.js +3 -0
  202. package/dist/rnamespace.json.js +3 -0
  203. package/dist/save.svg.js +3 -0
  204. package/dist/save.svg2.js +3 -0
  205. package/dist/scalameta-logo.png.js +3 -0
  206. package/dist/sdl.json.js +3 -0
  207. package/dist/semanticdb.json.js +3 -0
  208. package/dist/services.d.ts +4 -0
  209. package/dist/solidity.configuration.json.js +3 -0
  210. package/dist/solidity.json.js +3 -0
  211. package/dist/solidity.json2.js +3 -0
  212. package/dist/svelte.json.js +3 -0
  213. package/dist/svelte.tmLanguage.json.js +3 -0
  214. package/dist/switch-impl-intf.dark.svg.js +3 -0
  215. package/dist/switch-impl-intf.light.svg.js +3 -0
  216. package/dist/systemverilog.json.js +3 -0
  217. package/dist/systemverilog.tmLanguage.json.js +3 -0
  218. package/dist/tags.json.js +3 -0
  219. package/dist/tasty.json.js +3 -0
  220. package/dist/tcl.json.js +3 -0
  221. package/dist/tcl.json2.js +3 -0
  222. package/dist/template.json.js +3 -0
  223. package/dist/theme/index.d.ts +1 -4
  224. package/dist/tools/EditorOpenHandlerRegistry.d.ts +3 -2
  225. package/dist/ts.worker.js +1 -1
  226. package/dist/typescript.json.js +3 -0
  227. package/dist/upgrade-inverse.svg.js +3 -0
  228. package/dist/upgrade.svg.js +3 -0
  229. package/dist/vim.js +37 -36
  230. package/dist/vs2019_dark.json.js +3 -0
  231. package/dist/vs2019_light.json.js +3 -0
  232. package/dist/worker.js +14 -2
  233. package/dist/x-dark.svg.js +3 -0
  234. package/dist/x-light.svg.js +3 -0
  235. package/package.json +40 -42
  236. package/stats.html +90 -1429
  237. package/dist/COBOL.tmLanguage.js +0 -172
  238. package/dist/HTML (Eex)2.js +0 -100
  239. package/dist/JSON.tmLanguage.js +0 -221
  240. package/dist/JSONC.tmLanguage.js +0 -221
  241. package/dist/JavaProperties.tmLanguage.js +0 -116
  242. package/dist/JavaScript.tmLanguage.js +0 -5929
  243. package/dist/JavaScriptReact.tmLanguage.js +0 -5929
  244. package/dist/META.js +0 -100
  245. package/dist/MagicPython.tmLanguage.js +0 -4221
  246. package/dist/MagicRegExp.tmLanguage.js +0 -505
  247. package/dist/Markdown Redcarpet.js +0 -221
  248. package/dist/RMarkdown.js +0 -25
  249. package/dist/Rcpp.js +0 -50
  250. package/dist/Rd (R Documentation).js +0 -131
  251. package/dist/Regular Expressions (JavaScript).tmLanguage.js +0 -166
  252. package/dist/Scala.tmLanguage.js +0 -1324
  253. package/dist/TypeScript.tmLanguage.js +0 -5680
  254. package/dist/TypeScriptReact.tmLanguage.js +0 -5929
  255. package/dist/angular.js +0 -62
  256. package/dist/asp-vb-net.tmlanguage.js +0 -247
  257. package/dist/aspnetcorerazor.js +0 -72
  258. package/dist/aspnetcorerazor.tmLanguage.js +0 -1825
  259. package/dist/atd.js +0 -110
  260. package/dist/atd2.js +0 -114
  261. package/dist/buildignore.r.js +0 -5
  262. package/dist/buildtarget.js +0 -53
  263. package/dist/c.js +0 -101
  264. package/dist/c.tmLanguage.js +0 -3565
  265. package/dist/cabal.js +0 -10
  266. package/dist/cabal.tmLanguage.js +0 -66
  267. package/dist/clojure.js +0 -68
  268. package/dist/clojure.tmLanguage.js +0 -439
  269. package/dist/cobol.js +0 -6
  270. package/dist/cobol2.js +0 -341
  271. package/dist/codeblock-cabal.js +0 -42
  272. package/dist/codeblock-haskell.js +0 -42
  273. package/dist/codeblock-literate-haskell.js +0 -42
  274. package/dist/codeblock.js +0 -59
  275. package/dist/codeblock2.js +0 -36
  276. package/dist/codeblock3.js +0 -95
  277. package/dist/coffeescript-coffeescript.code-snippets.js +0 -18
  278. package/dist/coffeescript.js +0 -91
  279. package/dist/coffeescript.tmLanguage.js +0 -1324
  280. package/dist/configuration/files.d.ts +0 -6
  281. package/dist/cpp-c.code-snippets.js +0 -18
  282. package/dist/cpp-cpp.code-snippets.js +0 -18
  283. package/dist/cpp.js +0 -101
  284. package/dist/cpp.tmLanguage.js +0 -16648
  285. package/dist/cpptools.js +0 -2631
  286. package/dist/cram.js +0 -257
  287. package/dist/csharp.js +0 -92
  288. package/dist/csharp.tmLanguage.js +0 -4992
  289. package/dist/css.js +0 -106
  290. package/dist/css.tmLanguage.js +0 -1873
  291. package/dist/cuda-cpp.js +0 -101
  292. package/dist/cuda-cpp.tmLanguage.js +0 -19993
  293. package/dist/d-diet.js +0 -92
  294. package/dist/d.js +0 -3212
  295. package/dist/d2.js +0 -97
  296. package/dist/d3.js +0 -609
  297. package/dist/dart.js +0 -543
  298. package/dist/dart2.js +0 -103
  299. package/dist/dart3.js +0 -1130
  300. package/dist/dcf.js +0 -93
  301. package/dist/debian-control.r.js +0 -69
  302. package/dist/diet.js +0 -758
  303. package/dist/diet2.js +0 -100
  304. package/dist/django-html.js +0 -155
  305. package/dist/django-html.tmLanguage.js +0 -715
  306. package/dist/django-txt.js +0 -155
  307. package/dist/django-txt.tmLanguage.js +0 -269
  308. package/dist/dml.js +0 -169
  309. package/dist/dml2.js +0 -90
  310. package/dist/dockercompose.js +0 -82
  311. package/dist/dpp.js +0 -97
  312. package/dist/dscript.js +0 -90
  313. package/dist/dune-project.js +0 -481
  314. package/dist/dune-project2.js +0 -65
  315. package/dist/dune-workspace.js +0 -298
  316. package/dist/dune-workspace2.js +0 -65
  317. package/dist/dune.js +0 -2962
  318. package/dist/dune2.js +0 -65
  319. package/dist/eex.js +0 -55
  320. package/dist/elixir-snippets.js +0 -184
  321. package/dist/elixir.js +0 -2341
  322. package/dist/elixir2.js +0 -69
  323. package/dist/elixir3.js +0 -40
  324. package/dist/erlang-erlang.js +0 -195
  325. package/dist/erlang.js +0 -81
  326. package/dist/erlang2.js +0 -86
  327. package/dist/expression.js +0 -846
  328. package/dist/features/extensionConfigurations.d.ts +0 -1
  329. package/dist/features/extensionConfigurations.js +0 -44
  330. package/dist/fsharp-fsharp.code-snippets.js +0 -18
  331. package/dist/fsharp.js +0 -80
  332. package/dist/fsharp.tmLanguage.js +0 -1844
  333. package/dist/go.js +0 -103
  334. package/dist/go.mod.js +0 -8
  335. package/dist/go.mod.tmGrammar.js +0 -182
  336. package/dist/go.sum.tmGrammar.js +0 -55
  337. package/dist/go.tmLanguage.js +0 -1025
  338. package/dist/go.work.js +0 -8
  339. package/dist/govulncheck.tmGrammar.js +0 -138
  340. package/dist/groovy-groovy.code-snippets.js +0 -229
  341. package/dist/groovy.js +0 -79
  342. package/dist/groovy.tmLanguage.js +0 -1391
  343. package/dist/haskell.js +0 -88
  344. package/dist/haskell.tmLanguage.js +0 -629
  345. package/dist/haskell2.js +0 -16
  346. package/dist/html (eex).js +0 -31
  347. package/dist/html-derivative.tmLanguage.js +0 -57
  348. package/dist/html-html.code-snippets.js +0 -20
  349. package/dist/html.js +0 -11
  350. package/dist/html.tmLanguage.js +0 -2652
  351. package/dist/html.tmLanguage2.js +0 -107
  352. package/dist/inline-styles.js +0 -104
  353. package/dist/inline-template.js +0 -88
  354. package/dist/jade.js +0 -11
  355. package/dist/java-java.js +0 -125
  356. package/dist/java-properties.js +0 -73
  357. package/dist/java.js +0 -98
  358. package/dist/java.tmLanguage.js +0 -1863
  359. package/dist/java2.js +0 -917
  360. package/dist/javascript-javascript.code-snippets.js +0 -205
  361. package/dist/javascript.js +0 -197
  362. package/dist/javascriptreact.js +0 -197
  363. package/dist/jsdoc.js.injection.tmLanguage.js +0 -32
  364. package/dist/jsdoc.ts.injection.tmLanguage.js +0 -32
  365. package/dist/json.js +0 -75
  366. package/dist/jsonc.js +0 -75
  367. package/dist/jsx-tags.js +0 -158
  368. package/dist/julia.js +0 -89
  369. package/dist/julia.tmLanguage.js +0 -954
  370. package/dist/jvm-bytecode-verbose.js +0 -1231
  371. package/dist/jvm-bytecode.js +0 -565
  372. package/dist/kotlin-kotlin.js +0 -117
  373. package/dist/kotlin.js +0 -103
  374. package/dist/kotlinscript.js +0 -103
  375. package/dist/languages/extensions/extensionConfigurationLoader.d.ts +0 -3
  376. package/dist/languages/extensions/grammarLoader.d.ts +0 -2
  377. package/dist/languages/extensions/languageConfigurationLoader.d.ts +0 -2
  378. package/dist/languages/extensions/snippetLoader.d.ts +0 -2
  379. package/dist/languages/extensions/themeLoader.d.ts +0 -2
  380. package/dist/languages/snippets/index.d.ts +0 -1
  381. package/dist/languages/textMate/index.d.ts +0 -1
  382. package/dist/languages/textMate/semanticTokens.d.ts +0 -1
  383. package/dist/literate haskell.js +0 -88
  384. package/dist/literateHaskell.tmLanguage.js +0 -70
  385. package/dist/lua.js +0 -84
  386. package/dist/lua.tmLanguage.js +0 -914
  387. package/dist/lua2.js +0 -2853
  388. package/dist/markdown-basics-markdown.code-snippets.js +0 -121
  389. package/dist/markdown-svelte-css.js +0 -37
  390. package/dist/markdown-svelte-js.js +0 -37
  391. package/dist/markdown-svelte.js +0 -59
  392. package/dist/markdown-vue.js +0 -54
  393. package/dist/markdown.js +0 -49
  394. package/dist/markdown.tmLanguage.js +0 -3042
  395. package/dist/menhir-action.js +0 -51
  396. package/dist/menhir.js +0 -597
  397. package/dist/merlin.js +0 -111
  398. package/dist/namespace.r.js +0 -88
  399. package/dist/oasis.js +0 -99
  400. package/dist/objective-c.js +0 -79
  401. package/dist/objective-c.tmLanguage.js +0 -3763
  402. package/dist/objective-cpp.js +0 -79
  403. package/dist/ocaml-dune-project.js +0 -38
  404. package/dist/ocaml-dune.js +0 -53
  405. package/dist/ocaml-markdown-codeblock.js +0 -42
  406. package/dist/ocaml-ocaml.js +0 -88
  407. package/dist/ocaml-ocamllex.js +0 -12
  408. package/dist/ocaml.META.js +0 -29
  409. package/dist/ocaml.interface.js +0 -292
  410. package/dist/ocaml.interface2.js +0 -114
  411. package/dist/ocaml.js +0 -903
  412. package/dist/ocaml.menhir.js +0 -81
  413. package/dist/ocaml.oasis.js +0 -18
  414. package/dist/ocaml.ocamlbuild.js +0 -45
  415. package/dist/ocaml.ocamlformat.js +0 -8
  416. package/dist/ocaml.ocamllex.js +0 -60
  417. package/dist/ocaml.opam-install.js +0 -49
  418. package/dist/ocaml.opam.js +0 -69
  419. package/dist/ocaml2.js +0 -114
  420. package/dist/ocaml3.js +0 -136
  421. package/dist/ocamlbuild.js +0 -189
  422. package/dist/ocamldoc.js +0 -54
  423. package/dist/ocamlformat.js +0 -206
  424. package/dist/ocamllex.js +0 -133
  425. package/dist/omnisharp-csharp.js +0 -508
  426. package/dist/omnisharp.js +0 -594
  427. package/dist/opam-install.js +0 -40
  428. package/dist/opam.js +0 -140
  429. package/dist/pascal-pascal.js +0 -382
  430. package/dist/pascal.js +0 -80
  431. package/dist/pascal2.js +0 -26
  432. package/dist/perl.js +0 -93
  433. package/dist/perl.tmLanguage.js +0 -2986
  434. package/dist/perl6.js +0 -86
  435. package/dist/perl6.tmLanguage.js +0 -323
  436. package/dist/php-php.code-snippets.js +0 -267
  437. package/dist/php.js +0 -154
  438. package/dist/php.tmLanguage.js +0 -4036
  439. package/dist/pip-requirements.js +0 -8
  440. package/dist/pip-requirements.tmLanguage.js +0 -89
  441. package/dist/plaintext.js +0 -11
  442. package/dist/platform.tmLanguage.js +0 -1135
  443. package/dist/postcss.src.yaml.js +0 -393
  444. package/dist/postgres.js +0 -80
  445. package/dist/postgresql.js +0 -75
  446. package/dist/powershell.js +0 -107
  447. package/dist/powershell.tmLanguage.js +0 -1037
  448. package/dist/pug-svelte-dotblock.js +0 -69
  449. package/dist/pug-svelte-tags.js +0 -215
  450. package/dist/pug-svelte.js +0 -307
  451. package/dist/python.js +0 -236
  452. package/dist/r.js +0 -664
  453. package/dist/r2.js +0 -88
  454. package/dist/rbuildignore.js +0 -39
  455. package/dist/rd.js +0 -81
  456. package/dist/reason-markdown-codeblock.js +0 -42
  457. package/dist/reason.js +0 -79
  458. package/dist/rmd.js +0 -84
  459. package/dist/rnamespace.js +0 -283
  460. package/dist/ruby.js +0 -95
  461. package/dist/ruby.tmLanguage.js +0 -2784
  462. package/dist/rust.js +0 -84
  463. package/dist/rust.tmLanguage.js +0 -1178
  464. package/dist/sassdoc.tmLanguage.js +0 -362
  465. package/dist/scala.js +0 -85
  466. package/dist/scalameta.js +0 -224
  467. package/dist/scss.js +0 -117
  468. package/dist/scss.tmLanguage.js +0 -1887
  469. package/dist/sdl.js +0 -162
  470. package/dist/sdl2.js +0 -90
  471. package/dist/semanticdb.js +0 -62
  472. package/dist/shell-unix-bash.tmLanguage.js +0 -2038
  473. package/dist/shellscript.js +0 -93
  474. package/dist/solargraph.js +0 -192
  475. package/dist/solidity-solidity.js +0 -213
  476. package/dist/solidity.js +0 -1224
  477. package/dist/solidity2.js +0 -71
  478. package/dist/solidity3.js +0 -143
  479. package/dist/sql.js +0 -99
  480. package/dist/sql.tmLanguage.js +0 -636
  481. package/dist/svelte.js +0 -120
  482. package/dist/svelte.svelte-vscode-javascript.js +0 -45
  483. package/dist/svelte.svelte-vscode-svelte.js +0 -46
  484. package/dist/svelte.svelte-vscode-typescript.js +0 -43
  485. package/dist/svelte.svelte-vscode.js +0 -383
  486. package/dist/svelte.tmLanguage.src.yaml.js +0 -1099
  487. package/dist/svlangserver-systemverilog.js +0 -395
  488. package/dist/svlangserver.js +0 -85
  489. package/dist/swift-swift.code-snippets.js +0 -183
  490. package/dist/swift.js +0 -90
  491. package/dist/swift.tmLanguage.js +0 -3312
  492. package/dist/systemverilog.js +0 -187
  493. package/dist/systemverilog.tmLanguage.js +0 -1259
  494. package/dist/tasty.js +0 -72
  495. package/dist/tcl-tcl.js +0 -151
  496. package/dist/tcl.js +0 -78
  497. package/dist/tcl.tmlanguage.yaml.js +0 -5490
  498. package/dist/template.js +0 -207
  499. package/dist/theme-defaults~dark_plus.js +0 -210
  500. package/dist/theme-defaults~dark_plus_experimental.js +0 -145
  501. package/dist/theme-defaults~dark_vs.js +0 -412
  502. package/dist/theme-defaults~hc_black.js +0 -471
  503. package/dist/theme-defaults~hc_light.js +0 -595
  504. package/dist/theme-defaults~light_plus.js +0 -212
  505. package/dist/theme-defaults~light_plus_experimental.js +0 -158
  506. package/dist/theme-defaults~light_vs.js +0 -441
  507. package/dist/typescript-basics-typescript.code-snippets.js +0 -313
  508. package/dist/typescript-language-features.js +0 -1103
  509. package/dist/typescript.js +0 -216
  510. package/dist/typescriptreact.js +0 -216
  511. package/dist/vb-vb.code-snippets.js +0 -88
  512. package/dist/vb.js +0 -79
  513. package/dist/verilog.js +0 -187
  514. package/dist/volar-vue.js +0 -289
  515. package/dist/vscode-R-r-snippets.js +0 -534
  516. package/dist/vscode-R-rmarkdown.js +0 -461
  517. package/dist/vscode-R.js +0 -660
  518. package/dist/vscode-django-filters.js +0 -340
  519. package/dist/vscode-django.js +0 -37
  520. package/dist/vscode-go-go.js +0 -276
  521. package/dist/vscode-go.js +0 -1610
  522. package/dist/vscode-groovy.js +0 -28
  523. package/dist/vscode-python.js +0 -706
  524. package/dist/vue-directives.js +0 -25
  525. package/dist/vue-interpolations.js +0 -25
  526. package/dist/vue-sfc-style-variable-injection.js +0 -63
  527. package/dist/vue.js +0 -151
  528. package/dist/vue.tmLanguage.js +0 -1218
  529. package/dist/xml.js +0 -116
  530. package/dist/xml.tmLanguage.js +0 -395
  531. package/dist/xsl.js +0 -39
  532. package/dist/xsl.tmLanguage.js +0 -102
  533. package/dist/yaml.js +0 -82
  534. package/dist/yaml.tmLanguage.js +0 -629
  535. /package/dist/{extensions → editor}/autofold.d.ts +0 -0
  536. /package/dist/{extensions → editor}/cobol.d.ts +0 -0
  537. /package/dist/{extensions → editor}/index.d.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  import { c as createBase64WorkerFactory } from './worker.js';
2
2
 
3
- var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y29uc3QgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24oZSl7c2V0VGltZW91dCgoKCk9PntpZihlLnN0YWNrKXtpZihvLmlzRXJyb3JOb1RlbGVtZXRyeShlKSl0aHJvdyBuZXcgbyhlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spO3Rocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spfXRocm93IGV9KSwwKX19ZW1pdChlKXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKCh0PT57dChlKX0pKX1vblVuZXhwZWN0ZWRFcnJvcihlKXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSksdGhpcy5lbWl0KGUpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpfX07ZnVuY3Rpb24gdCh0KXsoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGkpcmV0dXJuITA7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09ciYmZS5tZXNzYWdlPT09cn0pKHQpfHxlLm9uVW5leHBlY3RlZEVycm9yKHQpfWZ1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOmUuc3RhY2t0cmFjZXx8ZS5zdGFjayxub1RlbGVtZXRyeTpvLmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3Qgcj0iQ2FuY2VsZWQiO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHIpLHRoaXMubmFtZT10aGlzLm1lc3NhZ2V9fWNsYXNzIG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9IkVycm9yTm9UZWxlbWV0cnkifXN0YXRpYyBmcm9tRXJyb3IoZSl7aWYoZSBpbnN0YW5jZW9mIG8pcmV0dXJuIGU7Y29uc3QgdD1uZXcgbztyZXR1cm4gdC5tZXNzYWdlPWUubWVzc2FnZSx0LnN0YWNrPWUuc3RhY2ssdH1zdGF0aWMgaXNFcnJvck5vVGVsZW1ldHJ5KGUpe3JldHVybiJFcnJvck5vVGVsZW1ldHJ5Ij09PWUubmFtZX19ZnVuY3Rpb24gYShlKXtjb25zdCB0PXRoaXM7bGV0IG4scj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcnx8KHI9ITAsbj1lLmFwcGx5KHQsYXJndW1lbnRzKSksbn19dmFyIHM7IWZ1bmN0aW9uKGUpe2UuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbU3ltYm9sLml0ZXJhdG9yXX07Y29uc3QgdD1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbiBuKHQsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe2NvbnN0IHI9W107aWYoMD09PW4pcmV0dXJuW3IsdF07Y29uc3QgaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IobGV0IHQ9MDt0PG47dCsrKXtjb25zdCB0PWkubmV4dCgpO2lmKHQuZG9uZSlyZXR1cm5bcixlLmVtcHR5KCldO3IucHVzaCh0LnZhbHVlKX1yZXR1cm5bcix7W1N5bWJvbC5pdGVyYXRvcl06KCk9Pml9XX1lLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUuc2luZ2xlPWZ1bmN0aW9uKihlKXt5aWVsZCBlfSxlLmZyb209ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fHR9LGUuaXNFbXB0eT1mdW5jdGlvbihlKXtyZXR1cm4hZXx8ITA9PT1lW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkuZG9uZX0sZS5maXJzdD1mdW5jdGlvbihlKXtyZXR1cm4gZVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLnZhbHVlfSxlLnNvbWU9ZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiBlKWlmKHQobikpcmV0dXJuITA7cmV0dXJuITF9LGUuZmluZD1mdW5jdGlvbihlLHQpe2Zvcihjb25zdCBuIG9mIGUpaWYodChuKSlyZXR1cm4gbn0sZS5maWx0ZXI9ZnVuY3Rpb24qKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSl0KG4pJiYoeWllbGQgbil9LGUubWFwPWZ1bmN0aW9uKihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl5aWVsZCB0KHIsbisrKX0sZS5jb25jYXQ9ZnVuY3Rpb24qKC4uLmUpe2Zvcihjb25zdCB0IG9mIGUpZm9yKGNvbnN0IGUgb2YgdCl5aWVsZCBlfSxlLmNvbmNhdE5lc3RlZD1mdW5jdGlvbiooZSl7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgZSBvZiB0KXlpZWxkIGV9LGUucmVkdWNlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1uO2Zvcihjb25zdCBuIG9mIGUpcj10KHIsbik7cmV0dXJuIHJ9LGUuZm9yRWFjaD1mdW5jdGlvbihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl0KHIsbisrKX0sZS5zbGljZT1mdW5jdGlvbiooZSx0LG49ZS5sZW5ndGgpe2Zvcih0PDAmJih0Kz1lLmxlbmd0aCksbjwwP24rPWUubGVuZ3RoOm4+ZS5sZW5ndGgmJihuPWUubGVuZ3RoKTt0PG47dCsrKXlpZWxkIGVbdF19LGUuY29uc3VtZT1uLGUuY29sbGVjdD1mdW5jdGlvbihlKXtyZXR1cm4gbihlKVswXX0sZS5lcXVhbHM9ZnVuY3Rpb24oZSx0LG49KChlLHQpPT5lPT09dCkpe2NvbnN0IHI9ZVtTeW1ib2wuaXRlcmF0b3JdKCksaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOzspe2NvbnN0IGU9ci5uZXh0KCksdD1pLm5leHQoKTtpZihlLmRvbmUhPT10LmRvbmUpcmV0dXJuITE7aWYoZS5kb25lKXJldHVybiEwO2lmKCFuKGUudmFsdWUsdC52YWx1ZSkpcmV0dXJuITF9fX0oc3x8KHM9e30pKTtjbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUuIEVycm9yczogWyR7ZS5qb2luKCIsICIpfV1gKSx0aGlzLmVycm9ycz1lfX1mdW5jdGlvbiBsKGUpe2lmKHMuaXMoZSkpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSlpZihuKXRyeXtuLmRpc3Bvc2UoKX1jYXRjaChlKXt0LnB1c2goZSl9aWYoMT09PXQubGVuZ3RoKXRocm93IHRbMF07aWYodC5sZW5ndGg+MSl0aHJvdyBuZXcgYyh0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bXTplfWlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gdShlKXtyZXR1cm57ZGlzcG9zZTphKCgoKT0+e2UoKX0pKX19Y2xhc3MgaHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvRGlzcG9zZT1uZXcgU2V0LHRoaXMuX2lzRGlzcG9zZWQ9ITF9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9pc0Rpc3Bvc2VkPSEwLHRoaXMuY2xlYXIoKSl9Z2V0IGlzRGlzcG9zZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZH1jbGVhcigpe3RyeXtsKHRoaXMuX3RvRGlzcG9zZS52YWx1ZXMoKSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKGUpe2lmKCFlKXJldHVybiBlO2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/aC5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkd8fGNvbnNvbGUud2FybihuZXcgRXJyb3IoIlRyeWluZyB0byBhZGQgYSBkaXNwb3NhYmxlIHRvIGEgRGlzcG9zYWJsZVN0b3JlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi4gVGhlIGFkZGVkIG9iamVjdCB3aWxsIGJlIGxlYWtlZCEiKS5zdGFjayk6dGhpcy5fdG9EaXNwb3NlLmFkZChlKSxlfX1oLkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyBme2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RvcmU9bmV3IGgsdGhpcy5fc3RvcmV9ZGlzcG9zZSgpe3RoaXMuX3N0b3JlLmRpc3Bvc2UoKX1fcmVnaXN0ZXIoZSl7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5fc3RvcmUuYWRkKGUpfX1mLk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtjbGFzcyBke2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwb3NlPSgpPT57fSx0aGlzLnVuc2V0PSgpPT57fSx0aGlzLmlzc2V0PSgpPT4hMX1zZXQoZSl7bGV0IHQ9ZTtyZXR1cm4gdGhpcy51bnNldD0oKT0+dD12b2lkIDAsdGhpcy5pc3NldD0oKT0+dm9pZCAwIT09dCx0aGlzLmRpc3Bvc2U9KCk9Pnt0JiYodCgpLHQ9dm9pZCAwKX0sdGhpc319Y2xhc3MgbXtjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm5leHQ9bS5VbmRlZmluZWQsdGhpcy5wcmV2PW0uVW5kZWZpbmVkfX1tLlVuZGVmaW5lZD1uZXcgbSh2b2lkIDApO2NsYXNzIGd7Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1tLlVuZGVmaW5lZCx0aGlzLl9sYXN0PW0uVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1tLlVuZGVmaW5lZH1jbGVhcigpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl7Y29uc3QgdD1lLm5leHQ7ZS5wcmV2PW0uVW5kZWZpbmVkLGUubmV4dD1tLlVuZGVmaW5lZCxlPXR9dGhpcy5fZmlyc3Q9bS5VbmRlZmluZWQsdGhpcy5fbGFzdD1tLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdChlKXtyZXR1cm4gdGhpcy5faW5zZXJ0KGUsITEpfXB1c2goZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCEwKX1faW5zZXJ0KGUsdCl7Y29uc3Qgbj1uZXcgbShlKTtpZih0aGlzLl9maXJzdD09PW0uVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PW4sdGhpcy5fbGFzdD1uO2Vsc2UgaWYodCl7Y29uc3QgZT10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9bixuLnByZXY9ZSxlLm5leHQ9bn1lbHNle2NvbnN0IGU9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9bixuLm5leHQ9ZSxlLnByZXY9bn10aGlzLl9zaXplKz0xO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5fcmVtb3ZlKG4pKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksZX19cG9wKCl7aWYodGhpcy5fbGFzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLGV9fV9yZW1vdmUoZSl7aWYoZS5wcmV2IT09bS5VbmRlZmluZWQmJmUubmV4dCE9PW0uVW5kZWZpbmVkKXtjb25zdCB0PWUucHJldjt0Lm5leHQ9ZS5uZXh0LGUubmV4dC5wcmV2PXR9ZWxzZSBlLnByZXY9PT1tLlVuZGVmaW5lZCYmZS5uZXh0PT09bS5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PW0uVW5kZWZpbmVkLHRoaXMuX2xhc3Q9bS5VbmRlZmluZWQpOmUubmV4dD09PW0uVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9bS5VbmRlZmluZWQpOmUucHJldj09PW0uVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PW0uVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl5aWVsZCBlLmVsZW1lbnQsZT1lLm5leHR9fWxldCBwPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmxvY2F0aW9uJiZkb2N1bWVudC5sb2NhdGlvbi5oYXNoLmluZGV4T2YoInBzZXVkbz10cnVlIik+PTA7dmFyIGI7Y29uc3Qgdj0iZW4iO2xldCB5LEMsdyxfPSExLFM9ITEsQT0hMSxFPSExLHg9djtjb25zdCBOPSJvYmplY3QiPT10eXBlb2Ygc2VsZj9zZWxmOiJvYmplY3QiPT10eXBlb2YgZ2xvYmFsP2dsb2JhbDp7fTtsZXQgazt2b2lkIDAhPT1OLnZzY29kZSYmdm9pZCAwIT09Ti52c2NvZGUucHJvY2Vzcz9rPU4udnNjb2RlLnByb2Nlc3M6InVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzJiYoaz1wcm9jZXNzKTtjb25zdCBMPSJzdHJpbmciPT10eXBlb2YobnVsbD09PShiPW51bGw9PWs/dm9pZCAwOmsudmVyc2lvbnMpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLmVsZWN0cm9uKSYmInJlbmRlcmVyIj09PShudWxsPT1rP3ZvaWQgMDprLnR5cGUpO2lmKCJvYmplY3QiIT10eXBlb2YgbmF2aWdhdG9yfHxMKWlmKCJvYmplY3QiPT10eXBlb2Ygayl7Xz0id2luMzIiPT09ay5wbGF0Zm9ybSxTPSJkYXJ3aW4iPT09ay5wbGF0Zm9ybSxBPSJsaW51eCI9PT1rLnBsYXRmb3JtLEEmJmsuZW52LlNOQVAmJmsuZW52LlNOQVBfUkVWSVNJT04say5lbnYuQ0l8fGsuZW52LkJVSUxEX0FSVElGQUNUU1RBR0lOR0RJUkVDVE9SWSx5PXYseD12O2NvbnN0IGU9ay5lbnYuVlNDT0RFX05MU19DT05GSUc7aWYoZSl0cnl7Y29uc3QgdD1KU09OLnBhcnNlKGUpLG49dC5hdmFpbGFibGVMYW5ndWFnZXNbIioiXTt5PXQubG9jYWxlLHg9bnx8dixDPXQuX3RyYW5zbGF0aW9uc0NvbmZpZ0ZpbGV9Y2F0Y2goZSl7fX1lbHNlIGNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2Vsc2Ugdz1uYXZpZ2F0b3IudXNlckFnZW50LF89dy5pbmRleE9mKCJXaW5kb3dzIik+PTAsUz13LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wLCh3LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wfHx3LmluZGV4T2YoImlQYWQiKT49MHx8dy5pbmRleE9mKCJpUGhvbmUiKT49MCkmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzLEE9dy5pbmRleE9mKCJMaW51eCIpPj0wLEU9ITAsZnVuY3Rpb24oZSx0LC4uLm4peyFmdW5jdGlvbihlLHQpe2xldCBuO249MD09PXQubGVuZ3RoP2U6ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoKGUsbik9Pntjb25zdCByPW5bMF0saT10W3JdO2xldCBvPWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBpP289aToibnVtYmVyIiE9dHlwZW9mIGkmJiJib29sZWFuIiE9dHlwZW9mIGkmJm51bGwhPWl8fChvPVN0cmluZyhpKSksb30pKSxwJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKX0odCxuKX0oMCwiXyIpLHk9dix4PXk7Y29uc3QgVD1fLE89UztFJiZOLmltcG9ydFNjcmlwdHM7Y29uc3QgST13LE09ImZ1bmN0aW9uIj09dHlwZW9mIE4ucG9zdE1lc3NhZ2UmJiFOLmltcG9ydFNjcmlwdHM7KCgpPT57aWYoTSl7Y29uc3QgZT1bXTtOLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh0PT57aWYodC5kYXRhJiZ0LmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspZm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXtjb25zdCByPWVbbl07aWYoci5pZD09PXQuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylyZXR1cm4gZS5zcGxpY2UobiwxKSx2b2lkIHIuY2FsbGJhY2soKX19KSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IHI9Kyt0O2UucHVzaCh7aWQ6cixjYWxsYmFjazpufSksTi5wb3N0TWVzc2FnZSh7dnNjb2RlU2NoZWR1bGVBc3luY1dvcms6cn0sIioiKX19fSkoKTtjb25zdCBQPSEhKEkmJkkuaW5kZXhPZigiQ2hyb21lIik+PTApO0kmJkkuaW5kZXhPZigiRmlyZWZveCIpLCFQJiZJJiZJLmluZGV4T2YoIlNhZmFyaSIpLEkmJkkuaW5kZXhPZigiRWRnLyIpLEkmJkkuaW5kZXhPZigiQW5kcm9pZCIpO2NvbnN0IFI9Ti5wZXJmb3JtYW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIE4ucGVyZm9ybWFuY2Uubm93O2NsYXNzIFZ7Y29uc3RydWN0b3IoZSl7dGhpcy5faGlnaFJlc29sdXRpb249UiYmZSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RhdGljIGNyZWF0ZShlPSEwKXtyZXR1cm4gbmV3IFYoZSl9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfWVsYXBzZWQoKXtyZXR1cm4tMSE9PXRoaXMuX3N0b3BUaW1lP3RoaXMuX3N0b3BUaW1lLXRoaXMuX3N0YXJ0VGltZTp0aGlzLl9ub3coKS10aGlzLl9zdGFydFRpbWV9X25vdygpe3JldHVybiB0aGlzLl9oaWdoUmVzb2x1dGlvbj9OLnBlcmZvcm1hbmNlLm5vdygpOkRhdGUubm93KCl9fXZhciBGLEQ7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQsbj1udWxsLHIpPT57bGV0IGksbz0hMTtyZXR1cm4gaT1lKChlPT57aWYoIW8pcmV0dXJuIGk/aS5kaXNwb3NlKCk6bz0hMCx0LmNhbGwobixlKX0pLG51bGwsciksbyYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+bi5jYWxsKHIsdChlKSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBhKCgobixyPW51bGwsaSk9PmUoKGU9Pnt0KGUpLG4uY2FsbChyLGUpfSksbnVsbCxpKSksbil9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+dChlKSYmbi5jYWxsKHIsZSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIG8oZSx0LHIsaSl7bGV0IG89cjtyZXR1cm4gbihlLChlPT4obz10KG8sZSksbykpLGkpfWZ1bmN0aW9uIGEoZSx0KXtsZXQgbjtjb25zdCByPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtuPWUoci5maXJlLHIpfSxvbkxhc3RMaXN0ZW5lclJlbW92ZSgpe251bGw9PW58fG4uZGlzcG9zZSgpfX0pO3JldHVybiBudWxsPT10fHx0LmFkZChyKSxyLmV2ZW50fWZ1bmN0aW9uIHMoZSx0LG49MTAwLHI9ITEsaSxvKXtsZXQgYSxzLGMsbD0wO2NvbnN0IHU9bmV3IEIoe2xlYWtXYXJuaW5nVGhyZXNob2xkOmksb25GaXJzdExpc3RlbmVyQWRkKCl7YT1lKChlPT57bCsrLHM9dChzLGUpLHImJiFjJiYodS5maXJlKHMpLHM9dm9pZCAwKSxjbGVhclRpbWVvdXQoYyksYz1zZXRUaW1lb3V0KCgoKT0+e2NvbnN0IGU9cztzPXZvaWQgMCxjPXZvaWQgMCwoIXJ8fGw+MSkmJnUuZmlyZShlKSxsPTB9KSxuKX0pKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXthLmRpc3Bvc2UoKX19KTtyZXR1cm4gbnVsbD09b3x8by5hZGQodSksdS5ldmVudH1mdW5jdGlvbiBjKGUsdD0oKGUsdCk9PmU9PT10KSxuKXtsZXQgcixvPSEwO3JldHVybiBpKGUsKGU9Pntjb25zdCBuPW98fCF0KGUscik7cmV0dXJuIG89ITEscj1lLG59KSxuKX1lLk5vbmU9KCk9PmYuTm9uZSxlLm9uY2U9dCxlLm1hcD1uLGUuZm9yRWFjaD1yLGUuZmlsdGVyPWksZS5zaWduYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuYW55PWZ1bmN0aW9uKC4uLmUpe3JldHVybih0LG49bnVsbCxyKT0+ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIHUoKCgpPT5sKGUpKSl9KC4uLmUubWFwKChlPT5lKChlPT50LmNhbGwobixlKSksbnVsbCxyKSkpKX0sZS5yZWR1Y2U9byxlLmRlYm91bmNlPXMsZS5sYXRjaD1jLGUuc3BsaXQ9ZnVuY3Rpb24odCxuLHIpe3JldHVybltlLmZpbHRlcih0LG4sciksZS5maWx0ZXIodCwoZT0+IW4oZSkpLHIpXX0sZS5idWZmZXI9ZnVuY3Rpb24oZSx0PSExLG49W10pe2xldCByPW4uc2xpY2UoKSxpPWUoKGU9PntyP3IucHVzaChlKTphLmZpcmUoZSl9KSk7Y29uc3Qgbz0oKT0+e251bGw9PXJ8fHIuZm9yRWFjaCgoZT0+YS5maXJlKGUpKSkscj1udWxsfSxhPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtpfHwoaT1lKChlPT5hLmZpcmUoZSkpKSl9LG9uRmlyc3RMaXN0ZW5lckRpZEFkZCgpe3ImJih0P3NldFRpbWVvdXQobyk6bygpKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXtpJiZpLmRpc3Bvc2UoKSxpPW51bGx9fSk7cmV0dXJuIGEuZXZlbnR9O2NsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5ldmVudD1lLHRoaXMuZGlzcG9zYWJsZXM9bmV3IGh9bWFwKGUpe3JldHVybiBuZXcgZChuKHRoaXMuZXZlbnQsZSx0aGlzLmRpc3Bvc2FibGVzKSl9Zm9yRWFjaChlKXtyZXR1cm4gbmV3IGQocih0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfWZpbHRlcihlKXtyZXR1cm4gbmV3IGQoaSh0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfXJlZHVjZShlLHQpe3JldHVybiBuZXcgZChvKHRoaXMuZXZlbnQsZSx0LHRoaXMuZGlzcG9zYWJsZXMpKX1sYXRjaCgpe3JldHVybiBuZXcgZChjKHRoaXMuZXZlbnQsdm9pZCAwLHRoaXMuZGlzcG9zYWJsZXMpKX1kZWJvdW5jZShlLHQ9MTAwLG49ITEscil7cmV0dXJuIG5ldyBkKHModGhpcy5ldmVudCxlLHQsbixyLHRoaXMuZGlzcG9zYWJsZXMpKX1vbihlLHQsbil7cmV0dXJuIHRoaXMuZXZlbnQoZSx0LG4pfW9uY2UoZSxuLHIpe3JldHVybiB0KHRoaXMuZXZlbnQpKGUsbixyKX1kaXNwb3NlKCl7dGhpcy5kaXNwb3NhYmxlcy5kaXNwb3NlKCl9fWUuY2hhaW49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkKGUpfSxlLmZyb21Ob2RlRXZlbnRFbWl0dGVyPWZ1bmN0aW9uKGUsdCxuPShlPT5lKSl7Y29uc3Qgcj0oLi4uZSk9PmkuZmlyZShuKC4uLmUpKSxpPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQ6KCk9PmUub24odCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVMaXN0ZW5lcih0LHIpfSk7cmV0dXJuIGkuZXZlbnR9LGUuZnJvbURPTUV2ZW50RW1pdHRlcj1mdW5jdGlvbihlLHQsbj0oZT0+ZSkpe2NvbnN0IHI9KC4uLmUpPT5pLmZpcmUobiguLi5lKSksaT1uZXcgQih7b25GaXJzdExpc3RlbmVyQWRkOigpPT5lLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQscil9KTtyZXR1cm4gaS5ldmVudH0sZS50b1Byb21pc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChuPT50KGUpKG4pKSl9LGUucnVuQW5kU3Vic2NyaWJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQodm9pZCAwKSxlKChlPT50KGUpKSl9LGUucnVuQW5kU3Vic2NyaWJlV2l0aFN0b3JlPWZ1bmN0aW9uKGUsdCl7bGV0IG49bnVsbDtmdW5jdGlvbiByKGUpe251bGw9PW58fG4uZGlzcG9zZSgpLG49bmV3IGgsdChlLG4pfXIodm9pZCAwKTtjb25zdCBpPWUoKGU9PnIoZSkpKTtyZXR1cm4gdSgoKCk9PntpLmRpc3Bvc2UoKSxudWxsPT1ufHxuLmRpc3Bvc2UoKX0pKX07Y2xhc3MgbXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMub2JzPWUsdGhpcy5fY291bnRlcj0wLHRoaXMuX2hhc0NoYW5nZWQ9ITE7Y29uc3Qgbj17b25GaXJzdExpc3RlbmVyQWRkOigpPT57ZS5hZGRPYnNlcnZlcih0aGlzKX0sb25MYXN0TGlzdGVuZXJSZW1vdmU6KCk9PntlLnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyBCKG4pLHQmJnQuYWRkKHRoaXMuZW1pdHRlcil9YmVnaW5VcGRhdGUoZSl7dGhpcy5fY291bnRlcisrfWhhbmRsZUNoYW5nZShlLHQpe3RoaXMuX2hhc0NoYW5nZWQ9ITB9ZW5kVXBkYXRlKGUpezA9PS0tdGhpcy5fY291bnRlciYmdGhpcy5faGFzQ2hhbmdlZCYmKHRoaXMuX2hhc0NoYW5nZWQ9ITEsdGhpcy5lbWl0dGVyLmZpcmUodGhpcy5vYnMuZ2V0KCkpKX19ZS5mcm9tT2JzZXJ2YWJsZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbShlLHQpLmVtaXR0ZXIuZXZlbnR9fShGfHwoRj17fSkpO2NsYXNzIEt7Y29uc3RydWN0b3IoZSl7dGhpcy5fbGlzdGVuZXJDb3VudD0wLHRoaXMuX2ludm9jYXRpb25Db3VudD0wLHRoaXMuX2VsYXBzZWRPdmVyYWxsPTAsdGhpcy5fbmFtZT1gJHtlfV8ke0suX2lkUG9vbCsrfWB9c3RhcnQoZSl7dGhpcy5fc3RvcFdhdGNoPW5ldyBWKCEwKSx0aGlzLl9saXN0ZW5lckNvdW50PWV9c3RvcCgpe2lmKHRoaXMuX3N0b3BXYXRjaCl7Y29uc3QgZT10aGlzLl9zdG9wV2F0Y2guZWxhcHNlZCgpO3RoaXMuX2VsYXBzZWRPdmVyYWxsKz1lLHRoaXMuX2ludm9jYXRpb25Db3VudCs9MSxjb25zb2xlLmluZm8oYGRpZCBGSVJFICR7dGhpcy5fbmFtZX06IGVsYXBzZWRfbXM6ICR7ZS50b0ZpeGVkKDUpfSwgbGlzdGVuZXI6ICR7dGhpcy5fbGlzdGVuZXJDb3VudH0gKGVsYXBzZWRfb3ZlcmFsbDogJHt0aGlzLl9lbGFwc2VkT3ZlcmFsbC50b0ZpeGVkKDIpfSwgaW52b2NhdGlvbnM6ICR7dGhpcy5faW52b2NhdGlvbkNvdW50fSlgKSx0aGlzLl9zdG9wV2F0Y2g9dm9pZCAwfX19Sy5faWRQb29sPTA7Y2xhc3Mgantjb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlPWV9c3RhdGljIGNyZWF0ZSgpe3ZhciBlO3JldHVybiBuZXcgaihudWxsIT09KGU9KG5ldyBFcnJvcikuc3RhY2spJiZ2b2lkIDAhPT1lP2U6IiIpfXByaW50KCl7Y29uc29sZS53YXJuKHRoaXMudmFsdWUuc3BsaXQoIlxuIikuc2xpY2UoMikuam9pbigiXG4iKSl9fWNsYXNzIFV7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuY2FsbGJhY2s9ZSx0aGlzLmNhbGxiYWNrVGhpcz10LHRoaXMuc3RhY2s9bix0aGlzLnN1YnNjcmlwdGlvbj1uZXcgZH1pbnZva2UoZSl7dGhpcy5jYWxsYmFjay5jYWxsKHRoaXMuY2FsbGJhY2tUaGlzLGUpfX1jbGFzcyBCe2NvbnN0cnVjdG9yKGUpe3ZhciB0LG47dGhpcy5fZGlzcG9zZWQ9ITEsdGhpcy5fb3B0aW9ucz1lLHRoaXMuX2xlYWthZ2VNb249dm9pZCAwLHRoaXMuX3BlcmZNb249KG51bGw9PT0odD10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09dD92b2lkIDA6dC5fcHJvZk5hbWUpP25ldyBLKHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT1udWxsPT09KG49dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dmFyIGUsdCxuLHI7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCx0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVycy5jbGVhcigpLG51bGw9PT0oZT10aGlzLl9kZWxpdmVyeVF1ZXVlKXx8dm9pZCAwPT09ZXx8ZS5jbGVhcih0aGlzKSxudWxsPT09KG49bnVsbD09PSh0PXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm9uTGFzdExpc3RlbmVyUmVtb3ZlKXx8dm9pZCAwPT09bnx8bi5jYWxsKHQpLG51bGw9PT0ocj10aGlzLl9sZWFrYWdlTW9uKXx8dm9pZCAwPT09cnx8ci5kaXNwb3NlKCkpfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PShlLHQsbik9Pnt2YXIgcixpLG87dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBnKTtjb25zdCBhPXRoaXMuX2xpc3RlbmVycy5pc0VtcHR5KCk7bGV0IHMsYzthJiYobnVsbD09PShyPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm9uRmlyc3RMaXN0ZW5lckFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkKHRoaXMpLHRoaXMuX2xlYWthZ2VNb24mJnRoaXMuX2xpc3RlbmVycy5zaXplPj0zMCYmKGM9ai5jcmVhdGUoKSxzPXRoaXMuX2xlYWthZ2VNb24uY2hlY2soYyx0aGlzLl9saXN0ZW5lcnMuc2l6ZSsxKSk7Y29uc3QgbD1uZXcgVShlLHQsYyksdT10aGlzLl9saXN0ZW5lcnMucHVzaChsKTthJiYobnVsbD09PShpPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLm9uRmlyc3RMaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyRGlkQWRkKHRoaXMpLChudWxsPT09KG89dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ub25MaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25MaXN0ZW5lckRpZEFkZCh0aGlzLGUsdCk7Y29uc3QgZj1sLnN1YnNjcmlwdGlvbi5zZXQoKCgpPT57aWYobnVsbD09c3x8cygpLCF0aGlzLl9kaXNwb3NlZCYmKHUoKSx0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlKSl7dGhpcy5fbGlzdGVuZXJzJiYhdGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKXx8dGhpcy5fb3B0aW9ucy5vbkxhc3RMaXN0ZW5lclJlbW92ZSh0aGlzKX19KSk7cmV0dXJuIG4gaW5zdGFuY2VvZiBoP24uYWRkKGYpOkFycmF5LmlzQXJyYXkobikmJm4ucHVzaChmKSxmfSksdGhpcy5fZXZlbnR9ZmlyZShlKXt2YXIgdCxuO2lmKHRoaXMuX2xpc3RlbmVycyl7dGhpcy5fZGVsaXZlcnlRdWV1ZXx8KHRoaXMuX2RlbGl2ZXJ5UXVldWU9bmV3ICQpO2Zvcihjb25zdCB0IG9mIHRoaXMuX2xpc3RlbmVycyl0aGlzLl9kZWxpdmVyeVF1ZXVlLnB1c2godGhpcyx0LGUpO251bGw9PT0odD10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09dHx8dC5zdGFydCh0aGlzLl9kZWxpdmVyeVF1ZXVlLnNpemUpLHRoaXMuX2RlbGl2ZXJ5UXVldWUuZGVsaXZlcigpLG51bGw9PT0obj10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09bnx8bi5zdG9wKCl9fX1jbGFzcyBxe2NvbnN0cnVjdG9yKCl7dGhpcy5fcXVldWU9bmV3IGd9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fcXVldWUuc2l6ZX1wdXNoKGUsdCxuKXt0aGlzLl9xdWV1ZS5wdXNoKG5ldyBXKGUsdCxuKSl9Y2xlYXIoZSl7Y29uc3QgdD1uZXcgZztmb3IoY29uc3QgbiBvZiB0aGlzLl9xdWV1ZSluLmVtaXR0ZXIhPT1lJiZ0LnB1c2gobik7dGhpcy5fcXVldWU9dH1kZWxpdmVyKCl7Zm9yKDt0aGlzLl9xdWV1ZS5zaXplPjA7KXtjb25zdCBlPXRoaXMuX3F1ZXVlLnNoaWZ0KCk7dHJ5e2UubGlzdGVuZXIuaW52b2tlKGUuZXZlbnQpfWNhdGNoKGUpe3QoZSl9fX19Y2xhc3MgJCBleHRlbmRzIHF7Y2xlYXIoZSl7dGhpcy5fcXVldWUuY2xlYXIoKX19Y2xhc3MgV3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbWl0dGVyPWUsdGhpcy5saXN0ZW5lcj10LHRoaXMuZXZlbnQ9bn19ZnVuY3Rpb24gSChlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGZ1bmN0aW9uKGUpe2xldCB0PVtdLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO2Zvcig7T2JqZWN0LnByb3RvdHlwZSE9PW47KXQ9dC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikpLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiB0fShlKSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIHooZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1jbGFzcyBHe2NvbnN0cnVjdG9yKGUpe3RoaXMuZXhlY3V0b3I9ZSx0aGlzLl9kaWRSdW49ITF9aGFzVmFsdWUoKXtyZXR1cm4gdGhpcy5fZGlkUnVufWdldFZhbHVlKCl7aWYoIXRoaXMuX2RpZFJ1bil0cnl7dGhpcy5fdmFsdWU9dGhpcy5leGVjdXRvcigpfWNhdGNoKGUpe3RoaXMuX2Vycm9yPWV9ZmluYWxseXt0aGlzLl9kaWRSdW49ITB9aWYodGhpcy5fZXJyb3IpdGhyb3cgdGhpcy5fZXJyb3I7cmV0dXJuIHRoaXMuX3ZhbHVlfWdldCByYXdWYWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX19ZnVuY3Rpb24gSihlKXtyZXR1cm4gZT49NjUmJmU8PTkwfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBaKGUsdCxuKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTtpZihYKHIpJiZuKzE8dCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobisxKTtpZihmdW5jdGlvbihlKXtyZXR1cm4gNTYzMjA8PWUmJmU8PTU3MzQzfSh0KSlyZXR1cm4gdC01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fXJldHVybiByfWNvbnN0IFk9L15bXHRcblxyXHgyMC1ceDdFXSokLztjbGFzcyBRe2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9ZX1zdGF0aWMgZ2V0SW5zdGFuY2UoZSl7cmV0dXJuIFEuY2FjaGUuZ2V0KEFycmF5LmZyb20oZSkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIFEuX2xvY2FsZXMuZ2V0VmFsdWUoKX1pc0FtYmlndW91cyhlKXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXMoZSl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUoZSl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KGUpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX1EPVEsUS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhPW5ldyBHKCgoKT0+SlNPTi5wYXJzZSgneyJfY29tbW9uIjpbODIzMiwzMiw4MjMzLDMyLDU3NjAsMzIsODE5MiwzMiw4MTkzLDMyLDgxOTQsMzIsODE5NSwzMiw4MTk2LDMyLDgxOTcsMzIsODE5OCwzMiw4MjAwLDMyLDgyMDEsMzIsODIwMiwzMiw4Mjg3LDMyLDgxOTksMzIsODIzOSwzMiwyMDQyLDk1LDY1MTAxLDk1LDY1MTAyLDk1LDY1MTAzLDk1LDgyMDgsNDUsODIwOSw0NSw4MjEwLDQ1LDY1MTEyLDQ1LDE3NDgsNDUsODI1OSw0NSw3MjcsNDUsODcyMiw0NSwxMDEzNCw0NSwxMTQ1MCw0NSwxNTQ5LDQ0LDE2NDMsNDQsODIxOCw0NCwxODQsNDQsNDIyMzMsNDQsODk0LDU5LDIzMDcsNTgsMjY5MSw1OCwxNDE3LDU4LDE3OTUsNTgsMTc5Niw1OCw1ODY4LDU4LDY1MDcyLDU4LDYxNDcsNTgsNjE1Myw1OCw4MjgyLDU4LDE0NzUsNTgsNzYwLDU4LDQyODg5LDU4LDg3NTgsNTgsNzIwLDU4LDQyMjM3LDU4LDQ1MSwzMywxMTYwMSwzMyw2NjAsNjMsNTc3LDYzLDI0MjksNjMsNTAzOCw2Myw0MjczMSw2MywxMTkxNDksNDYsODIyOCw0NiwxNzkzLDQ2LDE3OTQsNDYsNDI1MTAsNDYsNjgxNzYsNDYsMTYzMiw0NiwxNzc2LDQ2LDQyMjMyLDQ2LDEzNzMsOTYsNjUyODcsOTYsODIxOSw5Niw4MjQyLDk2LDEzNzAsOTYsMTUyMyw5Niw4MTc1LDk2LDY1MzQ0LDk2LDkwMCw5Niw4MTg5LDk2LDgxMjUsOTYsODEyNyw5Niw4MTkwLDk2LDY5Nyw5Niw4ODQsOTYsNzEyLDk2LDcxNCw5Niw3MTUsOTYsNzU2LDk2LDY5OSw5Niw3MDEsOTYsNzAwLDk2LDcwMiw5Niw0Mjg5Miw5NiwxNDk3LDk2LDIwMzYsOTYsMjAzNyw5Niw1MTk0LDk2LDU4MzYsOTYsOTQwMzMsOTYsOTQwMzQsOTYsNjUzMzksOTEsMTAwODgsNDAsMTAwOTgsNDAsMTIzMDgsNDAsNjQ4MzAsNDAsNjUzNDEsOTMsMTAwODksNDEsMTAwOTksNDEsMTIzMDksNDEsNjQ4MzEsNDEsMTAxMDAsMTIzLDExOTA2MCwxMjMsMTAxMDEsMTI1LDY1MzQyLDk0LDgyNzAsNDIsMTY0NSw0Miw4NzI3LDQyLDY2MzM1LDQyLDU5NDEsNDcsODI1Nyw0Nyw4NzI1LDQ3LDgyNjAsNDcsOTU4NSw0NywxMDE4Nyw0NywxMDc0NCw0NywxMTkzNTQsNDcsMTI3NTUsNDcsMTIzMzksNDcsMTE0NjIsNDcsMjAwMzEsNDcsMTIwMzUsNDcsNjUzNDAsOTIsNjUxMjgsOTIsODcyNiw5MiwxMDE4OSw5MiwxMDc0MSw5MiwxMDc0NSw5MiwxMTkzMTEsOTIsMTE5MzU1LDkyLDEyNzU2LDkyLDIwMDIyLDkyLDEyMDM0LDkyLDQyODcyLDM4LDcwOCw5NCw3MTAsOTQsNTg2OSw0MywxMDEzMyw0Myw2NjIwMyw0Myw4MjQ5LDYwLDEwMDk0LDYwLDcwNiw2MCwxMTkzNTAsNjAsNTE3Niw2MCw1ODEwLDYwLDUxMjAsNjEsMTE4NDAsNjEsMTI0NDgsNjEsNDIyMzksNjEsODI1MCw2MiwxMDA5NSw2Miw3MDcsNjIsMTE5MzUxLDYyLDUxNzEsNjIsOTQwMTUsNjIsODI3NSwxMjYsNzMyLDEyNiw4MTI4LDEyNiw4NzY0LDEyNiw2NTM3MiwxMjQsNjUyOTMsNDUsMTIwNzg0LDUwLDEyMDc5NCw1MCwxMjA4MDQsNTAsMTIwODE0LDUwLDEyMDgyNCw1MCwxMzAwMzQsNTAsNDI4NDIsNTAsNDIzLDUwLDEwMDAsNTAsNDI1NjQsNTAsNTMxMSw1MCw0MjczNSw1MCwxMTkzMDIsNTEsMTIwNzg1LDUxLDEyMDc5NSw1MSwxMjA4MDUsNTEsMTIwODE1LDUxLDEyMDgyNSw1MSwxMzAwMzUsNTEsNDI5MjMsNTEsNTQwLDUxLDQzOSw1MSw0Mjg1OCw1MSwxMTQ2OCw1MSwxMjQ4LDUxLDk0MDExLDUxLDcxODgyLDUxLDEyMDc4Niw1MiwxMjA3OTYsNTIsMTIwODA2LDUyLDEyMDgxNiw1MiwxMjA4MjYsNTIsMTMwMDM2LDUyLDUwNzAsNTIsNzE4NTUsNTIsMTIwNzg3LDUzLDEyMDc5Nyw1MywxMjA4MDcsNTMsMTIwODE3LDUzLDEyMDgyNyw1MywxMzAwMzcsNTMsNDQ0LDUzLDcxODY3LDUzLDEyMDc4OCw1NCwxMjA3OTgsNTQsMTIwODA4LDU0LDEyMDgxOCw1NCwxMjA4MjgsNTQsMTMwMDM4LDU0LDExNDc0LDU0LDUxMDIsNTQsNzE4OTMsNTQsMTE5MzE0LDU1LDEyMDc4OSw1NSwxMjA3OTksNTUsMTIwODA5LDU1LDEyMDgxOSw1NSwxMjA4MjksNTUsMTMwMDM5LDU1LDY2NzcwLDU1LDcxODc4LDU1LDI4MTksNTYsMjUzOCw1NiwyNjY2LDU2LDEyNTEzMSw1NiwxMjA3OTAsNTYsMTIwODAwLDU2LDEyMDgxMCw1NiwxMjA4MjAsNTYsMTIwODMwLDU2LDEzMDA0MCw1Niw1NDcsNTYsNTQ2LDU2LDY2MzMwLDU2LDI2NjMsNTcsMjkyMCw1NywyNTQxLDU3LDM0MzcsNTcsMTIwNzkxLDU3LDEyMDgwMSw1NywxMjA4MTEsNTcsMTIwODIxLDU3LDEyMDgzMSw1NywxMzAwNDEsNTcsNDI4NjIsNTcsMTE0NjYsNTcsNzE4ODQsNTcsNzE4NTIsNTcsNzE4OTQsNTcsOTA4Miw5Nyw2NTM0NSw5NywxMTk4MzQsOTcsMTE5ODg2LDk3LDExOTkzOCw5NywxMTk5OTAsOTcsMTIwMDQyLDk3LDEyMDA5NCw5NywxMjAxNDYsOTcsMTIwMTk4LDk3LDEyMDI1MCw5NywxMjAzMDIsOTcsMTIwMzU0LDk3LDEyMDQwNiw5NywxMjA0NTgsOTcsNTkzLDk3LDk0NSw5NywxMjA1MTQsOTcsMTIwNTcyLDk3LDEyMDYzMCw5NywxMjA2ODgsOTcsMTIwNzQ2LDk3LDY1MzEzLDY1LDExOTgwOCw2NSwxMTk4NjAsNjUsMTE5OTEyLDY1LDExOTk2NCw2NSwxMjAwMTYsNjUsMTIwMDY4LDY1LDEyMDEyMCw2NSwxMjAxNzIsNjUsMTIwMjI0LDY1LDEyMDI3Niw2NSwxMjAzMjgsNjUsMTIwMzgwLDY1LDEyMDQzMiw2NSw5MTMsNjUsMTIwNDg4LDY1LDEyMDU0Niw2NSwxMjA2MDQsNjUsMTIwNjYyLDY1LDEyMDcyMCw2NSw1MDM0LDY1LDU1NzMsNjUsNDIyMjIsNjUsOTQwMTYsNjUsNjYyMDgsNjUsMTE5ODM1LDk4LDExOTg4Nyw5OCwxMTk5MzksOTgsMTE5OTkxLDk4LDEyMDA0Myw5OCwxMjAwOTUsOTgsMTIwMTQ3LDk4LDEyMDE5OSw5OCwxMjAyNTEsOTgsMTIwMzAzLDk4LDEyMDM1NSw5OCwxMjA0MDcsOTgsMTIwNDU5LDk4LDM4OCw5OCw1MDcxLDk4LDUyMzQsOTgsNTU1MSw5OCw2NTMxNCw2Niw4NDkyLDY2LDExOTgwOSw2NiwxMTk4NjEsNjYsMTE5OTEzLDY2LDEyMDAxNyw2NiwxMjAwNjksNjYsMTIwMTIxLDY2LDEyMDE3Myw2NiwxMjAyMjUsNjYsMTIwMjc3LDY2LDEyMDMyOSw2NiwxMjAzODEsNjYsMTIwNDMzLDY2LDQyOTMyLDY2LDkxNCw2NiwxMjA0ODksNjYsMTIwNTQ3LDY2LDEyMDYwNSw2NiwxMjA2NjMsNjYsMTIwNzIxLDY2LDUxMDgsNjYsNTYyMyw2Niw0MjE5Miw2Niw2NjE3OCw2Niw2NjIwOSw2Niw2NjMwNSw2Niw2NTM0Nyw5OSw4NTczLDk5LDExOTgzNiw5OSwxMTk4ODgsOTksMTE5OTQwLDk5LDExOTk5Miw5OSwxMjAwNDQsOTksMTIwMDk2LDk5LDEyMDE0OCw5OSwxMjAyMDAsOTksMTIwMjUyLDk5LDEyMDMwNCw5OSwxMjAzNTYsOTksMTIwNDA4LDk5LDEyMDQ2MCw5OSw3NDI4LDk5LDEwMTAsOTksMTE0MjksOTksNDM5NTEsOTksNjY2MjEsOTksMTI4ODQ0LDY3LDcxOTIyLDY3LDcxOTEzLDY3LDY1MzE1LDY3LDg1NTcsNjcsODQ1MCw2Nyw4NDkzLDY3LDExOTgxMCw2NywxMTk4NjIsNjcsMTE5OTE0LDY3LDExOTk2Niw2NywxMjAwMTgsNjcsMTIwMTc0LDY3LDEyMDIyNiw2NywxMjAyNzgsNjcsMTIwMzMwLDY3LDEyMDM4Miw2NywxMjA0MzQsNjcsMTAxNyw2NywxMTQyOCw2Nyw1MDg3LDY3LDQyMjAyLDY3LDY2MjEwLDY3LDY2MzA2LDY3LDY2NTgxLDY3LDY2ODQ0LDY3LDg1NzQsMTAwLDg1MTgsMTAwLDExOTgzNywxMDAsMTE5ODg5LDEwMCwxMTk5NDEsMTAwLDExOTk5MywxMDAsMTIwMDQ1LDEwMCwxMjAwOTcsMTAwLDEyMDE0OSwxMDAsMTIwMjAxLDEwMCwxMjAyNTMsMTAwLDEyMDMwNSwxMDAsMTIwMzU3LDEwMCwxMjA0MDksMTAwLDEyMDQ2MSwxMDAsMTI4MSwxMDAsNTA5NSwxMDAsNTIzMSwxMDAsNDIxOTQsMTAwLDg1NTgsNjgsODUxNyw2OCwxMTk4MTEsNjgsMTE5ODYzLDY4LDExOTkxNSw2OCwxMTk5NjcsNjgsMTIwMDE5LDY4LDEyMDA3MSw2OCwxMjAxMjMsNjgsMTIwMTc1LDY4LDEyMDIyNyw2OCwxMjAyNzksNjgsMTIwMzMxLDY4LDEyMDM4Myw2OCwxMjA0MzUsNjgsNTAyNCw2OCw1NTk4LDY4LDU2MTAsNjgsNDIxOTUsNjgsODQ5NCwxMDEsNjUzNDksMTAxLDg0OTUsMTAxLDg1MTksMTAxLDExOTgzOCwxMDEsMTE5ODkwLDEwMSwxMTk5NDIsMTAxLDEyMDA0NiwxMDEsMTIwMDk4LDEwMSwxMjAxNTAsMTAxLDEyMDIwMiwxMDEsMTIwMjU0LDEwMSwxMjAzMDYsMTAxLDEyMDM1OCwxMDEsMTIwNDEwLDEwMSwxMjA0NjIsMTAxLDQzODI2LDEwMSwxMjEzLDEwMSw4OTU5LDY5LDY1MzE3LDY5LDg0OTYsNjksMTE5ODEyLDY5LDExOTg2NCw2OSwxMTk5MTYsNjksMTIwMDIwLDY5LDEyMDA3Miw2OSwxMjAxMjQsNjksMTIwMTc2LDY5LDEyMDIyOCw2OSwxMjAyODAsNjksMTIwMzMyLDY5LDEyMDM4NCw2OSwxMjA0MzYsNjksOTE3LDY5LDEyMDQ5Miw2OSwxMjA1NTAsNjksMTIwNjA4LDY5LDEyMDY2Niw2OSwxMjA3MjQsNjksMTE1NzcsNjksNTAzNiw2OSw0MjIyNCw2OSw3MTg0Niw2OSw3MTg1NCw2OSw2NjE4Miw2OSwxMTk4MzksMTAyLDExOTg5MSwxMDIsMTE5OTQzLDEwMiwxMTk5OTUsMTAyLDEyMDA0NywxMDIsMTIwMDk5LDEwMiwxMjAxNTEsMTAyLDEyMDIwMywxMDIsMTIwMjU1LDEwMiwxMjAzMDcsMTAyLDEyMDM1OSwxMDIsMTIwNDExLDEwMiwxMjA0NjMsMTAyLDQzODI5LDEwMiw0MjkwNSwxMDIsMzgzLDEwMiw3ODM3LDEwMiwxNDEyLDEwMiwxMTkzMTUsNzAsODQ5Nyw3MCwxMTk4MTMsNzAsMTE5ODY1LDcwLDExOTkxNyw3MCwxMjAwMjEsNzAsMTIwMDczLDcwLDEyMDEyNSw3MCwxMjAxNzcsNzAsMTIwMjI5LDcwLDEyMDI4MSw3MCwxMjAzMzMsNzAsMTIwMzg1LDcwLDEyMDQzNyw3MCw0MjkwNCw3MCw5ODgsNzAsMTIwNzc4LDcwLDU1NTYsNzAsNDIyMDUsNzAsNzE4NzQsNzAsNzE4NDIsNzAsNjYxODMsNzAsNjYyMTMsNzAsNjY4NTMsNzAsNjUzNTEsMTAzLDg0NTgsMTAzLDExOTg0MCwxMDMsMTE5ODkyLDEwMywxMTk5NDQsMTAzLDEyMDA0OCwxMDMsMTIwMTAwLDEwMywxMjAxNTIsMTAzLDEyMDIwNCwxMDMsMTIwMjU2LDEwMywxMjAzMDgsMTAzLDEyMDM2MCwxMDMsMTIwNDEyLDEwMywxMjA0NjQsMTAzLDYwOSwxMDMsNzU1NSwxMDMsMzk3LDEwMywxNDA5LDEwMywxMTk4MTQsNzEsMTE5ODY2LDcxLDExOTkxOCw3MSwxMTk5NzAsNzEsMTIwMDIyLDcxLDEyMDA3NCw3MSwxMjAxMjYsNzEsMTIwMTc4LDcxLDEyMDIzMCw3MSwxMjAyODIsNzEsMTIwMzM0LDcxLDEyMDM4Niw3MSwxMjA0MzgsNzEsMTI5Miw3MSw1MDU2LDcxLDUxMDcsNzEsNDIxOTgsNzEsNjUzNTIsMTA0LDg0NjIsMTA0LDExOTg0MSwxMDQsMTE5OTQ1LDEwNCwxMTk5OTcsMTA0LDEyMDA0OSwxMDQsMTIwMTAxLDEwNCwxMjAxNTMsMTA0LDEyMDIwNSwxMDQsMTIwMjU3LDEwNCwxMjAzMDksMTA0LDEyMDM2MSwxMDQsMTIwNDEzLDEwNCwxMjA0NjUsMTA0LDEyMTEsMTA0LDEzOTIsMTA0LDUwNTgsMTA0LDY1MzIwLDcyLDg0NTksNzIsODQ2MCw3Miw4NDYxLDcyLDExOTgxNSw3MiwxMTk4NjcsNzIsMTE5OTE5LDcyLDEyMDAyMyw3MiwxMjAxNzksNzIsMTIwMjMxLDcyLDEyMDI4Myw3MiwxMjAzMzUsNzIsMTIwMzg3LDcyLDEyMDQzOSw3Miw5MTksNzIsMTIwNDk0LDcyLDEyMDU1Miw3MiwxMjA2MTAsNzIsMTIwNjY4LDcyLDEyMDcyNiw3MiwxMTQwNiw3Miw1MDUxLDcyLDU1MDAsNzIsNDIyMTUsNzIsNjYyNTUsNzIsNzMxLDEwNSw5MDc1LDEwNSw2NTM1MywxMDUsODU2MCwxMDUsODUwNSwxMDUsODUyMCwxMDUsMTE5ODQyLDEwNSwxMTk4OTQsMTA1LDExOTk0NiwxMDUsMTE5OTk4LDEwNSwxMjAwNTAsMTA1LDEyMDEwMiwxMDUsMTIwMTU0LDEwNSwxMjAyMDYsMTA1LDEyMDI1OCwxMDUsMTIwMzEwLDEwNSwxMjAzNjIsMTA1LDEyMDQxNCwxMDUsMTIwNDY2LDEwNSwxMjA0ODQsMTA1LDYxOCwxMDUsNjE3LDEwNSw5NTMsMTA1LDgxMjYsMTA1LDg5MCwxMDUsMTIwNTIyLDEwNSwxMjA1ODAsMTA1LDEyMDYzOCwxMDUsMTIwNjk2LDEwNSwxMjA3NTQsMTA1LDExMTAsMTA1LDQyNTY3LDEwNSwxMjMxLDEwNSw0Mzg5MywxMDUsNTAyOSwxMDUsNzE4NzUsMTA1LDY1MzU0LDEwNiw4NTIxLDEwNiwxMTk4NDMsMTA2LDExOTg5NSwxMDYsMTE5OTQ3LDEwNiwxMTk5OTksMTA2LDEyMDA1MSwxMDYsMTIwMTAzLDEwNiwxMjAxNTUsMTA2LDEyMDIwNywxMDYsMTIwMjU5LDEwNiwxMjAzMTEsMTA2LDEyMDM2MywxMDYsMTIwNDE1LDEwNiwxMjA0NjcsMTA2LDEwMTEsMTA2LDExMTIsMTA2LDY1MzIyLDc0LDExOTgxNyw3NCwxMTk4NjksNzQsMTE5OTIxLDc0LDExOTk3Myw3NCwxMjAwMjUsNzQsMTIwMDc3LDc0LDEyMDEyOSw3NCwxMjAxODEsNzQsMTIwMjMzLDc0LDEyMDI4NSw3NCwxMjAzMzcsNzQsMTIwMzg5LDc0LDEyMDQ0MSw3NCw0MjkzMCw3NCw4OTUsNzQsMTAzMiw3NCw1MDM1LDc0LDUyNjEsNzQsNDIyMDEsNzQsMTE5ODQ0LDEwNywxMTk4OTYsMTA3LDExOTk0OCwxMDcsMTIwMDAwLDEwNywxMjAwNTIsMTA3LDEyMDEwNCwxMDcsMTIwMTU2LDEwNywxMjAyMDgsMTA3LDEyMDI2MCwxMDcsMTIwMzEyLDEwNywxMjAzNjQsMTA3LDEyMDQxNiwxMDcsMTIwNDY4LDEwNyw4NDkwLDc1LDY1MzIzLDc1LDExOTgxOCw3NSwxMTk4NzAsNzUsMTE5OTIyLDc1LDExOTk3NCw3NSwxMjAwMjYsNzUsMTIwMDc4LDc1LDEyMDEzMCw3NSwxMjAxODIsNzUsMTIwMjM0LDc1LDEyMDI4Niw3NSwxMjAzMzgsNzUsMTIwMzkwLDc1LDEyMDQ0Miw3NSw5MjIsNzUsMTIwNDk3LDc1LDEyMDU1NSw3NSwxMjA2MTMsNzUsMTIwNjcxLDc1LDEyMDcyOSw3NSwxMTQxMiw3NSw1MDk0LDc1LDU4NDUsNzUsNDIxOTksNzUsNjY4NDAsNzUsMTQ3MiwxMDgsODczOSw3Myw5MjEzLDczLDY1NTEyLDczLDE2MzMsMTA4LDE3NzcsNzMsNjYzMzYsMTA4LDEyNTEyNywxMDgsMTIwNzgzLDczLDEyMDc5Myw3MywxMjA4MDMsNzMsMTIwODEzLDczLDEyMDgyMyw3MywxMzAwMzMsNzMsNjUzMjEsNzMsODU0NCw3Myw4NDY0LDczLDg0NjUsNzMsMTE5ODE2LDczLDExOTg2OCw3MywxMTk5MjAsNzMsMTIwMDI0LDczLDEyMDEyOCw3MywxMjAxODAsNzMsMTIwMjMyLDczLDEyMDI4NCw3MywxMjAzMzYsNzMsMTIwMzg4LDczLDEyMDQ0MCw3Myw2NTM1NiwxMDgsODU3Miw3Myw4NDY3LDEwOCwxMTk4NDUsMTA4LDExOTg5NywxMDgsMTE5OTQ5LDEwOCwxMjAwMDEsMTA4LDEyMDA1MywxMDgsMTIwMTA1LDczLDEyMDE1Nyw3MywxMjAyMDksNzMsMTIwMjYxLDczLDEyMDMxMyw3MywxMjAzNjUsNzMsMTIwNDE3LDczLDEyMDQ2OSw3Myw0NDgsNzMsMTIwNDk2LDczLDEyMDU1NCw3MywxMjA2MTIsNzMsMTIwNjcwLDczLDEyMDcyOCw3MywxMTQxMCw3MywxMDMwLDczLDEyMTYsNzMsMTQ5MywxMDgsMTUwMywxMDgsMTU3NSwxMDgsMTI2NDY0LDEwOCwxMjY1OTIsMTA4LDY1MTY2LDEwOCw2NTE2NSwxMDgsMTk5NCwxMDgsMTE1OTksNzMsNTgyNSw3Myw0MjIyNiw3Myw5Mzk5Miw3Myw2NjE4NiwxMjQsNjYzMTMsMTI0LDExOTMzOCw3Niw4NTU2LDc2LDg0NjYsNzYsMTE5ODE5LDc2LDExOTg3MSw3NiwxMTk5MjMsNzYsMTIwMDI3LDc2LDEyMDA3OSw3NiwxMjAxMzEsNzYsMTIwMTgzLDc2LDEyMDIzNSw3NiwxMjAyODcsNzYsMTIwMzM5LDc2LDEyMDM5MSw3NiwxMjA0NDMsNzYsMTE0NzIsNzYsNTA4Niw3Niw1MjkwLDc2LDQyMjA5LDc2LDkzOTc0LDc2LDcxODQzLDc2LDcxODU4LDc2LDY2NTg3LDc2LDY2ODU0LDc2LDY1MzI1LDc3LDg1NTksNzcsODQ5OSw3NywxMTk4MjAsNzcsMTE5ODcyLDc3LDExOTkyNCw3NywxMjAwMjgsNzcsMTIwMDgwLDc3LDEyMDEzMiw3NywxMjAxODQsNzcsMTIwMjM2LDc3LDEyMDI4OCw3NywxMjAzNDAsNzcsMTIwMzkyLDc3LDEyMDQ0NCw3Nyw5MjQsNzcsMTIwNDk5LDc3LDEyMDU1Nyw3NywxMjA2MTUsNzcsMTIwNjczLDc3LDEyMDczMSw3NywxMDE4LDc3LDExNDE2LDc3LDUwNDcsNzcsNTYxNiw3Nyw1ODQ2LDc3LDQyMjA3LDc3LDY2MjI0LDc3LDY2MzIxLDc3LDExOTg0NywxMTAsMTE5ODk5LDExMCwxMTk5NTEsMTEwLDEyMDAwMywxMTAsMTIwMDU1LDExMCwxMjAxMDcsMTEwLDEyMDE1OSwxMTAsMTIwMjExLDExMCwxMjAyNjMsMTEwLDEyMDMxNSwxMTAsMTIwMzY3LDExMCwxMjA0MTksMTEwLDEyMDQ3MSwxMTAsMTQwMCwxMTAsMTQwNCwxMTAsNjUzMjYsNzgsODQ2OSw3OCwxMTk4MjEsNzgsMTE5ODczLDc4LDExOTkyNSw3OCwxMTk5NzcsNzgsMTIwMDI5LDc4LDEyMDA4MSw3OCwxMjAxODUsNzgsMTIwMjM3LDc4LDEyMDI4OSw3OCwxMjAzNDEsNzgsMTIwMzkzLDc4LDEyMDQ0NSw3OCw5MjUsNzgsMTIwNTAwLDc4LDEyMDU1OCw3OCwxMjA2MTYsNzgsMTIwNjc0LDc4LDEyMDczMiw3OCwxMTQxOCw3OCw0MjIwOCw3OCw2NjgzNSw3OCwzMDc0LDExMSwzMjAyLDExMSwzMzMwLDExMSwzNDU4LDExMSwyNDA2LDExMSwyNjYyLDExMSwyNzkwLDExMSwzMDQ2LDExMSwzMTc0LDExMSwzMzAyLDExMSwzNDMwLDExMSwzNjY0LDExMSwzNzkyLDExMSw0MTYwLDExMSwxNjM3LDExMSwxNzgxLDExMSw2NTM1OSwxMTEsODUwMCwxMTEsMTE5ODQ4LDExMSwxMTk5MDAsMTExLDExOTk1MiwxMTEsMTIwMDU2LDExMSwxMjAxMDgsMTExLDEyMDE2MCwxMTEsMTIwMjEyLDExMSwxMjAyNjQsMTExLDEyMDMxNiwxMTEsMTIwMzY4LDExMSwxMjA0MjAsMTExLDEyMDQ3MiwxMTEsNzQzOSwxMTEsNzQ0MSwxMTEsNDM4MzcsMTExLDk1OSwxMTEsMTIwNTI4LDExMSwxMjA1ODYsMTExLDEyMDY0NCwxMTEsMTIwNzAyLDExMSwxMjA3NjAsMTExLDk2MywxMTEsMTIwNTMyLDExMSwxMjA1OTAsMTExLDEyMDY0OCwxMTEsMTIwNzA2LDExMSwxMjA3NjQsMTExLDExNDIzLDExMSw0MzUxLDExMSwxNDEzLDExMSwxNTA1LDExMSwxNjA3LDExMSwxMjY1MDAsMTExLDEyNjU2NCwxMTEsMTI2NTk2LDExMSw2NTI1OSwxMTEsNjUyNjAsMTExLDY1MjU4LDExMSw2NTI1NywxMTEsMTcyNiwxMTEsNjQ0MjgsMTExLDY0NDI5LDExMSw2NDQyNywxMTEsNjQ0MjYsMTExLDE3MjksMTExLDY0NDI0LDExMSw2NDQyNSwxMTEsNjQ0MjMsMTExLDY0NDIyLDExMSwxNzQ5LDExMSwzMzYwLDExMSw0MTI1LDExMSw2Njc5NCwxMTEsNzE4ODAsMTExLDcxODk1LDExMSw2NjYwNCwxMTEsMTk4NCw3OSwyNTM0LDc5LDI5MTgsNzksMTIyOTUsNzksNzA4NjQsNzksNzE5MDQsNzksMTIwNzgyLDc5LDEyMDc5Miw3OSwxMjA4MDIsNzksMTIwODEyLDc5LDEyMDgyMiw3OSwxMzAwMzIsNzksNjUzMjcsNzksMTE5ODIyLDc5LDExOTg3NCw3OSwxMTk5MjYsNzksMTE5OTc4LDc5LDEyMDAzMCw3OSwxMjAwODIsNzksMTIwMTM0LDc5LDEyMDE4Niw3OSwxMjAyMzgsNzksMTIwMjkwLDc5LDEyMDM0Miw3OSwxMjAzOTQsNzksMTIwNDQ2LDc5LDkyNyw3OSwxMjA1MDIsNzksMTIwNTYwLDc5LDEyMDYxOCw3OSwxMjA2NzYsNzksMTIwNzM0LDc5LDExNDIyLDc5LDEzNjUsNzksMTE2MDQsNzksNDgxNiw3OSwyODQ4LDc5LDY2NzU0LDc5LDQyMjI3LDc5LDcxODYxLDc5LDY2MTk0LDc5LDY2MjE5LDc5LDY2NTY0LDc5LDY2ODM4LDc5LDkwNzYsMTEyLDY1MzYwLDExMiwxMTk4NDksMTEyLDExOTkwMSwxMTIsMTE5OTUzLDExMiwxMjAwMDUsMTEyLDEyMDA1NywxMTIsMTIwMTA5LDExMiwxMjAxNjEsMTEyLDEyMDIxMywxMTIsMTIwMjY1LDExMiwxMjAzMTcsMTEyLDEyMDM2OSwxMTIsMTIwNDIxLDExMiwxMjA0NzMsMTEyLDk2MSwxMTIsMTIwNTMwLDExMiwxMjA1NDQsMTEyLDEyMDU4OCwxMTIsMTIwNjAyLDExMiwxMjA2NDYsMTEyLDEyMDY2MCwxMTIsMTIwNzA0LDExMiwxMjA3MTgsMTEyLDEyMDc2MiwxMTIsMTIwNzc2LDExMiwxMTQyNywxMTIsNjUzMjgsODAsODQ3Myw4MCwxMTk4MjMsODAsMTE5ODc1LDgwLDExOTkyNyw4MCwxMTk5NzksODAsMTIwMDMxLDgwLDEyMDA4Myw4MCwxMjAxODcsODAsMTIwMjM5LDgwLDEyMDI5MSw4MCwxMjAzNDMsODAsMTIwMzk1LDgwLDEyMDQ0Nyw4MCw5MjksODAsMTIwNTA0LDgwLDEyMDU2Miw4MCwxMjA2MjAsODAsMTIwNjc4LDgwLDEyMDczNiw4MCwxMTQyNiw4MCw1MDkwLDgwLDUyMjksODAsNDIxOTMsODAsNjYxOTcsODAsMTE5ODUwLDExMywxMTk5MDIsMTEzLDExOTk1NCwxMTMsMTIwMDA2LDExMywxMjAwNTgsMTEzLDEyMDExMCwxMTMsMTIwMTYyLDExMywxMjAyMTQsMTEzLDEyMDI2NiwxMTMsMTIwMzE4LDExMywxMjAzNzAsMTEzLDEyMDQyMiwxMTMsMTIwNDc0LDExMywxMzA3LDExMywxMzc5LDExMywxMzgyLDExMyw4NDc0LDgxLDExOTgyNCw4MSwxMTk4NzYsODEsMTE5OTI4LDgxLDExOTk4MCw4MSwxMjAwMzIsODEsMTIwMDg0LDgxLDEyMDE4OCw4MSwxMjAyNDAsODEsMTIwMjkyLDgxLDEyMDM0NCw4MSwxMjAzOTYsODEsMTIwNDQ4LDgxLDExNjA1LDgxLDExOTg1MSwxMTQsMTE5OTAzLDExNCwxMTk5NTUsMTE0LDEyMDAwNywxMTQsMTIwMDU5LDExNCwxMjAxMTEsMTE0LDEyMDE2MywxMTQsMTIwMjE1LDExNCwxMjAyNjcsMTE0LDEyMDMxOSwxMTQsMTIwMzcxLDExNCwxMjA0MjMsMTE0LDEyMDQ3NSwxMTQsNDM4NDcsMTE0LDQzODQ4LDExNCw3NDYyLDExNCwxMTM5NywxMTQsNDM5MDUsMTE0LDExOTMxOCw4Miw4NDc1LDgyLDg0NzYsODIsODQ3Nyw4MiwxMTk4MjUsODIsMTE5ODc3LDgyLDExOTkyOSw4MiwxMjAwMzMsODIsMTIwMTg5LDgyLDEyMDI0MSw4MiwxMjAyOTMsODIsMTIwMzQ1LDgyLDEyMDM5Nyw4MiwxMjA0NDksODIsNDIyLDgyLDUwMjUsODIsNTA3NCw4Miw2Njc0MCw4Miw1NTExLDgyLDQyMjExLDgyLDk0MDA1LDgyLDY1MzYzLDExNSwxMTk4NTIsMTE1LDExOTkwNCwxMTUsMTE5OTU2LDExNSwxMjAwMDgsMTE1LDEyMDA2MCwxMTUsMTIwMTEyLDExNSwxMjAxNjQsMTE1LDEyMDIxNiwxMTUsMTIwMjY4LDExNSwxMjAzMjAsMTE1LDEyMDM3MiwxMTUsMTIwNDI0LDExNSwxMjA0NzYsMTE1LDQyODAxLDExNSw0NDUsMTE1LDExMDksMTE1LDQzOTQ2LDExNSw3MTg3MywxMTUsNjY2MzIsMTE1LDY1MzMxLDgzLDExOTgyNiw4MywxMTk4NzgsODMsMTE5OTMwLDgzLDExOTk4Miw4MywxMjAwMzQsODMsMTIwMDg2LDgzLDEyMDEzOCw4MywxMjAxOTAsODMsMTIwMjQyLDgzLDEyMDI5NCw4MywxMjAzNDYsODMsMTIwMzk4LDgzLDEyMDQ1MCw4MywxMDI5LDgzLDEzNTksODMsNTA3Nyw4Myw1MDgyLDgzLDQyMjEwLDgzLDk0MDEwLDgzLDY2MTk4LDgzLDY2NTkyLDgzLDExOTg1MywxMTYsMTE5OTA1LDExNiwxMTk5NTcsMTE2LDEyMDAwOSwxMTYsMTIwMDYxLDExNiwxMjAxMTMsMTE2LDEyMDE2NSwxMTYsMTIwMjE3LDExNiwxMjAyNjksMTE2LDEyMDMyMSwxMTYsMTIwMzczLDExNiwxMjA0MjUsMTE2LDEyMDQ3NywxMTYsODg2OCw4NCwxMDIwMSw4NCwxMjg4NzIsODQsNjUzMzIsODQsMTE5ODI3LDg0LDExOTg3OSw4NCwxMTk5MzEsODQsMTE5OTgzLDg0LDEyMDAzNSw4NCwxMjAwODcsODQsMTIwMTM5LDg0LDEyMDE5MSw4NCwxMjAyNDMsODQsMTIwMjk1LDg0LDEyMDM0Nyw4NCwxMjAzOTksODQsMTIwNDUxLDg0LDkzMiw4NCwxMjA1MDcsODQsMTIwNTY1LDg0LDEyMDYyMyw4NCwxMjA2ODEsODQsMTIwNzM5LDg0LDExNDMwLDg0LDUwMjYsODQsNDIxOTYsODQsOTM5NjIsODQsNzE4NjgsODQsNjYxOTksODQsNjYyMjUsODQsNjYzMjUsODQsMTE5ODU0LDExNywxMTk5MDYsMTE3LDExOTk1OCwxMTcsMTIwMDEwLDExNywxMjAwNjIsMTE3LDEyMDExNCwxMTcsMTIwMTY2LDExNywxMjAyMTgsMTE3LDEyMDI3MCwxMTcsMTIwMzIyLDExNywxMjAzNzQsMTE3LDEyMDQyNiwxMTcsMTIwNDc4LDExNyw0MjkxMSwxMTcsNzQ1MiwxMTcsNDM4NTQsMTE3LDQzODU4LDExNyw2NTEsMTE3LDk2NSwxMTcsMTIwNTM0LDExNywxMjA1OTIsMTE3LDEyMDY1MCwxMTcsMTIwNzA4LDExNywxMjA3NjYsMTE3LDE0MDUsMTE3LDY2ODA2LDExNyw3MTg5NiwxMTcsODc0Niw4NSw4ODk5LDg1LDExOTgyOCw4NSwxMTk4ODAsODUsMTE5OTMyLDg1LDExOTk4NCw4NSwxMjAwMzYsODUsMTIwMDg4LDg1LDEyMDE0MCw4NSwxMjAxOTIsODUsMTIwMjQ0LDg1LDEyMDI5Niw4NSwxMjAzNDgsODUsMTIwNDAwLDg1LDEyMDQ1Miw4NSwxMzU3LDg1LDQ2MDgsODUsNjY3NjYsODUsNTE5Niw4NSw0MjIyOCw4NSw5NDAxOCw4NSw3MTg2NCw4NSw4NzQ0LDExOCw4ODk3LDExOCw2NTM2NiwxMTgsODU2NCwxMTgsMTE5ODU1LDExOCwxMTk5MDcsMTE4LDExOTk1OSwxMTgsMTIwMDExLDExOCwxMjAwNjMsMTE4LDEyMDExNSwxMTgsMTIwMTY3LDExOCwxMjAyMTksMTE4LDEyMDI3MSwxMTgsMTIwMzIzLDExOCwxMjAzNzUsMTE4LDEyMDQyNywxMTgsMTIwNDc5LDExOCw3NDU2LDExOCw5NTcsMTE4LDEyMDUyNiwxMTgsMTIwNTg0LDExOCwxMjA2NDIsMTE4LDEyMDcwMCwxMTgsMTIwNzU4LDExOCwxMTQxLDExOCwxNDk2LDExOCw3MTQzMCwxMTgsNDM5NDUsMTE4LDcxODcyLDExOCwxMTkzMDksODYsMTYzOSw4NiwxNzgzLDg2LDg1NDgsODYsMTE5ODI5LDg2LDExOTg4MSw4NiwxMTk5MzMsODYsMTE5OTg1LDg2LDEyMDAzNyw4NiwxMjAwODksODYsMTIwMTQxLDg2LDEyMDE5Myw4NiwxMjAyNDUsODYsMTIwMjk3LDg2LDEyMDM0OSw4NiwxMjA0MDEsODYsMTIwNDUzLDg2LDExNDAsODYsMTE1NzYsODYsNTA4MSw4Niw1MTY3LDg2LDQyNzE5LDg2LDQyMjE0LDg2LDkzOTYwLDg2LDcxODQwLDg2LDY2ODQ1LDg2LDYyMywxMTksMTE5ODU2LDExOSwxMTk5MDgsMTE5LDExOTk2MCwxMTksMTIwMDEyLDExOSwxMjAwNjQsMTE5LDEyMDExNiwxMTksMTIwMTY4LDExOSwxMjAyMjAsMTE5LDEyMDI3MiwxMTksMTIwMzI0LDExOSwxMjAzNzYsMTE5LDEyMDQyOCwxMTksMTIwNDgwLDExOSw3NDU3LDExOSwxMTIxLDExOSwxMzA5LDExOSwxMzc3LDExOSw3MTQzNCwxMTksNzE0MzgsMTE5LDcxNDM5LDExOSw0MzkwNywxMTksNzE5MTksODcsNzE5MTAsODcsMTE5ODMwLDg3LDExOTg4Miw4NywxMTk5MzQsODcsMTE5OTg2LDg3LDEyMDAzOCw4NywxMjAwOTAsODcsMTIwMTQyLDg3LDEyMDE5NCw4NywxMjAyNDYsODcsMTIwMjk4LDg3LDEyMDM1MCw4NywxMjA0MDIsODcsMTIwNDU0LDg3LDEzMDgsODcsNTA0Myw4Nyw1MDc2LDg3LDQyMjE4LDg3LDU3NDIsMTIwLDEwNTM5LDEyMCwxMDU0MCwxMjAsMTA3OTksMTIwLDY1MzY4LDEyMCw4NTY5LDEyMCwxMTk4NTcsMTIwLDExOTkwOSwxMjAsMTE5OTYxLDEyMCwxMjAwMTMsMTIwLDEyMDA2NSwxMjAsMTIwMTE3LDEyMCwxMjAxNjksMTIwLDEyMDIyMSwxMjAsMTIwMjczLDEyMCwxMjAzMjUsMTIwLDEyMDM3NywxMjAsMTIwNDI5LDEyMCwxMjA0ODEsMTIwLDU0NDEsMTIwLDU1MDEsMTIwLDU3NDEsODgsOTU4Nyw4OCw2NjMzOCw4OCw3MTkxNiw4OCw2NTMzNiw4OCw4NTUzLDg4LDExOTgzMSw4OCwxMTk4ODMsODgsMTE5OTM1LDg4LDExOTk4Nyw4OCwxMjAwMzksODgsMTIwMDkxLDg4LDEyMDE0Myw4OCwxMjAxOTUsODgsMTIwMjQ3LDg4LDEyMDI5OSw4OCwxMjAzNTEsODgsMTIwNDAzLDg4LDEyMDQ1NSw4OCw0MjkzMSw4OCw5MzUsODgsMTIwNTEwLDg4LDEyMDU2OCw4OCwxMjA2MjYsODgsMTIwNjg0LDg4LDEyMDc0Miw4OCwxMTQzNiw4OCwxMTYxMyw4OCw1ODE1LDg4LDQyMjE5LDg4LDY2MTkyLDg4LDY2MjI4LDg4LDY2MzI3LDg4LDY2ODU1LDg4LDYxMSwxMjEsNzU2NCwxMjEsNjUzNjksMTIxLDExOTg1OCwxMjEsMTE5OTEwLDEyMSwxMTk5NjIsMTIxLDEyMDAxNCwxMjEsMTIwMDY2LDEyMSwxMjAxMTgsMTIxLDEyMDE3MCwxMjEsMTIwMjIyLDEyMSwxMjAyNzQsMTIxLDEyMDMyNiwxMjEsMTIwMzc4LDEyMSwxMjA0MzAsMTIxLDEyMDQ4MiwxMjEsNjU1LDEyMSw3OTM1LDEyMSw0Mzg2NiwxMjEsOTQ3LDEyMSw4NTA5LDEyMSwxMjA1MTYsMTIxLDEyMDU3NCwxMjEsMTIwNjMyLDEyMSwxMjA2OTAsMTIxLDEyMDc0OCwxMjEsMTE5OSwxMjEsNDMyNywxMjEsNzE5MDAsMTIxLDY1MzM3LDg5LDExOTgzMiw4OSwxMTk4ODQsODksMTE5OTM2LDg5LDExOTk4OCw4OSwxMjAwNDAsODksMTIwMDkyLDg5LDEyMDE0NCw4OSwxMjAxOTYsODksMTIwMjQ4LDg5LDEyMDMwMCw4OSwxMjAzNTIsODksMTIwNDA0LDg5LDEyMDQ1Niw4OSw5MzMsODksOTc4LDg5LDEyMDUwOCw4OSwxMjA1NjYsODksMTIwNjI0LDg5LDEyMDY4Miw4OSwxMjA3NDAsODksMTE0MzIsODksMTE5OCw4OSw1MDMzLDg5LDUwNTMsODksNDIyMjAsODksOTQwMTksODksNzE4NDQsODksNjYyMjYsODksMTE5ODU5LDEyMiwxMTk5MTEsMTIyLDExOTk2MywxMjIsMTIwMDE1LDEyMiwxMjAwNjcsMTIyLDEyMDExOSwxMjIsMTIwMTcxLDEyMiwxMjAyMjMsMTIyLDEyMDI3NSwxMjIsMTIwMzI3LDEyMiwxMjAzNzksMTIyLDEyMDQzMSwxMjIsMTIwNDgzLDEyMiw3NDU4LDEyMiw0MzkyMywxMjIsNzE4NzYsMTIyLDY2MjkzLDkwLDcxOTA5LDkwLDY1MzM4LDkwLDg0ODQsOTAsODQ4OCw5MCwxMTk4MzMsOTAsMTE5ODg1LDkwLDExOTkzNyw5MCwxMTk5ODksOTAsMTIwMDQxLDkwLDEyMDE5Nyw5MCwxMjAyNDksOTAsMTIwMzAxLDkwLDEyMDM1Myw5MCwxMjA0MDUsOTAsMTIwNDU3LDkwLDkxOCw5MCwxMjA0OTMsOTAsMTIwNTUxLDkwLDEyMDYwOSw5MCwxMjA2NjcsOTAsMTIwNzI1LDkwLDUwNTksOTAsNDIyMDQsOTAsNzE4NDksOTAsNjUyODIsMzQsNjUyODQsMzYsNjUyODUsMzcsNjUyODYsMzgsNjUyOTAsNDIsNjUyOTEsNDMsNjUyOTQsNDYsNjUyOTUsNDcsNjUyOTYsNDgsNjUyOTcsNDksNjUyOTgsNTAsNjUyOTksNTEsNjUzMDAsNTIsNjUzMDEsNTMsNjUzMDIsNTQsNjUzMDMsNTUsNjUzMDQsNTYsNjUzMDUsNTcsNjUzMDgsNjAsNjUzMDksNjEsNjUzMTAsNjIsNjUzMTIsNjQsNjUzMTYsNjgsNjUzMTgsNzAsNjUzMTksNzEsNjUzMjQsNzYsNjUzMjksODEsNjUzMzAsODIsNjUzMzMsODUsNjUzMzQsODYsNjUzMzUsODcsNjUzNDMsOTUsNjUzNDYsOTgsNjUzNDgsMTAwLDY1MzUwLDEwMiw2NTM1NSwxMDcsNjUzNTcsMTA5LDY1MzU4LDExMCw2NTM2MSwxMTMsNjUzNjIsMTE0LDY1MzY0LDExNiw2NTM2NSwxMTcsNjUzNjcsMTE5LDY1MzcwLDEyMiw2NTM3MSwxMjMsNjUzNzMsMTI1XSwiX2RlZmF1bHQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiY3MiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImRlIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJlcyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJmciI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJpdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiamEiOls4MjExLDQ1LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI5Miw0NCw2NTMwNyw1OV0sImtvIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwbCI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwdC1CUiI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJxcHMtcGxvYyI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJydSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMzA1LDEwNSw5MjEsNzMsMTAwOSwxMTIsMjE1LDEyMCw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInRyIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInpoLWhhbnMiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODgsNDAsNjUyODksNDFdLCJ6aC1oYW50IjpbODIxMSw0NSw2NTM3NCwxMjYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MzA3LDU5XX0nKSkpLFEuY2FjaGU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZm49ZSx0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQoZSl7Y29uc3QgdD1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gdGhpcy5sYXN0QXJnS2V5IT09dCYmKHRoaXMubGFzdEFyZ0tleT10LHRoaXMubGFzdENhY2hlPXRoaXMuZm4oZSkpLHRoaXMubGFzdENhY2hlfX0oKGU9PntmdW5jdGlvbiB0KGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTIpdC5zZXQoZVtuXSxlW24rMV0pO3JldHVybiB0fWZ1bmN0aW9uIG4oZSx0KXtpZighZSlyZXR1cm4gdDtjb25zdCBuPW5ldyBNYXA7Zm9yKGNvbnN0W3IsaV1vZiBlKXQuaGFzKHIpJiZuLnNldChyLGkpO3JldHVybiBufWNvbnN0IHI9RC5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCk7bGV0IGksbz1lLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpJiZlIGluIHIpKTswPT09by5sZW5ndGgmJihvPVsiX2RlZmF1bHQiXSk7Zm9yKGNvbnN0IGUgb2Ygbyl7aT1uKGksdChyW2VdKSl9Y29uc3QgYT1mdW5jdGlvbihlLHQpe2NvbnN0IG49bmV3IE1hcChlKTtmb3IoY29uc3RbZSxyXW9mIHQpbi5zZXQoZSxyKTtyZXR1cm4gbn0odChyLl9jb21tb24pLGkpO3JldHVybiBuZXcgUShhKX0pKSxRLl9sb2NhbGVzPW5ldyBHKCgoKT0+T2JqZWN0LmtleXMoUS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCkpLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpKSkpKTtjbGFzcyBlZXtzdGF0aWMgZ2V0UmF3RGF0YSgpe3JldHVybiBKU09OLnBhcnNlKCJbOSwxMCwxMSwxMiwxMywzMiwxMjcsMTYwLDE3Myw4NDcsMTU2NCw0NDQ3LDQ0NDgsNjA2OCw2MDY5LDYxNTUsNjE1Niw2MTU3LDYxNTgsNzM1NSw3MzU2LDgxOTIsODE5Myw4MTk0LDgxOTUsODE5Niw4MTk3LDgxOTgsODE5OSw4MjAwLDgyMDEsODIwMiw4MjAzLDgyMDQsODIwNSw4MjA2LDgyMDcsODIzNCw4MjM1LDgyMzYsODIzNyw4MjM4LDgyMzksODI4Nyw4Mjg4LDgyODksODI5MCw4MjkxLDgyOTIsODI5Myw4Mjk0LDgyOTUsODI5Niw4Mjk3LDgyOTgsODI5OSw4MzAwLDgzMDEsODMwMiw4MzAzLDEwMjQwLDEyMjg4LDEyNjQ0LDY1MDI0LDY1MDI1LDY1MDI2LDY1MDI3LDY1MDI4LDY1MDI5LDY1MDMwLDY1MDMxLDY1MDMyLDY1MDMzLDY1MDM0LDY1MDM1LDY1MDM2LDY1MDM3LDY1MDM4LDY1MDM5LDY1Mjc5LDY1NDQwLDY1NTIwLDY1NTIxLDY1NTIyLDY1NTIzLDY1NTI0LDY1NTI1LDY1NTI2LDY1NTI3LDY1NTI4LDY1NTMyLDc4ODQ0LDExOTE1NSwxMTkxNTYsMTE5MTU3LDExOTE1OCwxMTkxNTksMTE5MTYwLDExOTE2MSwxMTkxNjIsOTE3NTA0LDkxNzUwNSw5MTc1MDYsOTE3NTA3LDkxNzUwOCw5MTc1MDksOTE3NTEwLDkxNzUxMSw5MTc1MTIsOTE3NTEzLDkxNzUxNCw5MTc1MTUsOTE3NTE2LDkxNzUxNyw5MTc1MTgsOTE3NTE5LDkxNzUyMCw5MTc1MjEsOTE3NTIyLDkxNzUyMyw5MTc1MjQsOTE3NTI1LDkxNzUyNiw5MTc1MjcsOTE3NTI4LDkxNzUyOSw5MTc1MzAsOTE3NTMxLDkxNzUzMiw5MTc1MzMsOTE3NTM0LDkxNzUzNSw5MTc1MzYsOTE3NTM3LDkxNzUzOCw5MTc1MzksOTE3NTQwLDkxNzU0MSw5MTc1NDIsOTE3NTQzLDkxNzU0NCw5MTc1NDUsOTE3NTQ2LDkxNzU0Nyw5MTc1NDgsOTE3NTQ5LDkxNzU1MCw5MTc1NTEsOTE3NTUyLDkxNzU1Myw5MTc1NTQsOTE3NTU1LDkxNzU1Niw5MTc1NTcsOTE3NTU4LDkxNzU1OSw5MTc1NjAsOTE3NTYxLDkxNzU2Miw5MTc1NjMsOTE3NTY0LDkxNzU2NSw5MTc1NjYsOTE3NTY3LDkxNzU2OCw5MTc1NjksOTE3NTcwLDkxNzU3MSw5MTc1NzIsOTE3NTczLDkxNzU3NCw5MTc1NzUsOTE3NTc2LDkxNzU3Nyw5MTc1NzgsOTE3NTc5LDkxNzU4MCw5MTc1ODEsOTE3NTgyLDkxNzU4Myw5MTc1ODQsOTE3NTg1LDkxNzU4Niw5MTc1ODcsOTE3NTg4LDkxNzU4OSw5MTc1OTAsOTE3NTkxLDkxNzU5Miw5MTc1OTMsOTE3NTk0LDkxNzU5NSw5MTc1OTYsOTE3NTk3LDkxNzU5OCw5MTc1OTksOTE3NjAwLDkxNzYwMSw5MTc2MDIsOTE3NjAzLDkxNzYwNCw5MTc2MDUsOTE3NjA2LDkxNzYwNyw5MTc2MDgsOTE3NjA5LDkxNzYxMCw5MTc2MTEsOTE3NjEyLDkxNzYxMyw5MTc2MTQsOTE3NjE1LDkxNzYxNiw5MTc2MTcsOTE3NjE4LDkxNzYxOSw5MTc2MjAsOTE3NjIxLDkxNzYyMiw5MTc2MjMsOTE3NjI0LDkxNzYyNSw5MTc2MjYsOTE3NjI3LDkxNzYyOCw5MTc2MjksOTE3NjMwLDkxNzYzMSw5MTc3NjAsOTE3NzYxLDkxNzc2Miw5MTc3NjMsOTE3NzY0LDkxNzc2NSw5MTc3NjYsOTE3NzY3LDkxNzc2OCw5MTc3NjksOTE3NzcwLDkxNzc3MSw5MTc3NzIsOTE3NzczLDkxNzc3NCw5MTc3NzUsOTE3Nzc2LDkxNzc3Nyw5MTc3NzgsOTE3Nzc5LDkxNzc4MCw5MTc3ODEsOTE3NzgyLDkxNzc4Myw5MTc3ODQsOTE3Nzg1LDkxNzc4Niw5MTc3ODcsOTE3Nzg4LDkxNzc4OSw5MTc3OTAsOTE3NzkxLDkxNzc5Miw5MTc3OTMsOTE3Nzk0LDkxNzc5NSw5MTc3OTYsOTE3Nzk3LDkxNzc5OCw5MTc3OTksOTE3ODAwLDkxNzgwMSw5MTc4MDIsOTE3ODAzLDkxNzgwNCw5MTc4MDUsOTE3ODA2LDkxNzgwNyw5MTc4MDgsOTE3ODA5LDkxNzgxMCw5MTc4MTEsOTE3ODEyLDkxNzgxMyw5MTc4MTQsOTE3ODE1LDkxNzgxNiw5MTc4MTcsOTE3ODE4LDkxNzgxOSw5MTc4MjAsOTE3ODIxLDkxNzgyMiw5MTc4MjMsOTE3ODI0LDkxNzgyNSw5MTc4MjYsOTE3ODI3LDkxNzgyOCw5MTc4MjksOTE3ODMwLDkxNzgzMSw5MTc4MzIsOTE3ODMzLDkxNzgzNCw5MTc4MzUsOTE3ODM2LDkxNzgzNyw5MTc4MzgsOTE3ODM5LDkxNzg0MCw5MTc4NDEsOTE3ODQyLDkxNzg0Myw5MTc4NDQsOTE3ODQ1LDkxNzg0Niw5MTc4NDcsOTE3ODQ4LDkxNzg0OSw5MTc4NTAsOTE3ODUxLDkxNzg1Miw5MTc4NTMsOTE3ODU0LDkxNzg1NSw5MTc4NTYsOTE3ODU3LDkxNzg1OCw5MTc4NTksOTE3ODYwLDkxNzg2MSw5MTc4NjIsOTE3ODYzLDkxNzg2NCw5MTc4NjUsOTE3ODY2LDkxNzg2Nyw5MTc4NjgsOTE3ODY5LDkxNzg3MCw5MTc4NzEsOTE3ODcyLDkxNzg3Myw5MTc4NzQsOTE3ODc1LDkxNzg3Niw5MTc4NzcsOTE3ODc4LDkxNzg3OSw5MTc4ODAsOTE3ODgxLDkxNzg4Miw5MTc4ODMsOTE3ODg0LDkxNzg4NSw5MTc4ODYsOTE3ODg3LDkxNzg4OCw5MTc4ODksOTE3ODkwLDkxNzg5MSw5MTc4OTIsOTE3ODkzLDkxNzg5NCw5MTc4OTUsOTE3ODk2LDkxNzg5Nyw5MTc4OTgsOTE3ODk5LDkxNzkwMCw5MTc5MDEsOTE3OTAyLDkxNzkwMyw5MTc5MDQsOTE3OTA1LDkxNzkwNiw5MTc5MDcsOTE3OTA4LDkxNzkwOSw5MTc5MTAsOTE3OTExLDkxNzkxMiw5MTc5MTMsOTE3OTE0LDkxNzkxNSw5MTc5MTYsOTE3OTE3LDkxNzkxOCw5MTc5MTksOTE3OTIwLDkxNzkyMSw5MTc5MjIsOTE3OTIzLDkxNzkyNCw5MTc5MjUsOTE3OTI2LDkxNzkyNyw5MTc5MjgsOTE3OTI5LDkxNzkzMCw5MTc5MzEsOTE3OTMyLDkxNzkzMyw5MTc5MzQsOTE3OTM1LDkxNzkzNiw5MTc5MzcsOTE3OTM4LDkxNzkzOSw5MTc5NDAsOTE3OTQxLDkxNzk0Miw5MTc5NDMsOTE3OTQ0LDkxNzk0NSw5MTc5NDYsOTE3OTQ3LDkxNzk0OCw5MTc5NDksOTE3OTUwLDkxNzk1MSw5MTc5NTIsOTE3OTUzLDkxNzk1NCw5MTc5NTUsOTE3OTU2LDkxNzk1Nyw5MTc5NTgsOTE3OTU5LDkxNzk2MCw5MTc5NjEsOTE3OTYyLDkxNzk2Myw5MTc5NjQsOTE3OTY1LDkxNzk2Niw5MTc5NjcsOTE3OTY4LDkxNzk2OSw5MTc5NzAsOTE3OTcxLDkxNzk3Miw5MTc5NzMsOTE3OTc0LDkxNzk3NSw5MTc5NzYsOTE3OTc3LDkxNzk3OCw5MTc5NzksOTE3OTgwLDkxNzk4MSw5MTc5ODIsOTE3OTgzLDkxNzk4NCw5MTc5ODUsOTE3OTg2LDkxNzk4Nyw5MTc5ODgsOTE3OTg5LDkxNzk5MCw5MTc5OTEsOTE3OTkyLDkxNzk5Myw5MTc5OTQsOTE3OTk1LDkxNzk5Niw5MTc5OTcsOTE3OTk4LDkxNzk5OV0iKX1zdGF0aWMgZ2V0RGF0YSgpe3JldHVybiB0aGlzLl9kYXRhfHwodGhpcy5fZGF0YT1uZXcgU2V0KGVlLmdldFJhd0RhdGEoKSkpLHRoaXMuX2RhdGF9c3RhdGljIGlzSW52aXNpYmxlQ2hhcmFjdGVyKGUpe3JldHVybiBlZS5nZXREYXRhKCkuaGFzKGUpfXN0YXRpYyBnZXQgY29kZVBvaW50cygpe3JldHVybiBlZS5nZXREYXRhKCl9fWVlLl9kYXRhPXZvaWQgMDtjbGFzcyB0ZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLm1ldGhvZD1uLHRoaXMuYXJncz1yLHRoaXMudHlwZT0wfX1jbGFzcyBuZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5zZXE9dCx0aGlzLnJlcz1uLHRoaXMuZXJyPXIsdGhpcy50eXBlPTF9fWNsYXNzIHJle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnROYW1lPW4sdGhpcy5hcmc9cix0aGlzLnR5cGU9Mn19Y2xhc3MgaWV7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnQ9bix0aGlzLnR5cGU9M319Y2xhc3Mgb2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLnR5cGU9NH19Y2xhc3MgYWV7Y29uc3RydWN0b3IoZSl7dGhpcy5fd29ya2VySWQ9LTEsdGhpcy5faGFuZGxlcj1lLHRoaXMuX2xhc3RTZW50UmVxPTAsdGhpcy5fcGVuZGluZ1JlcGxpZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9wZW5kaW5nRW1pdHRlcnM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nRXZlbnRzPW5ldyBNYXB9c2V0V29ya2VySWQoZSl7dGhpcy5fd29ya2VySWQ9ZX1zZW5kTWVzc2FnZShlLHQpe2NvbnN0IG49U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpO3JldHVybiBuZXcgUHJvbWlzZSgoKHIsaSk9Pnt0aGlzLl9wZW5kaW5nUmVwbGllc1tuXT17cmVzb2x2ZTpyLHJlamVjdDppfSx0aGlzLl9zZW5kKG5ldyB0ZSh0aGlzLl93b3JrZXJJZCxuLGUsdCkpfSkpfWxpc3RlbihlLHQpe2xldCBuPW51bGw7Y29uc3Qgcj1uZXcgQih7b25GaXJzdExpc3RlbmVyQWRkOigpPT57bj1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzLnNldChuLHIpLHRoaXMuX3NlbmQobmV3IHJlKHRoaXMuX3dvcmtlcklkLG4sZSx0KSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT57dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmRlbGV0ZShuKSx0aGlzLl9zZW5kKG5ldyBvZSh0aGlzLl93b3JrZXJJZCxuKSksbj1udWxsfX0pO3JldHVybiByLmV2ZW50fWhhbmRsZU1lc3NhZ2UoZSl7ZSYmZS52c1dvcmtlciYmKC0xIT09dGhpcy5fd29ya2VySWQmJmUudnNXb3JrZXIhPT10aGlzLl93b3JrZXJJZHx8dGhpcy5faGFuZGxlTWVzc2FnZShlKSl9X2hhbmRsZU1lc3NhZ2UoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLl9oYW5kbGVSZXBseU1lc3NhZ2UoZSk7Y2FzZSAwOnJldHVybiB0aGlzLl9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKTtjYXNlIDI6cmV0dXJuIHRoaXMuX2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKTtjYXNlIDM6cmV0dXJuIHRoaXMuX2hhbmRsZUV2ZW50TWVzc2FnZShlKTtjYXNlIDQ6cmV0dXJuIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpfX1faGFuZGxlUmVwbHlNZXNzYWdlKGUpe2lmKCF0aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV0pcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJHb3QgcmVwbHkgdG8gdW5rbm93biBzZXEiKTtjb25zdCB0PXRoaXMuX3BlbmRpbmdSZXBsaWVzW2Uuc2VxXTtpZihkZWxldGUgdGhpcy5fcGVuZGluZ1JlcGxpZXNbZS5zZXFdLGUuZXJyKXtsZXQgbj1lLmVycjtyZXR1cm4gZS5lcnIuJGlzRXJyb3ImJihuPW5ldyBFcnJvcixuLm5hbWU9ZS5lcnIubmFtZSxuLm1lc3NhZ2U9ZS5lcnIubWVzc2FnZSxuLnN0YWNrPWUuZXJyLnN0YWNrKSx2b2lkIHQucmVqZWN0KG4pfXQucmVzb2x2ZShlLnJlcyl9X2hhbmRsZVJlcXVlc3RNZXNzYWdlKGUpe2NvbnN0IHQ9ZS5yZXE7dGhpcy5faGFuZGxlci5oYW5kbGVNZXNzYWdlKGUubWV0aG9kLGUuYXJncykudGhlbigoZT0+e3RoaXMuX3NlbmQobmV3IG5lKHRoaXMuX3dvcmtlcklkLHQsZSx2b2lkIDApKX0pLChlPT57ZS5kZXRhaWwgaW5zdGFuY2VvZiBFcnJvciYmKGUuZGV0YWlsPW4oZS5kZXRhaWwpKSx0aGlzLl9zZW5kKG5ldyBuZSh0aGlzLl93b3JrZXJJZCx0LHZvaWQgMCxuKGUpKSl9KSl9X2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKXtjb25zdCB0PWUucmVxLG49dGhpcy5faGFuZGxlci5oYW5kbGVFdmVudChlLmV2ZW50TmFtZSxlLmFyZykoKGU9Pnt0aGlzLl9zZW5kKG5ldyBpZSh0aGlzLl93b3JrZXJJZCx0LGUpKX0pKTt0aGlzLl9wZW5kaW5nRXZlbnRzLnNldCh0LG4pfV9oYW5kbGVFdmVudE1lc3NhZ2UoZSl7dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmhhcyhlLnJlcSk/dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmdldChlLnJlcSkuZmlyZShlLmV2ZW50KTpjb25zb2xlLndhcm4oIkdvdCBldmVudCBmb3IgdW5rbm93biByZXEiKX1faGFuZGxlVW5zdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSl7dGhpcy5fcGVuZGluZ0V2ZW50cy5oYXMoZS5yZXEpPyh0aGlzLl9wZW5kaW5nRXZlbnRzLmdldChlLnJlcSkuZGlzcG9zZSgpLHRoaXMuX3BlbmRpbmdFdmVudHMuZGVsZXRlKGUucmVxKSk6Y29uc29sZS53YXJuKCJHb3QgdW5zdWJzY3JpYmUgZm9yIHVua25vd24gcmVxIil9X3NlbmQoZSl7Y29uc3QgdD1bXTtpZigwPT09ZS50eXBlKWZvcihsZXQgbj0wO248ZS5hcmdzLmxlbmd0aDtuKyspZS5hcmdzW25daW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdC5wdXNoKGUuYXJnc1tuXSk7ZWxzZSAxPT09ZS50eXBlJiZlLnJlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZ0LnB1c2goZS5yZXMpO3RoaXMuX2hhbmRsZXIuc2VuZE1lc3NhZ2UoZSx0KX19ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIm8iPT09ZVswXSYmIm4iPT09ZVsxXSYmSihlLmNoYXJDb2RlQXQoMikpfWZ1bmN0aW9uIGNlKGUpe3JldHVybi9eb25EeW5hbWljLy50ZXN0KGUpJiZKKGUuY2hhckNvZGVBdCg5KSl9Y2xhc3MgbGV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk9dCx0aGlzLl9yZXF1ZXN0SGFuZGxlcj1udWxsLHRoaXMuX3Byb3RvY29sPW5ldyBhZSh7c2VuZE1lc3NhZ2U6KHQsbik9PntlKHQsbil9LGhhbmRsZU1lc3NhZ2U6KGUsdCk9PnRoaXMuX2hhbmRsZU1lc3NhZ2UoZSx0KSxoYW5kbGVFdmVudDooZSx0KT0+dGhpcy5faGFuZGxlRXZlbnQoZSx0KX0pfW9ubWVzc2FnZShlKXt0aGlzLl9wcm90b2NvbC5oYW5kbGVNZXNzYWdlKGUpfV9oYW5kbGVNZXNzYWdlKGUsdCl7aWYoIiRpbml0aWFsaXplIj09PWUpcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlcltlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0uYXBwbHkodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19X2hhbmRsZUV2ZW50KGUsdCl7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciIpO2lmKGNlKGUpKXtjb25zdCBuPXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmNhbGwodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGR5bmFtaWMgZXZlbnQgJHtlfSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIG59aWYoc2UoZSkpe2NvbnN0IHQ9dGhpcy5fcmVxdWVzdEhhbmRsZXJbZV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiB0fXRocm93IG5ldyBFcnJvcihgTWFsZm9ybWVkIGV2ZW50IG5hbWUgJHtlfWApfWluaXRpYWxpemUoZSx0LG4scil7dGhpcy5fcHJvdG9jb2wuc2V0V29ya2VySWQoZSk7Y29uc3QgaT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1lPT5mdW5jdGlvbigpe2NvbnN0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0KGUsbil9LGk9ZT0+ZnVuY3Rpb24odCl7cmV0dXJuIG4oZSx0KX0sbz17fTtmb3IoY29uc3QgdCBvZiBlKWNlKHQpP29bdF09aSh0KTpzZSh0KT9vW3RdPW4odCx2b2lkIDApOm9bdF09cih0KTtyZXR1cm4gb30ociwoKGUsdCk9PnRoaXMuX3Byb3RvY29sLnNlbmRNZXNzYWdlKGUsdCkpLCgoZSx0KT0+dGhpcy5fcHJvdG9jb2wubGlzdGVuKGUsdCkpKTtyZXR1cm4gdGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5Pyh0aGlzLl9yZXF1ZXN0SGFuZGxlcj10aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3RvcnkoaSksUHJvbWlzZS5yZXNvbHZlKEgodGhpcy5fcmVxdWVzdEhhbmRsZXIpKSk6KHQmJih2b2lkIDAhPT10LmJhc2VVcmwmJmRlbGV0ZSB0LmJhc2VVcmwsdm9pZCAwIT09dC5wYXRocyYmdm9pZCAwIT09dC5wYXRocy52cyYmZGVsZXRlIHQucGF0aHMudnMsdm9pZCAwIT09dHlwZW9mIHQudHJ1c3RlZFR5cGVzUG9saWN5JiZkZWxldGUgdC50cnVzdGVkVHlwZXNQb2xpY3ksdC5jYXRjaEVycm9yPSEwLE4ucmVxdWlyZS5jb25maWcodCkpLG5ldyBQcm9taXNlKCgoZSx0KT0+eygwLE4ucmVxdWlyZSkoW25dLChuPT57dGhpcy5fcmVxdWVzdEhhbmRsZXI9bi5jcmVhdGUoaSksdGhpcy5fcmVxdWVzdEhhbmRsZXI/ZShIKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSk6dChuZXcgRXJyb3IoIk5vIFJlcXVlc3RIYW5kbGVyISIpKX0pLHQpfSkpKX19Y2xhc3MgdWV7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5vcmlnaW5hbFN0YXJ0PWUsdGhpcy5vcmlnaW5hbExlbmd0aD10LHRoaXMubW9kaWZpZWRTdGFydD1uLHRoaXMubW9kaWZpZWRMZW5ndGg9cn1nZXRPcmlnaW5hbEVuZCgpe3JldHVybiB0aGlzLm9yaWdpbmFsU3RhcnQrdGhpcy5vcmlnaW5hbExlbmd0aH1nZXRNb2RpZmllZEVuZCgpe3JldHVybiB0aGlzLm1vZGlmaWVkU3RhcnQrdGhpcy5tb2RpZmllZExlbmd0aH19ZnVuY3Rpb24gaGUoZSx0KXtyZXR1cm4odDw8NSktdCtlfDB9ZnVuY3Rpb24gZmUoZSx0KXt0PWhlKDE0OTQxNyx0KTtmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspdD1oZShlLmNoYXJDb2RlQXQobiksdCk7cmV0dXJuIHR9Y2xhc3MgZGV7Y29uc3RydWN0b3IoZSl7dGhpcy5zb3VyY2U9ZX1nZXRFbGVtZW50cygpe2NvbnN0IGU9dGhpcy5zb3VyY2UsdD1uZXcgSW50MzJBcnJheShlLmxlbmd0aCk7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRbbl09ZS5jaGFyQ29kZUF0KG4pO3JldHVybiB0fX1mdW5jdGlvbiBtZShlLHQsbil7cmV0dXJuIG5ldyB2ZShuZXcgZGUoZSksbmV3IGRlKHQpKS5Db21wdXRlRGlmZihuKS5jaGFuZ2VzfWNsYXNzIGdle3N0YXRpYyBBc3NlcnQoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodCl9fWNsYXNzIHBle3N0YXRpYyBDb3B5KGUsdCxuLHIsaSl7Zm9yKGxldCBvPTA7bzxpO28rKyluW3Irb109ZVt0K29dfXN0YXRpYyBDb3B5MihlLHQsbixyLGkpe2ZvcihsZXQgbz0wO288aTtvKyspbltyK29dPWVbdCtvXX19Y2xhc3MgYmV7Y29uc3RydWN0b3IoKXt0aGlzLm1fY2hhbmdlcz1bXSx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wfU1hcmtOZXh0Q2hhbmdlKCl7KHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLm1fY2hhbmdlcy5wdXNoKG5ldyB1ZSh0aGlzLm1fb3JpZ2luYWxTdGFydCx0aGlzLm1fb3JpZ2luYWxDb3VudCx0aGlzLm1fbW9kaWZpZWRTdGFydCx0aGlzLm1fbW9kaWZpZWRDb3VudCkpLHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MCx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjR9QWRkT3JpZ2luYWxFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX29yaWdpbmFsQ291bnQrK31BZGRNb2RpZmllZEVsZW1lbnQoZSx0KXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCxlKSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRDb3VudCsrfWdldENoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlc31nZXRSZXZlcnNlQ2hhbmdlcygpe3JldHVybih0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzLnJldmVyc2UoKSx0aGlzLm1fY2hhbmdlc319Y2xhc3MgdmV7Y29uc3RydWN0b3IoZSx0LG49bnVsbCl7dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGU9bix0aGlzLl9vcmlnaW5hbFNlcXVlbmNlPWUsdGhpcy5fbW9kaWZpZWRTZXF1ZW5jZT10O2NvbnN0W3IsaSxvXT12ZS5fZ2V0RWxlbWVudHMoZSksW2EscyxjXT12ZS5fZ2V0RWxlbWVudHModCk7dGhpcy5faGFzU3RyaW5ncz1vJiZjLHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHM9cix0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoPWksdGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50cz1hLHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2g9cyx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdfXN0YXRpYyBfaXNTdHJpbmdBcnJheShlKXtyZXR1cm4gZS5sZW5ndGg+MCYmInN0cmluZyI9PXR5cGVvZiBlWzBdfXN0YXRpYyBfZ2V0RWxlbWVudHMoZSl7Y29uc3QgdD1lLmdldEVsZW1lbnRzKCk7aWYodmUuX2lzU3RyaW5nQXJyYXkodCkpe2NvbnN0IGU9bmV3IEludDMyQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllW25dPWZlKHRbbl0sMCk7cmV0dXJuW3QsZSwhMF19cmV0dXJuIHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5P1tbXSx0LCExXTpbW10sbmV3IEludDMyQXJyYXkodCksITFdfUVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfUVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoZSx0KXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKGUsdCkpcmV0dXJuITE7cmV0dXJuIHZlLl9nZXRTdHJpY3RFbGVtZW50KHRoaXMuX29yaWdpbmFsU2VxdWVuY2UsZSk9PT12ZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9tb2RpZmllZFNlcXVlbmNlLHQpfXN0YXRpYyBfZ2V0U3RyaWN0RWxlbWVudChlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldFN0cmljdEVsZW1lbnQ/ZS5nZXRTdHJpY3RFbGVtZW50KHQpOm51bGx9T3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3RdKX1Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfUNvbXB1dGVEaWZmKGUpe3JldHVybiB0aGlzLl9Db21wdXRlRGlmZigwLHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTEsMCx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLGUpfV9Db21wdXRlRGlmZihlLHQsbixyLGkpe2NvbnN0IG89WyExXTtsZXQgYT10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKGUsdCxuLHIsbyk7cmV0dXJuIGkmJihhPXRoaXMuUHJldHRpZnlDaGFuZ2VzKGEpKSx7cXVpdEVhcmx5Om9bMF0sY2hhbmdlczphfX1Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLHQsbixyLGkpe2ZvcihpWzBdPSExO2U8PXQmJm48PXImJnRoaXMuRWxlbWVudHNBcmVFcXVhbChlLG4pOyllKyssbisrO2Zvcig7dD49ZSYmcj49biYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQscik7KXQtLSxyLS07aWYoZT50fHxuPnIpe2xldCBpO3JldHVybiBuPD1yPyhnZS5Bc3NlcnQoZT09PXQrMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksaT1bbmV3IHVlKGUsMCxuLHItbisxKV0pOmU8PXQ/KGdlLkFzc2VydChuPT09cisxLCJtb2RpZmllZFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gbW9kaWZpZWRFbmQiKSxpPVtuZXcgdWUoZSx0LWUrMSxuLDApXSk6KGdlLkFzc2VydChlPT09dCsxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxnZS5Bc3NlcnQobj09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksaT1bXSksaX1jb25zdCBvPVswXSxhPVswXSxzPXRoaXMuQ29tcHV0ZVJlY3Vyc2lvblBvaW50KGUsdCxuLHIsbyxhLGkpLGM9b1swXSxsPWFbMF07aWYobnVsbCE9PXMpcmV0dXJuIHM7aWYoIWlbMF0pe2NvbnN0IG89dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLGMsbixsLGkpO2xldCBhPVtdO3JldHVybiBhPWlbMF0/W25ldyB1ZShjKzEsdC0oYysxKSsxLGwrMSxyLShsKzEpKzEpXTp0aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKGMrMSx0LGwrMSxyLGkpLHRoaXMuQ29uY2F0ZW5hdGVDaGFuZ2VzKG8sYSl9cmV0dXJuW25ldyB1ZShlLHQtZSsxLG4sci1uKzEpXX1XQUxLVFJBQ0UoZSx0LG4scixpLG8sYSxzLGMsbCx1LGgsZixkLG0sZyxwLGIpe2xldCB2PW51bGwseT1udWxsLEM9bmV3IGJlLHc9dCxfPW4sUz1mWzBdLWdbMF0tcixBPS0xMDczNzQxODI0LEU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5Lmxlbmd0aC0xO2Rve2NvbnN0IHQ9UytlO3Q9PT13fHx0PF8mJmNbdC0xXTxjW3QrMV0/KGQ9KHU9Y1t0KzFdKS1TLXIsdTxBJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT11LEMuQWRkTW9kaWZpZWRFbGVtZW50KHUrMSxkKSxTPXQrMS1lKTooZD0odT1jW3QtMV0rMSktUy1yLHU8QSYmQy5NYXJrTmV4dENoYW5nZSgpLEE9dS0xLEMuQWRkT3JpZ2luYWxFbGVtZW50KHUsZCsxKSxTPXQtMS1lKSxFPj0wJiYoZT0oYz10aGlzLm1fZm9yd2FyZEhpc3RvcnlbRV0pWzBdLHc9MSxfPWMubGVuZ3RoLTEpfXdoaWxlKC0tRT49LTEpO2lmKHY9Qy5nZXRSZXZlcnNlQ2hhbmdlcygpLGJbMF0pe2xldCBlPWZbMF0rMSx0PWdbMF0rMTtpZihudWxsIT09diYmdi5sZW5ndGg+MCl7Y29uc3Qgbj12W3YubGVuZ3RoLTFdO2U9TWF0aC5tYXgoZSxuLmdldE9yaWdpbmFsRW5kKCkpLHQ9TWF0aC5tYXgodCxuLmdldE1vZGlmaWVkRW5kKCkpfXk9W25ldyB1ZShlLGgtZSsxLHQsbS10KzEpXX1lbHNle0M9bmV3IGJlLHc9byxfPWEsUz1mWzBdLWdbMF0tcyxBPTEwNzM3NDE4MjQsRT1wP3RoaXMubV9yZXZlcnNlSGlzdG9yeS5sZW5ndGgtMTp0aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTI7ZG97Y29uc3QgZT1TK2k7ZT09PXd8fGU8XyYmbFtlLTFdPj1sW2UrMV0/KGQ9KHU9bFtlKzFdLTEpLVMtcyx1PkEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUrMSxDLkFkZE9yaWdpbmFsRWxlbWVudCh1KzEsZCsxKSxTPWUrMS1pKTooZD0odT1sW2UtMV0pLVMtcyx1PkEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUsQy5BZGRNb2RpZmllZEVsZW1lbnQodSsxLGQrMSksUz1lLTEtaSksRT49MCYmKGk9KGw9dGhpcy5tX3JldmVyc2VIaXN0b3J5W0VdKVswXSx3PTEsXz1sLmxlbmd0aC0xKX13aGlsZSgtLUU+PS0xKTt5PUMuZ2V0Q2hhbmdlcygpfXJldHVybiB0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyh2LHkpfUNvbXB1dGVSZWN1cnNpb25Qb2ludChlLHQsbixyLGksbyxhKXtsZXQgcz0wLGM9MCxsPTAsdT0wLGg9MCxmPTA7ZS0tLG4tLSxpWzBdPTAsb1swXT0wLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W107Y29uc3QgZD10LWUrKHItbiksbT1kKzEsZz1uZXcgSW50MzJBcnJheShtKSxwPW5ldyBJbnQzMkFycmF5KG0pLGI9ci1uLHY9dC1lLHk9ZS1uLEM9dC1yLHc9KHYtYiklMj09MDtnW2JdPWUscFt2XT10LGFbMF09ITE7Zm9yKGxldCBfPTE7Xzw9ZC8yKzE7XysrKXtsZXQgZD0wLFM9MDtsPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoYi1fLF8sYixtKSx1PXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoYitfLF8sYixtKTtmb3IobGV0IGU9bDtlPD11O2UrPTIpe3M9ZT09PWx8fGU8dSYmZ1tlLTFdPGdbZSsxXT9nW2UrMV06Z1tlLTFdKzEsYz1zLShlLWIpLXk7Y29uc3Qgbj1zO2Zvcig7czx0JiZjPHImJnRoaXMuRWxlbWVudHNBcmVFcXVhbChzKzEsYysxKTspcysrLGMrKztpZihnW2VdPXMscytjPmQrUyYmKGQ9cyxTPWMpLCF3JiZNYXRoLmFicyhlLXYpPD1fLTEmJnM+PXBbZV0pcmV0dXJuIGlbMF09cyxvWzBdPWMsbjw9cFtlXSYmXzw9MTQ0OD90aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSk6bnVsbH1jb25zdCBBPShkLWUrKFMtbiktXykvMjtpZihudWxsIT09dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUmJiF0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZShkLEEpKXJldHVybiBhWzBdPSEwLGlbMF09ZCxvWzBdPVMsQT4wJiZfPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKGIsbCx1LHksdixoLGYsQyxnLHAscyx0LGksYyxyLG8sdyxhKTooZSsrLG4rKyxbbmV3IHVlKGUsdC1lKzEsbixyLW4rMSldKTtoPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQodi1fLF8sdixtKSxmPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoditfLF8sdixtKTtmb3IobGV0IGQ9aDtkPD1mO2QrPTIpe3M9ZD09PWh8fGQ8ZiYmcFtkLTFdPj1wW2QrMV0/cFtkKzFdLTE6cFtkLTFdLGM9cy0oZC12KS1DO2NvbnN0IG09cztmb3IoO3M+ZSYmYz5uJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwocyxjKTspcy0tLGMtLTtpZihwW2RdPXMsdyYmTWF0aC5hYnMoZC1iKTw9XyYmczw9Z1tkXSlyZXR1cm4gaVswXT1zLG9bMF09YyxtPj1nW2RdJiZfPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKGIsbCx1LHksdixoLGYsQyxnLHAscyx0LGksYyxyLG8sdyxhKTpudWxsfWlmKF88PTE0NDcpe2xldCBlPW5ldyBJbnQzMkFycmF5KHUtbCsyKTtlWzBdPWItbCsxLHBlLkNvcHkyKGcsbCxlLDEsdS1sKzEpLHRoaXMubV9mb3J3YXJkSGlzdG9yeS5wdXNoKGUpLGU9bmV3IEludDMyQXJyYXkoZi1oKzIpLGVbMF09di1oKzEscGUuQ29weTIocCxoLGUsMSxmLWgrMSksdGhpcy5tX3JldmVyc2VIaXN0b3J5LnB1c2goZSl9fXJldHVybiB0aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSl9UHJldHRpZnlDaGFuZ2VzKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBuPWVbdF0scj10PGUubGVuZ3RoLTE/ZVt0KzFdLm9yaWdpbmFsU3RhcnQ6dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgsaT10PGUubGVuZ3RoLTE/ZVt0KzFdLm1vZGlmaWVkU3RhcnQ6dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgsbz1uLm9yaWdpbmFsTGVuZ3RoPjAsYT1uLm1vZGlmaWVkTGVuZ3RoPjA7Zm9yKDtuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aDxyJiZuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aDxpJiYoIW98fHRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKG4ub3JpZ2luYWxTdGFydCxuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCkpJiYoIWF8fHRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKG4ubW9kaWZpZWRTdGFydCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCkpOyl7Y29uc3QgZT10aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwobi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRTdGFydCk7aWYodGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKSYmIWUpYnJlYWs7bi5vcmlnaW5hbFN0YXJ0Kyssbi5tb2RpZmllZFN0YXJ0Kyt9Y29uc3Qgcz1bbnVsbF07dDxlLmxlbmd0aC0xJiZ0aGlzLkNoYW5nZXNPdmVybGFwKGVbdF0sZVt0KzFdLHMpJiYoZVt0XT1zWzBdLGUuc3BsaWNlKHQrMSwxKSx0LS0pfWZvcihsZXQgdD1lLmxlbmd0aC0xO3Q+PTA7dC0tKXtjb25zdCBuPWVbdF07bGV0IHI9MCxpPTA7aWYodD4wKXtjb25zdCBuPWVbdC0xXTtyPW4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLGk9bi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGh9Y29uc3Qgbz1uLm9yaWdpbmFsTGVuZ3RoPjAsYT1uLm1vZGlmaWVkTGVuZ3RoPjA7bGV0IHM9MCxjPXRoaXMuX2JvdW5kYXJ5U2NvcmUobi5vcmlnaW5hbFN0YXJ0LG4ub3JpZ2luYWxMZW5ndGgsbi5tb2RpZmllZFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGgpO2ZvcihsZXQgZT0xOztlKyspe2NvbnN0IHQ9bi5vcmlnaW5hbFN0YXJ0LWUsbD1uLm1vZGlmaWVkU3RhcnQtZTtpZih0PHJ8fGw8aSlicmVhaztpZihvJiYhdGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwodCx0K24ub3JpZ2luYWxMZW5ndGgpKWJyZWFrO2lmKGEmJiF0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChsLGwrbi5tb2RpZmllZExlbmd0aCkpYnJlYWs7Y29uc3QgdT0odD09PXImJmw9PT1pPzU6MCkrdGhpcy5fYm91bmRhcnlTY29yZSh0LG4ub3JpZ2luYWxMZW5ndGgsbCxuLm1vZGlmaWVkTGVuZ3RoKTt1PmMmJihjPXUscz1lKX1uLm9yaWdpbmFsU3RhcnQtPXMsbi5tb2RpZmllZFN0YXJ0LT1zO2NvbnN0IGw9W251bGxdO3Q+MCYmdGhpcy5DaGFuZ2VzT3ZlcmxhcChlW3QtMV0sZVt0XSxsKSYmKGVbdC0xXT1sWzBdLGUuc3BsaWNlKHQsMSksdCsrKX1pZih0aGlzLl9oYXNTdHJpbmdzKWZvcihsZXQgdD0xLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1lW3QtMV0scj1lW3RdLGk9ci5vcmlnaW5hbFN0YXJ0LW4ub3JpZ2luYWxTdGFydC1uLm9yaWdpbmFsTGVuZ3RoLG89bi5vcmlnaW5hbFN0YXJ0LGE9ci5vcmlnaW5hbFN0YXJ0K3Iub3JpZ2luYWxMZW5ndGgscz1hLW8sYz1uLm1vZGlmaWVkU3RhcnQsbD1yLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aCx1PWwtYztpZihpPDUmJnM8MjAmJnU8MjApe2NvbnN0IGU9dGhpcy5fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShvLHMsYyx1LGkpO2lmKGUpe2NvbnN0W3Qsb109ZTt0PT09bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgmJm89PT1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aHx8KG4ub3JpZ2luYWxMZW5ndGg9dC1uLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZExlbmd0aD1vLW4ubW9kaWZpZWRTdGFydCxyLm9yaWdpbmFsU3RhcnQ9dCtpLHIubW9kaWZpZWRTdGFydD1vK2ksci5vcmlnaW5hbExlbmd0aD1hLXIub3JpZ2luYWxTdGFydCxyLm1vZGlmaWVkTGVuZ3RoPWwtci5tb2RpZmllZFN0YXJ0KX19fXJldHVybiBlfV9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKGUsdCxuLHIsaSl7aWYodDxpfHxyPGkpcmV0dXJuIG51bGw7Y29uc3Qgbz1lK3QtaSsxLGE9bityLWkrMTtsZXQgcz0wLGM9MCxsPTA7Zm9yKGxldCB0PWU7dDxvO3QrKylmb3IobGV0IGU9bjtlPGE7ZSsrKXtjb25zdCBuPXRoaXMuX2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKHQsZSxpKTtuPjAmJm4+cyYmKHM9bixjPXQsbD1lKX1yZXR1cm4gcz4wP1tjLGxdOm51bGx9X2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKGUsdCxuKXtsZXQgcj0wO2ZvcihsZXQgaT0wO2k8bjtpKyspe2lmKCF0aGlzLkVsZW1lbnRzQXJlRXF1YWwoZStpLHQraSkpcmV0dXJuIDA7cis9dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlK2ldLmxlbmd0aH1yZXR1cm4gcn1fT3JpZ2luYWxJc0JvdW5kYXJ5KGUpe3JldHVybiBlPD0wfHxlPj10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xfHx0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXSl9X09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeShlLHQpe2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShlKXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGUtMSkpcmV0dXJuITA7aWYodD4wKXtjb25zdCBuPWUrdDtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkobi0xKXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KG4pKXJldHVybiEwfXJldHVybiExfV9Nb2RpZmllZElzQm91bmRhcnkoZSl7cmV0dXJuIGU8PTB8fGU+PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTF8fHRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW2VdKX1fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KGUsdCl7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGUpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoZS0xKSlyZXR1cm4hMDtpZih0PjApe2NvbnN0IG49ZSt0O2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShuLTEpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkobikpcmV0dXJuITB9cmV0dXJuITF9X2JvdW5kYXJ5U2NvcmUoZSx0LG4scil7cmV0dXJuKHRoaXMuX09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeShlLHQpPzE6MCkrKHRoaXMuX01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeShuLHIpPzE6MCl9Q29uY2F0ZW5hdGVDaGFuZ2VzKGUsdCl7Y29uc3Qgbj1bXTtpZigwPT09ZS5sZW5ndGh8fDA9PT10Lmxlbmd0aClyZXR1cm4gdC5sZW5ndGg+MD90OmU7aWYodGhpcy5DaGFuZ2VzT3ZlcmxhcChlW2UubGVuZ3RoLTFdLHRbMF0sbikpe2NvbnN0IHI9bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoLTEpO3JldHVybiBwZS5Db3B5KGUsMCxyLDAsZS5sZW5ndGgtMSkscltlLmxlbmd0aC0xXT1uWzBdLHBlLkNvcHkodCwxLHIsZS5sZW5ndGgsdC5sZW5ndGgtMSkscn17Y29uc3Qgbj1uZXcgQXJyYXkoZS5sZW5ndGgrdC5sZW5ndGgpO3JldHVybiBwZS5Db3B5KGUsMCxuLDAsZS5sZW5ndGgpLHBlLkNvcHkodCwwLG4sZS5sZW5ndGgsdC5sZW5ndGgpLG59fUNoYW5nZXNPdmVybGFwKGUsdCxuKXtpZihnZS5Bc3NlcnQoZS5vcmlnaW5hbFN0YXJ0PD10Lm9yaWdpbmFsU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksZ2UuQXNzZXJ0KGUubW9kaWZpZWRTdGFydDw9dC5tb2RpZmllZFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoPj10Lm9yaWdpbmFsU3RhcnR8fGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoPj10Lm1vZGlmaWVkU3RhcnQpe2NvbnN0IHI9ZS5vcmlnaW5hbFN0YXJ0O2xldCBpPWUub3JpZ2luYWxMZW5ndGg7Y29uc3Qgbz1lLm1vZGlmaWVkU3RhcnQ7bGV0IGE9ZS5tb2RpZmllZExlbmd0aDtyZXR1cm4gZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGg+PXQub3JpZ2luYWxTdGFydCYmKGk9dC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtZS5vcmlnaW5hbFN0YXJ0KSxlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aD49dC5tb2RpZmllZFN0YXJ0JiYoYT10Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC1lLm1vZGlmaWVkU3RhcnQpLG5bMF09bmV3IHVlKHIsaSxvLGEpLCEwfXJldHVybiBuWzBdPW51bGwsITF9Q2xpcERpYWdvbmFsQm91bmQoZSx0LG4scil7aWYoZT49MCYmZTxyKXJldHVybiBlO2NvbnN0IGk9dCUyPT0wO2lmKGU8MCl7cmV0dXJuIGk9PT0obiUyPT0wKT8wOjF9cmV0dXJuIGk9PT0oKHItbi0xKSUyPT0wKT9yLTE6ci0yfX1sZXQgeWU7aWYodm9pZCAwIT09Ti52c2NvZGUmJnZvaWQgMCE9PU4udnNjb2RlLnByb2Nlc3Mpe2NvbnN0IGU9Ti52c2NvZGUucHJvY2Vzczt5ZT17Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIGUucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIGUuYXJjaH0sZ2V0IGVudigpe3JldHVybiBlLmVudn0sY3dkOigpPT5lLmN3ZCgpfX1lbHNlIHllPSJ1bmRlZmluZWQiIT10eXBlb2YgcHJvY2Vzcz97Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIHByb2Nlc3MucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIHByb2Nlc3MuYXJjaH0sZ2V0IGVudigpe3JldHVybiBwcm9jZXNzLmVudn0sY3dkOigpPT5wcm9jZXNzLmVudi5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfTp7Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIFQ/IndpbjMyIjpPPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZDooKT0+Ii8ifTtjb25zdCBDZT15ZS5jd2Qsd2U9eWUuZW52LF9lPXllLnBsYXRmb3JtLFNlPTQ2LEFlPTQ3LEVlPTkyLHhlPTU4O2NsYXNzIE5lIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LG4pe2xldCByOyJzdHJpbmciPT10eXBlb2YgdCYmMD09PXQuaW5kZXhPZigibm90ICIpPyhyPSJtdXN0IG5vdCBiZSIsdD10LnJlcGxhY2UoL15ub3QgLywiIikpOnI9Im11c3QgYmUiO2NvbnN0IGk9LTEhPT1lLmluZGV4T2YoIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7bGV0IG89YFRoZSAiJHtlfSIgJHtpfSAke3J9IG9mIHR5cGUgJHt0fWA7bys9Ii4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBuLHN1cGVyKG8pLHRoaXMuY29kZT0iRVJSX0lOVkFMSURfQVJHX1RZUEUifX1mdW5jdGlvbiBrZShlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgTmUodCwic3RyaW5nIixlKX1mdW5jdGlvbiBMZShlKXtyZXR1cm4gZT09PUFlfHxlPT09RWV9ZnVuY3Rpb24gVGUoZSl7cmV0dXJuIGU9PT1BZX1mdW5jdGlvbiBPZShlKXtyZXR1cm4gZT49NjUmJmU8PTkwfHxlPj05NyYmZTw9MTIyfWZ1bmN0aW9uIEllKGUsdCxuLHIpe2xldCBpPSIiLG89MCxhPS0xLHM9MCxjPTA7Zm9yKGxldCBsPTA7bDw9ZS5sZW5ndGg7KytsKXtpZihsPGUubGVuZ3RoKWM9ZS5jaGFyQ29kZUF0KGwpO2Vsc2V7aWYocihjKSlicmVhaztjPUFlfWlmKHIoYykpe2lmKGE9PT1sLTF8fDE9PT1zKTtlbHNlIGlmKDI9PT1zKXtpZihpLmxlbmd0aDwyfHwyIT09b3x8aS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09U2V8fGkuY2hhckNvZGVBdChpLmxlbmd0aC0yKSE9PVNlKXtpZihpLmxlbmd0aD4yKXtjb25zdCBlPWkubGFzdEluZGV4T2Yobik7LTE9PT1lPyhpPSIiLG89MCk6KGk9aS5zbGljZSgwLGUpLG89aS5sZW5ndGgtMS1pLmxhc3RJbmRleE9mKG4pKSxhPWwscz0wO2NvbnRpbnVlfWlmKDAhPT1pLmxlbmd0aCl7aT0iIixvPTAsYT1sLHM9MDtjb250aW51ZX19dCYmKGkrPWkubGVuZ3RoPjA/YCR7bn0uLmA6Ii4uIixvPTIpfWVsc2UgaS5sZW5ndGg+MD9pKz1gJHtufSR7ZS5zbGljZShhKzEsbCl9YDppPWUuc2xpY2UoYSsxLGwpLG89bC1hLTE7YT1sLHM9MH1lbHNlIGM9PT1TZSYmLTEhPT1zPysrczpzPS0xfXJldHVybiBpfWZ1bmN0aW9uIE1lKGUsdCl7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBuZXcgTmUoInBhdGhPYmplY3QiLCJPYmplY3QiLHQpO2NvbnN0IG49dC5kaXJ8fHQucm9vdCxyPXQuYmFzZXx8YCR7dC5uYW1lfHwiIn0ke3QuZXh0fHwiIn1gO3JldHVybiBuP249PT10LnJvb3Q/YCR7bn0ke3J9YDpgJHtufSR7ZX0ke3J9YDpyfWNvbnN0IFBlPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49IiIscj0hMTtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0tMTtpLS0pe2xldCBvO2lmKGk+PTApe2lmKG89ZVtpXSxrZShvLCJwYXRoIiksMD09PW8ubGVuZ3RoKWNvbnRpbnVlfWVsc2UgMD09PXQubGVuZ3RoP289Q2UoKToobz13ZVtgPSR7dH1gXXx8Q2UoKSwodm9pZCAwPT09b3x8by5zbGljZSgwLDIpLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkmJm8uY2hhckNvZGVBdCgyKT09PUVlKSYmKG89YCR7dH1cXGApKTtjb25zdCBhPW8ubGVuZ3RoO2xldCBzPTAsYz0iIixsPSExO2NvbnN0IHU9by5jaGFyQ29kZUF0KDApO2lmKDE9PT1hKUxlKHUpJiYocz0xLGw9ITApO2Vsc2UgaWYoTGUodSkpaWYobD0hMCxMZShvLmNoYXJDb2RlQXQoMSkpKXtsZXQgZT0yLHQ9ZTtmb3IoO2U8YSYmIUxlKG8uY2hhckNvZGVBdChlKSk7KWUrKztpZihlPGEmJmUhPT10KXtjb25zdCBuPW8uc2xpY2UodCxlKTtmb3IodD1lO2U8YSYmTGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8YSYmZSE9PXQpe2Zvcih0PWU7ZTxhJiYhTGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2UhPT1hJiZlPT09dHx8KGM9YFxcXFwke259XFwke28uc2xpY2UodCxlKX1gLHM9ZSl9fX1lbHNlIHM9MTtlbHNlIE9lKHUpJiZvLmNoYXJDb2RlQXQoMSk9PT14ZSYmKGM9by5zbGljZSgwLDIpLHM9MixhPjImJkxlKG8uY2hhckNvZGVBdCgyKSkmJihsPSEwLHM9MykpO2lmKGMubGVuZ3RoPjApaWYodC5sZW5ndGg+MCl7aWYoYy50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWVsc2UgdD1jO2lmKHIpe2lmKHQubGVuZ3RoPjApYnJlYWt9ZWxzZSBpZihuPWAke28uc2xpY2Uocyl9XFwke259YCxyPWwsbCYmdC5sZW5ndGg+MClicmVha31yZXR1cm4gbj1JZShuLCFyLCJcXCIsTGUpLHI/YCR7dH1cXCR7bn1gOmAke3R9JHtufWB8fCIuIn0sbm9ybWFsaXplKGUpe2tlKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKDA9PT10KXJldHVybiIuIjtsZXQgbixyPTAsaT0hMTtjb25zdCBvPWUuY2hhckNvZGVBdCgwKTtpZigxPT09dClyZXR1cm4gVGUobyk/IlxcIjplO2lmKExlKG8pKWlmKGk9ITAsTGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiFMZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Y29uc3QgYT1lLnNsaWNlKG8saSk7Zm9yKG89aTtpPHQmJkxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIUxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm5gXFxcXCR7YX1cXCR7ZS5zbGljZShvKX1cXGA7aSE9PW8mJihuPWBcXFxcJHthfVxcJHtlLnNsaWNlKG8saSl9YCxyPWkpfX19ZWxzZSByPTE7ZWxzZSBPZShvKSYmZS5jaGFyQ29kZUF0KDEpPT09eGUmJihuPWUuc2xpY2UoMCwyKSxyPTIsdD4yJiZMZShlLmNoYXJDb2RlQXQoMikpJiYoaT0hMCxyPTMpKTtsZXQgYT1yPHQ/SWUoZS5zbGljZShyKSwhaSwiXFwiLExlKToiIjtyZXR1cm4gMCE9PWEubGVuZ3RofHxpfHwoYT0iLiIpLGEubGVuZ3RoPjAmJkxlKGUuY2hhckNvZGVBdCh0LTEpKSYmKGErPSJcXCIpLHZvaWQgMD09PW4/aT9gXFwke2F9YDphOmk/YCR7bn1cXCR7YX1gOmAke259JHthfWB9LGlzQWJzb2x1dGUoZSl7a2UoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuITE7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIExlKG4pfHx0PjImJk9lKG4pJiZlLmNoYXJDb2RlQXQoMSk9PT14ZSYmTGUoZS5jaGFyQ29kZUF0KDIpKX0sam9pbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2xldCB0LG47Zm9yKGxldCByPTA7cjxlLmxlbmd0aDsrK3Ipe2NvbnN0IGk9ZVtyXTtrZShpLCJwYXRoIiksaS5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1uPWk6dCs9YFxcJHtpfWApfWlmKHZvaWQgMD09PXQpcmV0dXJuIi4iO2xldCByPSEwLGk9MDtpZigic3RyaW5nIj09dHlwZW9mIG4mJkxlKG4uY2hhckNvZGVBdCgwKSkpeysraTtjb25zdCBlPW4ubGVuZ3RoO2U+MSYmTGUobi5jaGFyQ29kZUF0KDEpKSYmKCsraSxlPjImJihMZShuLmNoYXJDb2RlQXQoMikpPysraTpyPSExKSl9aWYocil7Zm9yKDtpPHQubGVuZ3RoJiZMZSh0LmNoYXJDb2RlQXQoaSkpOylpKys7aT49MiYmKHQ9YFxcJHt0LnNsaWNlKGkpfWApfXJldHVybiBQZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoa2UoZSwiZnJvbSIpLGtlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj1QZS5yZXNvbHZlKGUpLHI9UGUucmVzb2x2ZSh0KTtpZihuPT09cilyZXR1cm4iIjtpZigoZT1uLnRvTG93ZXJDYXNlKCkpPT09KHQ9ci50b0xvd2VyQ2FzZSgpKSlyZXR1cm4iIjtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KGkpPT09RWU7KWkrKztsZXQgbz1lLmxlbmd0aDtmb3IoO28tMT5pJiZlLmNoYXJDb2RlQXQoby0xKT09PUVlOylvLS07Y29uc3QgYT1vLWk7bGV0IHM9MDtmb3IoO3M8dC5sZW5ndGgmJnQuY2hhckNvZGVBdChzKT09PUVlOylzKys7bGV0IGM9dC5sZW5ndGg7Zm9yKDtjLTE+cyYmdC5jaGFyQ29kZUF0KGMtMSk9PT1FZTspYy0tO2NvbnN0IGw9Yy1zLHU9YTxsP2E6bDtsZXQgaD0tMSxmPTA7Zm9yKDtmPHU7ZisrKXtjb25zdCBuPWUuY2hhckNvZGVBdChpK2YpO2lmKG4hPT10LmNoYXJDb2RlQXQocytmKSlicmVhaztuPT09RWUmJihoPWYpfWlmKGYhPT11KXtpZigtMT09PWgpcmV0dXJuIHJ9ZWxzZXtpZihsPnUpe2lmKHQuY2hhckNvZGVBdChzK2YpPT09RWUpcmV0dXJuIHIuc2xpY2UocytmKzEpO2lmKDI9PT1mKXJldHVybiByLnNsaWNlKHMrZil9YT51JiYoZS5jaGFyQ29kZUF0KGkrZik9PT1FZT9oPWY6Mj09PWYmJihoPTMpKSwtMT09PWgmJihoPTApfWxldCBkPSIiO2ZvcihmPWkraCsxO2Y8PW87KytmKWYhPT1vJiZlLmNoYXJDb2RlQXQoZikhPT1FZXx8KGQrPTA9PT1kLmxlbmd0aD8iLi4iOiJcXC4uIik7cmV0dXJuIHMrPWgsZC5sZW5ndGg+MD9gJHtkfSR7ci5zbGljZShzLGMpfWA6KHIuY2hhckNvZGVBdChzKT09PUVlJiYrK3Msci5zbGljZShzLGMpKX0sdG9OYW1lc3BhY2VkUGF0aChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIGU7aWYoMD09PWUubGVuZ3RoKXJldHVybiIiO2NvbnN0IHQ9UGUucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1FZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09RWUpe2NvbnN0IGU9dC5jaGFyQ29kZUF0KDIpO2lmKDYzIT09ZSYmZSE9PVNlKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihPZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT14ZSYmdC5jaGFyQ29kZUF0KDIpPT09RWUpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4iLiI7bGV0IG49LTEscj0wO2NvbnN0IGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT10KXJldHVybiBMZShpKT9lOiIuIjtpZihMZShpKSl7aWYobj1yPTEsTGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiFMZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Zm9yKG89aTtpPHQmJkxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIUxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm4gZTtpIT09byYmKG49cj1pKzEpfX19fWVsc2UgT2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PXhlJiYobj10PjImJkxlKGUuY2hhckNvZGVBdCgyKSk/MzoyLHI9bik7bGV0IG89LTEsYT0hMDtmb3IobGV0IG49dC0xO24+PXI7LS1uKWlmKExlKGUuY2hhckNvZGVBdChuKSkpe2lmKCFhKXtvPW47YnJlYWt9fWVsc2UgYT0hMTtpZigtMT09PW8pe2lmKC0xPT09bilyZXR1cm4iLiI7bz1ufXJldHVybiBlLnNsaWNlKDAsbyl9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYoZS5sZW5ndGg+PTImJk9lKGUuY2hhckNvZGVBdCgwKSkmJmUuY2hhckNvZGVBdCgxKT09PXhlJiYocj0yKSx2b2lkIDAhPT10JiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBhPXQubGVuZ3RoLTEscz0tMTtmb3Iobj1lLmxlbmd0aC0xO24+PXI7LS1uKXtjb25zdCBjPWUuY2hhckNvZGVBdChuKTtpZihMZShjKSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1zJiYobz0hMSxzPW4rMSksYT49MCYmKGM9PT10LmNoYXJDb2RlQXQoYSk/LTE9PS0tYSYmKGk9bik6KGE9LTEsaT1zKSl9cmV0dXJuIHI9PT1pP2k9czotMT09PWkmJihpPWUubGVuZ3RoKSxlLnNsaWNlKHIsaSl9Zm9yKG49ZS5sZW5ndGgtMTtuPj1yOy0tbilpZihMZShlLmNoYXJDb2RlQXQobikpKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0wLG49LTEscj0wLGk9LTEsbz0hMCxhPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PXhlJiZPZShlLmNoYXJDb2RlQXQoMCkpJiYodD1yPTIpO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PXQ7LS1zKXtjb25zdCB0PWUuY2hhckNvZGVBdChzKTtpZihMZSh0KSl7aWYoIW8pe3I9cysxO2JyZWFrfX1lbHNlLTE9PT1pJiYobz0hMSxpPXMrMSksdD09PVNlPy0xPT09bj9uPXM6MSE9PWEmJihhPTEpOi0xIT09biYmKGE9LTEpfXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09YXx8MT09PWEmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6TWUuYmluZChudWxsLCJcXCIpLHBhcnNlKGUpe2tlKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7Y29uc3Qgbj1lLmxlbmd0aDtsZXQgcj0wLGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiBMZShpKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZihMZShpKSl7aWYocj0xLExlKGUuY2hhckNvZGVBdCgxKSkpe2xldCB0PTIsaT10O2Zvcig7dDxuJiYhTGUoZS5jaGFyQ29kZUF0KHQpKTspdCsrO2lmKHQ8biYmdCE9PWkpe2ZvcihpPXQ7dDxuJiZMZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7aWYodDxuJiZ0IT09aSl7Zm9yKGk9dDt0PG4mJiFMZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7dD09PW4/cj10OnQhPT1pJiYocj10KzEpfX19fWVsc2UgaWYoT2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PXhlKXtpZihuPD0yKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O2lmKHI9MixMZShlLmNoYXJDb2RlQXQoMikpKXtpZigzPT09bilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtyPTN9fXI+MCYmKHQucm9vdD1lLnNsaWNlKDAscikpO2xldCBvPS0xLGE9cixzPS0xLGM9ITAsbD1lLmxlbmd0aC0xLHU9MDtmb3IoO2w+PXI7LS1sKWlmKGk9ZS5jaGFyQ29kZUF0KGwpLExlKGkpKXtpZighYyl7YT1sKzE7YnJlYWt9fWVsc2UtMT09PXMmJihjPSExLHM9bCsxKSxpPT09U2U/LTE9PT1vP289bDoxIT09dSYmKHU9MSk6LTEhPT1vJiYodT0tMSk7cmV0dXJuLTEhPT1zJiYoLTE9PT1vfHwwPT09dXx8MT09PXUmJm89PT1zLTEmJm89PT1hKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGEscyk6KHQubmFtZT1lLnNsaWNlKGEsbyksdC5iYXNlPWUuc2xpY2UoYSxzKSx0LmV4dD1lLnNsaWNlKG8scykpKSx0LmRpcj1hPjAmJmEhPT1yP2Uuc2xpY2UoMCxhLTEpOnQucm9vdCx0fSxzZXA6IlxcIixkZWxpbWl0ZXI6IjsiLHdpbjMyOm51bGwscG9zaXg6bnVsbH0sUmU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0hMTtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0tMSYmIW47ci0tKXtjb25zdCBpPXI+PTA/ZVtyXTpDZSgpO2tlKGksInBhdGgiKSwwIT09aS5sZW5ndGgmJih0PWAke2l9LyR7dH1gLG49aS5jaGFyQ29kZUF0KDApPT09QWUpfXJldHVybiB0PUllKHQsIW4sIi8iLFRlKSxuP2AvJHt0fWA6dC5sZW5ndGg+MD90OiIuIn0sbm9ybWFsaXplKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09QWUsbj1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk9PT1BZTtyZXR1cm4gMD09PShlPUllKGUsIXQsIi8iLFRlKSkubGVuZ3RoP3Q/Ii8iOm4/Ii4vIjoiLiI6KG4mJihlKz0iLyIpLHQ/YC8ke2V9YDplKX0saXNBYnNvbHV0ZTplPT4oa2UoZSwicGF0aCIpLGUubGVuZ3RoPjAmJmUuY2hhckNvZGVBdCgwKT09PUFlKSxqb2luKC4uLmUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDsrK24pe2NvbnN0IHI9ZVtuXTtrZShyLCJwYXRoIiksci5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1yOnQrPWAvJHtyfWApfXJldHVybiB2b2lkIDA9PT10PyIuIjpSZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoa2UoZSwiZnJvbSIpLGtlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7aWYoKGU9UmUucmVzb2x2ZShlKSk9PT0odD1SZS5yZXNvbHZlKHQpKSlyZXR1cm4iIjtjb25zdCBuPWUubGVuZ3RoLHI9bi0xLGk9dC5sZW5ndGgtMSxvPXI8aT9yOmk7bGV0IGE9LTEscz0wO2Zvcig7czxvO3MrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMStzKTtpZihuIT09dC5jaGFyQ29kZUF0KDErcykpYnJlYWs7bj09PUFlJiYoYT1zKX1pZihzPT09bylpZihpPm8pe2lmKHQuY2hhckNvZGVBdCgxK3MpPT09QWUpcmV0dXJuIHQuc2xpY2UoMStzKzEpO2lmKDA9PT1zKXJldHVybiB0LnNsaWNlKDErcyl9ZWxzZSByPm8mJihlLmNoYXJDb2RlQXQoMStzKT09PUFlP2E9czowPT09cyYmKGE9MCkpO2xldCBjPSIiO2ZvcihzPTErYSsxO3M8PW47KytzKXMhPT1uJiZlLmNoYXJDb2RlQXQocykhPT1BZXx8KGMrPTA9PT1jLmxlbmd0aD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtjfSR7dC5zbGljZSgxK2EpfWB9LHRvTmFtZXNwYWNlZFBhdGg6ZT0+ZSxkaXJuYW1lKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09QWU7bGV0IG49LTEscj0hMDtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0xOy0tdClpZihlLmNoYXJDb2RlQXQodCk9PT1BZSl7aWYoIXIpe249dDticmVha319ZWxzZSByPSExO3JldHVybi0xPT09bj90PyIvIjoiLiI6dCYmMT09PW4/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYodm9pZCAwIT09dCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLHM9LTE7Zm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7Y29uc3QgYz1lLmNoYXJDb2RlQXQobik7aWYoYz09PUFlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PXMmJihvPSExLHM9bisxKSxhPj0wJiYoYz09PXQuY2hhckNvZGVBdChhKT8tMT09LS1hJiYoaT1uKTooYT0tMSxpPXMpKX1yZXR1cm4gcj09PWk/aT1zOi0xPT09aSYmKGk9ZS5sZW5ndGgpLGUuc2xpY2UocixpKX1mb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWlmKGUuY2hhckNvZGVBdChuKT09PUFlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0tMSxuPTAscj0tMSxpPSEwLG89MDtmb3IobGV0IGE9ZS5sZW5ndGgtMTthPj0wOy0tYSl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQoYSk7aWYocyE9PUFlKS0xPT09ciYmKGk9ITEscj1hKzEpLHM9PT1TZT8tMT09PXQ/dD1hOjEhPT1vJiYobz0xKTotMSE9PXQmJihvPS0xKTtlbHNlIGlmKCFpKXtuPWErMTticmVha319cmV0dXJuLTE9PT10fHwtMT09PXJ8fDA9PT1vfHwxPT09byYmdD09PXItMSYmdD09PW4rMT8iIjplLnNsaWNlKHQscil9LGZvcm1hdDpNZS5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09QWU7bGV0IHI7bj8odC5yb290PSIvIixyPTEpOnI9MDtsZXQgaT0tMSxvPTAsYT0tMSxzPSEwLGM9ZS5sZW5ndGgtMSxsPTA7Zm9yKDtjPj1yOy0tYyl7Y29uc3QgdD1lLmNoYXJDb2RlQXQoYyk7aWYodCE9PUFlKS0xPT09YSYmKHM9ITEsYT1jKzEpLHQ9PT1TZT8tMT09PWk/aT1jOjEhPT1sJiYobD0xKTotMSE9PWkmJihsPS0xKTtlbHNlIGlmKCFzKXtvPWMrMTticmVha319aWYoLTEhPT1hKXtjb25zdCByPTA9PT1vJiZuPzE6bzstMT09PWl8fDA9PT1sfHwxPT09bCYmaT09PWEtMSYmaT09PW8rMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UocixhKToodC5uYW1lPWUuc2xpY2UocixpKSx0LmJhc2U9ZS5zbGljZShyLGEpLHQuZXh0PWUuc2xpY2UoaSxhKSl9cmV0dXJuIG8+MD90LmRpcj1lLnNsaWNlKDAsby0xKTpuJiYodC5kaXI9Ii8iKSx0fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtSZS53aW4zMj1QZS53aW4zMj1QZSxSZS5wb3NpeD1QZS5wb3NpeD1SZSwid2luMzIiPT09X2U/UGUubm9ybWFsaXplOlJlLm5vcm1hbGl6ZSwid2luMzIiPT09X2U/UGUucmVzb2x2ZTpSZS5yZXNvbHZlLCJ3aW4zMiI9PT1fZT9QZS5yZWxhdGl2ZTpSZS5yZWxhdGl2ZSwid2luMzIiPT09X2U/UGUuZGlybmFtZTpSZS5kaXJuYW1lLCJ3aW4zMiI9PT1fZT9QZS5iYXNlbmFtZTpSZS5iYXNlbmFtZSwid2luMzIiPT09X2U/UGUuZXh0bmFtZTpSZS5leHRuYW1lLCJ3aW4zMiI9PT1fZT9QZS5zZXA6UmUuc2VwO2NvbnN0IFZlPS9eXHdbXHdcZCsuLV0qJC8sRmU9L15cLy8sRGU9L15cL1wvLztmdW5jdGlvbiBLZShlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIVZlLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFGZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihEZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9Y29uc3QgamU9IiIsVWU9Ii8iLEJlPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2xldCBxZT1jbGFzcyBle2NvbnN0cnVjdG9yKGUsdCxuLHIsaSxvPSExKXsib2JqZWN0Ij09dHlwZW9mIGU/KHRoaXMuc2NoZW1lPWUuc2NoZW1lfHxqZSx0aGlzLmF1dGhvcml0eT1lLmF1dGhvcml0eXx8amUsdGhpcy5wYXRoPWUucGF0aHx8amUsdGhpcy5xdWVyeT1lLnF1ZXJ5fHxqZSx0aGlzLmZyYWdtZW50PWUuZnJhZ21lbnR8fGplKToodGhpcy5zY2hlbWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXx8dD9lOiJmaWxlIn0oZSxvKSx0aGlzLmF1dGhvcml0eT10fHxqZSx0aGlzLnBhdGg9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJodHRwcyI6Y2FzZSJodHRwIjpjYXNlImZpbGUiOnQ/dFswXSE9PVVlJiYodD1VZSt0KTp0PVVlfXJldHVybiB0fSh0aGlzLnNjaGVtZSxufHxqZSksdGhpcy5xdWVyeT1yfHxqZSx0aGlzLmZyYWdtZW50PWl8fGplLEtlKHRoaXMsbykpfXN0YXRpYyBpc1VyaSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fCEhdCYmKCJzdHJpbmciPT10eXBlb2YgdC5hdXRob3JpdHkmJiJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudCYmInN0cmluZyI9PXR5cGVvZiB0LnBhdGgmJiJzdHJpbmciPT10eXBlb2YgdC5xdWVyeSYmInN0cmluZyI9PXR5cGVvZiB0LnNjaGVtZSYmInN0cmluZyI9PXR5cGVvZiB0LmZzUGF0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQud2l0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQudG9TdHJpbmcpfWdldCBmc1BhdGgoKXtyZXR1cm4gSmUodGhpcywhMSl9d2l0aChlKXtpZighZSlyZXR1cm4gdGhpcztsZXR7c2NoZW1lOnQsYXV0aG9yaXR5Om4scGF0aDpyLHF1ZXJ5OmksZnJhZ21lbnQ6b309ZTtyZXR1cm4gdm9pZCAwPT09dD90PXRoaXMuc2NoZW1lOm51bGw9PT10JiYodD1qZSksdm9pZCAwPT09bj9uPXRoaXMuYXV0aG9yaXR5Om51bGw9PT1uJiYobj1qZSksdm9pZCAwPT09cj9yPXRoaXMucGF0aDpudWxsPT09ciYmKHI9amUpLHZvaWQgMD09PWk/aT10aGlzLnF1ZXJ5Om51bGw9PT1pJiYoaT1qZSksdm9pZCAwPT09bz9vPXRoaXMuZnJhZ21lbnQ6bnVsbD09PW8mJihvPWplKSx0PT09dGhpcy5zY2hlbWUmJm49PT10aGlzLmF1dGhvcml0eSYmcj09PXRoaXMucGF0aCYmaT09PXRoaXMucXVlcnkmJm89PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IFdlKHQsbixyLGksbyl9c3RhdGljIHBhcnNlKGUsdD0hMSl7Y29uc3Qgbj1CZS5leGVjKGUpO3JldHVybiBuP25ldyBXZShuWzJdfHxqZSxRZShuWzRdfHxqZSksUWUobls1XXx8amUpLFFlKG5bN118fGplKSxRZShuWzldfHxqZSksdCk6bmV3IFdlKGplLGplLGplLGplLGplKX1zdGF0aWMgZmlsZShlKXtsZXQgdD1qZTtpZihUJiYoZT1lLnJlcGxhY2UoL1xcL2csVWUpKSxlWzBdPT09VWUmJmVbMV09PT1VZSl7Y29uc3Qgbj1lLmluZGV4T2YoVWUsMik7LTE9PT1uPyh0PWUuc3Vic3RyaW5nKDIpLGU9VWUpOih0PWUuc3Vic3RyaW5nKDIsbiksZT1lLnN1YnN0cmluZyhuKXx8VWUpfXJldHVybiBuZXcgV2UoImZpbGUiLHQsZSxqZSxqZSl9c3RhdGljIGZyb20oZSl7Y29uc3QgdD1uZXcgV2UoZS5zY2hlbWUsZS5hdXRob3JpdHksZS5wYXRoLGUucXVlcnksZS5mcmFnbWVudCk7cmV0dXJuIEtlKHQsITApLHR9c3RhdGljIGpvaW5QYXRoKHQsLi4ubil7aWYoIXQucGF0aCl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IGNhbm5vdCBjYWxsIGpvaW5QYXRoIG9uIFVSSSB3aXRob3V0IHBhdGgiKTtsZXQgcjtyZXR1cm4gcj1UJiYiZmlsZSI9PT10LnNjaGVtZT9lLmZpbGUoUGUuam9pbihKZSh0LCEwKSwuLi5uKSkucGF0aDpSZS5qb2luKHQucGF0aCwuLi5uKSx0LndpdGgoe3BhdGg6cn0pfXRvU3RyaW5nKGU9ITEpe3JldHVybiBYZSh0aGlzLGUpfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUodCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuIHQ7e2NvbnN0IGU9bmV3IFdlKHQpO3JldHVybiBlLl9mb3JtYXR0ZWQ9dC5leHRlcm5hbCxlLl9mc1BhdGg9dC5fc2VwPT09JGU/dC5mc1BhdGg6bnVsbCxlfX1yZXR1cm4gdH19O2NvbnN0ICRlPVQ/MTp2b2lkIDA7Y2xhc3MgV2UgZXh0ZW5kcyBxZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZm9ybWF0dGVkPW51bGwsdGhpcy5fZnNQYXRoPW51bGx9Z2V0IGZzUGF0aCgpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9SmUodGhpcywhMSkpLHRoaXMuX2ZzUGF0aH10b1N0cmluZyhlPSExKXtyZXR1cm4gZT9YZSh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPVhlKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfXRvSlNPTigpe2NvbnN0IGU9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGUuZnNQYXRoPXRoaXMuX2ZzUGF0aCxlLl9zZXA9JGUpLHRoaXMuX2Zvcm1hdHRlZCYmKGUuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihlLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGUuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGUuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoZS5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoZS5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxlfX1jb25zdCBIZT17NTg6IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIHplKGUsdCl7bGV0IG4scj0tMTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7Y29uc3Qgbz1lLmNoYXJDb2RlQXQoaSk7aWYobz49OTcmJm88PTEyMnx8bz49NjUmJm88PTkwfHxvPj00OCYmbzw9NTd8fDQ1PT09b3x8NDY9PT1vfHw5NT09PW98fDEyNj09PW98fHQmJjQ3PT09byktMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksdm9pZCAwIT09biYmKG4rPWUuY2hhckF0KGkpKTtlbHNle3ZvaWQgMD09PW4mJihuPWUuc3Vic3RyKDAsaSkpO2NvbnN0IHQ9SGVbb107dm9pZCAwIT09dD8oLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLG4rPXQpOi0xPT09ciYmKHI9aSl9fXJldHVybi0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyKSkpLHZvaWQgMCE9PW4/bjplfWZ1bmN0aW9uIEdlKGUpe2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTszNT09PXJ8fDYzPT09cj8odm9pZCAwPT09dCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9SGVbcl0pOnZvaWQgMCE9PXQmJih0Kz1lW25dKX1yZXR1cm4gdm9pZCAwIT09dD90OmV9ZnVuY3Rpb24gSmUoZSx0KXtsZXQgbjtyZXR1cm4gbj1lLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiYiZmlsZSI9PT1lLnNjaGVtZT9gLy8ke2UuYXV0aG9yaXR5fSR7ZS5wYXRofWA6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3Q/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aCxUJiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gWGUoZSx0KXtjb25zdCBuPXQ/R2U6emU7bGV0IHI9IiIse3NjaGVtZTppLGF1dGhvcml0eTpvLHBhdGg6YSxxdWVyeTpzLGZyYWdtZW50OmN9PWU7aWYoaSYmKHIrPWkscis9IjoiKSwob3x8ImZpbGUiPT09aSkmJihyKz1VZSxyKz1VZSksbyl7bGV0IGU9by5pbmRleE9mKCJAIik7aWYoLTEhPT1lKXtjb25zdCB0PW8uc3Vic3RyKDAsZSk7bz1vLnN1YnN0cihlKzEpLGU9dC5pbmRleE9mKCI6IiksLTE9PT1lP3IrPW4odCwhMSk6KHIrPW4odC5zdWJzdHIoMCxlKSwhMSkscis9IjoiLHIrPW4odC5zdWJzdHIoZSsxKSwhMSkpLHIrPSJAIn1vPW8udG9Mb3dlckNhc2UoKSxlPW8uaW5kZXhPZigiOiIpLC0xPT09ZT9yKz1uKG8sITEpOihyKz1uKG8uc3Vic3RyKDAsZSksITEpLHIrPW8uc3Vic3RyKGUpKX1pZihhKXtpZihhLmxlbmd0aD49MyYmNDc9PT1hLmNoYXJDb2RlQXQoMCkmJjU4PT09YS5jaGFyQ29kZUF0KDIpKXtjb25zdCBlPWEuY2hhckNvZGVBdCgxKTtlPj02NSYmZTw9OTAmJihhPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGUrMzIpfToke2Euc3Vic3RyKDMpfWApfWVsc2UgaWYoYS5sZW5ndGg+PTImJjU4PT09YS5jaGFyQ29kZUF0KDEpKXtjb25zdCBlPWEuY2hhckNvZGVBdCgwKTtlPj02NSYmZTw9OTAmJihhPWAke1N0cmluZy5mcm9tQ2hhckNvZGUoZSszMil9OiR7YS5zdWJzdHIoMil9YCl9cis9bihhLCEwKX1yZXR1cm4gcyYmKHIrPSI/IixyKz1uKHMsITEpKSxjJiYocis9IiMiLHIrPXQ/Yzp6ZShjLCExKSkscn1mdW5jdGlvbiBaZShlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK1plKGUuc3Vic3RyKDMpKTplfX1jb25zdCBZZT0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBRZShlKXtyZXR1cm4gZS5tYXRjaChZZSk/ZS5yZXBsYWNlKFllLChlPT5aZShlKSkpOmV9bGV0IGV0PWNsYXNzIGV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmxpbmVOdW1iZXI9ZSx0aGlzLmNvbHVtbj10fXdpdGgodD10aGlzLmxpbmVOdW1iZXIsbj10aGlzLmNvbHVtbil7cmV0dXJuIHQ9PT10aGlzLmxpbmVOdW1iZXImJm49PT10aGlzLmNvbHVtbj90aGlzOm5ldyBlKHQsbil9ZGVsdGEoZT0wLHQ9MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrZSx0aGlzLmNvbHVtbit0KX1lcXVhbHModCl7cmV0dXJuIGUuZXF1YWxzKHRoaXMsdCl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiFlJiYhdHx8ISFlJiYhIXQmJmUubGluZU51bWJlcj09PXQubGluZU51bWJlciYmZS5jb2x1bW49PT10LmNvbHVtbn1pc0JlZm9yZSh0KXtyZXR1cm4gZS5pc0JlZm9yZSh0aGlzLHQpfXN0YXRpYyBpc0JlZm9yZShlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjx0LmNvbHVtbn1pc0JlZm9yZU9yRXF1YWwodCl7cmV0dXJuIGUuaXNCZWZvcmVPckVxdWFsKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbChlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjw9dC5jb2x1bW59c3RhdGljIGNvbXBhcmUoZSx0KXtjb25zdCBuPTB8ZS5saW5lTnVtYmVyLHI9MHx0LmxpbmVOdW1iZXI7aWYobj09PXIpe3JldHVybigwfGUuY29sdW1uKS0oMHx0LmNvbHVtbil9cmV0dXJuIG4tcn1jbG9uZSgpe3JldHVybiBuZXcgZSh0aGlzLmxpbmVOdW1iZXIsdGhpcy5jb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMubGluZU51bWJlcisiLCIrdGhpcy5jb2x1bW4rIikifXN0YXRpYyBsaWZ0KHQpe3JldHVybiBuZXcgZSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBpc0lQb3NpdGlvbihlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLmxpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5jb2x1bW59fSx0dD1jbGFzcyBle2NvbnN0cnVjdG9yKGUsdCxuLHIpe2U+bnx8ZT09PW4mJnQ+cj8odGhpcy5zdGFydExpbmVOdW1iZXI9bix0aGlzLnN0YXJ0Q29sdW1uPXIsdGhpcy5lbmRMaW5lTnVtYmVyPWUsdGhpcy5lbmRDb2x1bW49dCk6KHRoaXMuc3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zdGFydENvbHVtbj10LHRoaXMuZW5kTGluZU51bWJlcj1uLHRoaXMuZW5kQ29sdW1uPXIpfWlzRW1wdHkoKXtyZXR1cm4gZS5pc0VtcHR5KHRoaXMpfXN0YXRpYyBpc0VtcHR5KGUpe3JldHVybiBlLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1ufWNvbnRhaW5zUG9zaXRpb24odCl7cmV0dXJuIGUuY29udGFpbnNQb3NpdGlvbih0aGlzLHQpfXN0YXRpYyBjb250YWluc1Bvc2l0aW9uKGUsdCl7cmV0dXJuISh0LmxpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQubGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LmxpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5jb2x1bW48ZS5zdGFydENvbHVtbikmJiEodC5saW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmNvbHVtbj5lLmVuZENvbHVtbikpfXN0YXRpYyBzdHJpY3RDb250YWluc1Bvc2l0aW9uKGUsdCl7cmV0dXJuISh0LmxpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQubGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LmxpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5jb2x1bW48PWUuc3RhcnRDb2x1bW4pJiYhKHQubGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5jb2x1bW4+PWUuZW5kQ29sdW1uKSl9Y29udGFpbnNSYW5nZSh0KXtyZXR1cm4gZS5jb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPGUuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW4+ZS5lbmRDb2x1bW4pKSl9c3RyaWN0Q29udGFpbnNSYW5nZSh0KXtyZXR1cm4gZS5zdHJpY3RDb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIHN0cmljdENvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPD1lLnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPj1lLmVuZENvbHVtbikpKX1wbHVzUmFuZ2UodCl7cmV0dXJuIGUucGx1c1JhbmdlKHRoaXMsdCl9c3RhdGljIHBsdXNSYW5nZSh0LG4pe2xldCByLGksbyxhO3JldHVybiBuLnN0YXJ0TGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcj8ocj1uLnN0YXJ0TGluZU51bWJlcixpPW4uc3RhcnRDb2x1bW4pOm4uc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/KHI9bi5zdGFydExpbmVOdW1iZXIsaT1NYXRoLm1pbihuLnN0YXJ0Q29sdW1uLHQuc3RhcnRDb2x1bW4pKToocj10LnN0YXJ0TGluZU51bWJlcixpPXQuc3RhcnRDb2x1bW4pLG4uZW5kTGluZU51bWJlcj50LmVuZExpbmVOdW1iZXI/KG89bi5lbmRMaW5lTnVtYmVyLGE9bi5lbmRDb2x1bW4pOm4uZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj8obz1uLmVuZExpbmVOdW1iZXIsYT1NYXRoLm1heChuLmVuZENvbHVtbix0LmVuZENvbHVtbikpOihvPXQuZW5kTGluZU51bWJlcixhPXQuZW5kQ29sdW1uKSxuZXcgZShyLGksbyxhKX1pbnRlcnNlY3RSYW5nZXModCl7cmV0dXJuIGUuaW50ZXJzZWN0UmFuZ2VzKHRoaXMsdCl9c3RhdGljIGludGVyc2VjdFJhbmdlcyh0LG4pe2xldCByPXQuc3RhcnRMaW5lTnVtYmVyLGk9dC5zdGFydENvbHVtbixvPXQuZW5kTGluZU51bWJlcixhPXQuZW5kQ29sdW1uO2NvbnN0IHM9bi5zdGFydExpbmVOdW1iZXIsYz1uLnN0YXJ0Q29sdW1uLGw9bi5lbmRMaW5lTnVtYmVyLHU9bi5lbmRDb2x1bW47cmV0dXJuIHI8cz8ocj1zLGk9Yyk6cj09PXMmJihpPU1hdGgubWF4KGksYykpLG8+bD8obz1sLGE9dSk6bz09PWwmJihhPU1hdGgubWluKGEsdSkpLHI+b3x8cj09PW8mJmk+YT9udWxsOm5ldyBlKHIsaSxvLGEpfWVxdWFsc1JhbmdlKHQpe3JldHVybiBlLmVxdWFsc1JhbmdlKHRoaXMsdCl9c3RhdGljIGVxdWFsc1JhbmdlKGUsdCl7cmV0dXJuISFlJiYhIXQmJmUuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuc3RhcnRDb2x1bW49PT10LnN0YXJ0Q29sdW1uJiZlLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPT09dC5lbmRDb2x1bW59Z2V0RW5kUG9zaXRpb24oKXtyZXR1cm4gZS5nZXRFbmRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0RW5kUG9zaXRpb24oZSl7cmV0dXJuIG5ldyBldChlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4pfWdldFN0YXJ0UG9zaXRpb24oKXtyZXR1cm4gZS5nZXRTdGFydFBvc2l0aW9uKHRoaXMpfXN0YXRpYyBnZXRTdGFydFBvc2l0aW9uKGUpe3JldHVybiBuZXcgZXQoZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMuZW5kTGluZU51bWJlcisiLCIrdGhpcy5lbmRDb2x1bW4rIl0ifXNldEVuZFBvc2l0aW9uKHQsbil7cmV0dXJuIG5ldyBlKHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sdCxuKX1zZXRTdGFydFBvc2l0aW9uKHQsbil7cmV0dXJuIG5ldyBlKHQsbix0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pfWNvbGxhcHNlVG9TdGFydCgpe3JldHVybiBlLmNvbGxhcHNlVG9TdGFydCh0aGlzKX1zdGF0aWMgY29sbGFwc2VUb1N0YXJ0KHQpe3JldHVybiBuZXcgZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKHQsbj10KXtyZXR1cm4gbmV3IGUodC5saW5lTnVtYmVyLHQuY29sdW1uLG4ubGluZU51bWJlcixuLmNvbHVtbil9c3RhdGljIGxpZnQodCl7cmV0dXJuIHQ/bmV3IGUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbix0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pOm51bGx9c3RhdGljIGlzSVJhbmdlKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUuc3RhcnRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuc3RhcnRDb2x1bW4mJiJudW1iZXIiPT10eXBlb2YgZS5lbmRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuZW5kQ29sdW1ufXN0YXRpYyBhcmVJbnRlcnNlY3RpbmdPclRvdWNoaW5nKGUsdCl7cmV0dXJuIShlLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fGUuZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbjx0LnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjxlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgYXJlSW50ZXJzZWN0aW5nKGUsdCl7cmV0dXJuIShlLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fGUuZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbjw9dC5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48PWUuc3RhcnRDb2x1bW4pfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdTdGFydHMoZSx0KXtpZihlJiZ0KXtjb25zdCBuPTB8ZS5zdGFydExpbmVOdW1iZXIscj0wfHQuc3RhcnRMaW5lTnVtYmVyO2lmKG49PT1yKXtjb25zdCBuPTB8ZS5zdGFydENvbHVtbixyPTB8dC5zdGFydENvbHVtbjtpZihuPT09cil7Y29uc3Qgbj0wfGUuZW5kTGluZU51bWJlcixyPTB8dC5lbmRMaW5lTnVtYmVyO2lmKG49PT1yKXtyZXR1cm4oMHxlLmVuZENvbHVtbiktKDB8dC5lbmRDb2x1bW4pfXJldHVybiBuLXJ9cmV0dXJuIG4tcn1yZXR1cm4gbi1yfXJldHVybihlPzE6MCktKHQ/MTowKX1zdGF0aWMgY29tcGFyZVJhbmdlc1VzaW5nRW5kcyhlLHQpe3JldHVybiBlLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXI/ZS5lbmRDb2x1bW49PT10LmVuZENvbHVtbj9lLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyP2Uuc3RhcnRDb2x1bW4tdC5zdGFydENvbHVtbjplLnN0YXJ0TGluZU51bWJlci10LnN0YXJ0TGluZU51bWJlcjplLmVuZENvbHVtbi10LmVuZENvbHVtbjplLmVuZExpbmVOdW1iZXItdC5lbmRMaW5lTnVtYmVyfXN0YXRpYyBzcGFuc011bHRpcGxlTGluZXMoZSl7cmV0dXJuIGUuZW5kTGluZU51bWJlcj5lLnN0YXJ0TGluZU51bWJlcn10b0pTT04oKXtyZXR1cm4gdGhpc319O2Z1bmN0aW9uIG50KGUsdCxuLHIpe3JldHVybiBuZXcgdmUoZSx0LG4pLkNvbXB1dGVEaWZmKHIpfWNsYXNzIHJ0e2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9W10sbj1bXTtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspdFtyXT1jdChlW3JdLDEpLG5bcl09bHQoZVtyXSwxKTt0aGlzLmxpbmVzPWUsdGhpcy5fc3RhcnRDb2x1bW5zPXQsdGhpcy5fZW5kQ29sdW1ucz1ufWdldEVsZW1lbnRzKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxuPXRoaXMubGluZXMubGVuZ3RoO3Q8bjt0KyspZVt0XT10aGlzLmxpbmVzW3RdLnN1YnN0cmluZyh0aGlzLl9zdGFydENvbHVtbnNbdF0tMSx0aGlzLl9lbmRDb2x1bW5zW3RdLTEpO3JldHVybiBlfWdldFN0cmljdEVsZW1lbnQoZSl7cmV0dXJuIHRoaXMubGluZXNbZV19Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiBlKzF9Z2V0RW5kTGluZU51bWJlcihlKXtyZXR1cm4gZSsxfWNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQsbil7Y29uc3Qgcj1bXSxpPVtdLG89W107bGV0IGE9MDtmb3IobGV0IHM9dDtzPD1uO3MrKyl7Y29uc3QgdD10aGlzLmxpbmVzW3NdLGM9ZT90aGlzLl9zdGFydENvbHVtbnNbc106MSxsPWU/dGhpcy5fZW5kQ29sdW1uc1tzXTp0Lmxlbmd0aCsxO2ZvcihsZXQgZT1jO2U8bDtlKyspclthXT10LmNoYXJDb2RlQXQoZS0xKSxpW2FdPXMrMSxvW2FdPWUsYSsrOyFlJiZzPG4mJihyW2FdPTEwLGlbYV09cysxLG9bYV09dC5sZW5ndGgrMSxhKyspfXJldHVybiBuZXcgaXQocixpLG8pfX1jbGFzcyBpdHtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5fY2hhckNvZGVzPWUsdGhpcy5fbGluZU51bWJlcnM9dCx0aGlzLl9jb2x1bW5zPW59dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5fY2hhckNvZGVzLm1hcCgoKGUsdCk9PigxMD09PWU/IlxcbiI6U3RyaW5nLmZyb21DaGFyQ29kZShlKSkrYC0oJHt0aGlzLl9saW5lTnVtYmVyc1t0XX0sJHt0aGlzLl9jb2x1bW5zW3RdfSlgKSkuam9pbigiLCAiKSsiXSJ9X2Fzc2VydEluZGV4KGUsdCl7aWYoZTwwfHxlPj10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgaW5kZXgiKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLl9jaGFyQ29kZXN9Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiBlPjAmJmU9PT10aGlzLl9saW5lTnVtYmVycy5sZW5ndGg/dGhpcy5nZXRFbmRMaW5lTnVtYmVyKGUtMSk6KHRoaXMuX2Fzc2VydEluZGV4KGUsdGhpcy5fbGluZU51bWJlcnMpLHRoaXMuX2xpbmVOdW1iZXJzW2VdKX1nZXRFbmRMaW5lTnVtYmVyKGUpe3JldHVybi0xPT09ZT90aGlzLmdldFN0YXJ0TGluZU51bWJlcihlKzEpOih0aGlzLl9hc3NlcnRJbmRleChlLHRoaXMuX2xpbmVOdW1iZXJzKSwxMD09PXRoaXMuX2NoYXJDb2Rlc1tlXT90aGlzLl9saW5lTnVtYmVyc1tlXSsxOnRoaXMuX2xpbmVOdW1iZXJzW2VdKX1nZXRTdGFydENvbHVtbihlKXtyZXR1cm4gZT4wJiZlPT09dGhpcy5fY29sdW1ucy5sZW5ndGg/dGhpcy5nZXRFbmRDb2x1bW4oZS0xKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9jb2x1bW5zKSx0aGlzLl9jb2x1bW5zW2VdKX1nZXRFbmRDb2x1bW4oZSl7cmV0dXJuLTE9PT1lP3RoaXMuZ2V0U3RhcnRDb2x1bW4oZSsxKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9jb2x1bW5zKSwxMD09PXRoaXMuX2NoYXJDb2Rlc1tlXT8xOnRoaXMuX2NvbHVtbnNbZV0rMSl9fWNsYXNzIG90e2NvbnN0cnVjdG9yKGUsdCxuLHIsaSxvLGEscyl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj1lLHRoaXMub3JpZ2luYWxTdGFydENvbHVtbj10LHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdGhpcy5vcmlnaW5hbEVuZENvbHVtbj1yLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9aSx0aGlzLm1vZGlmaWVkU3RhcnRDb2x1bW49byx0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1hLHRoaXMubW9kaWZpZWRFbmRDb2x1bW49c31zdGF0aWMgY3JlYXRlRnJvbURpZmZDaGFuZ2UoZSx0LG4pe2NvbnN0IHI9dC5nZXRTdGFydExpbmVOdW1iZXIoZS5vcmlnaW5hbFN0YXJ0KSxpPXQuZ2V0U3RhcnRDb2x1bW4oZS5vcmlnaW5hbFN0YXJ0KSxvPXQuZ2V0RW5kTGluZU51bWJlcihlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aC0xKSxhPXQuZ2V0RW5kQ29sdW1uKGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoLTEpLHM9bi5nZXRTdGFydExpbmVOdW1iZXIoZS5tb2RpZmllZFN0YXJ0KSxjPW4uZ2V0U3RhcnRDb2x1bW4oZS5tb2RpZmllZFN0YXJ0KSxsPW4uZ2V0RW5kTGluZU51bWJlcihlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aC0xKSx1PW4uZ2V0RW5kQ29sdW1uKGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoLTEpO3JldHVybiBuZXcgb3QocixpLG8sYSxzLGMsbCx1KX19Y2xhc3MgYXR7Y29uc3RydWN0b3IoZSx0LG4scixpKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCx0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPW4sdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9cix0aGlzLmNoYXJDaGFuZ2VzPWl9c3RhdGljIGNyZWF0ZUZyb21EaWZmUmVzdWx0KGUsdCxuLHIsaSxvLGEpe2xldCBzLGMsbCx1LGg7aWYoMD09PXQub3JpZ2luYWxMZW5ndGg/KHM9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KS0xLGM9MCk6KHM9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KSxjPW4uZ2V0RW5kTGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSksMD09PXQubW9kaWZpZWRMZW5ndGg/KGw9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KS0xLHU9MCk6KGw9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KSx1PXIuZ2V0RW5kTGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKSksbyYmdC5vcmlnaW5hbExlbmd0aD4wJiZ0Lm9yaWdpbmFsTGVuZ3RoPDIwJiZ0Lm1vZGlmaWVkTGVuZ3RoPjAmJnQubW9kaWZpZWRMZW5ndGg8MjAmJmkoKSl7Y29uc3Qgbz1uLmNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQub3JpZ2luYWxTdGFydCx0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxzPXIuY3JlYXRlQ2hhclNlcXVlbmNlKGUsdC5tb2RpZmllZFN0YXJ0LHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpO2lmKG8uZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCYmcy5nZXRFbGVtZW50cygpLmxlbmd0aD4wKXtsZXQgZT1udChvLHMsaSwhMCkuY2hhbmdlczthJiYoZT1mdW5jdGlvbihlKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCB0PVtlWzBdXTtsZXQgbj10WzBdO2ZvcihsZXQgcj0xLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3QgaT1lW3JdLG89aS5vcmlnaW5hbFN0YXJ0LShuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCksYT1pLm1vZGlmaWVkU3RhcnQtKG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKTtNYXRoLm1pbihvLGEpPDM/KG4ub3JpZ2luYWxMZW5ndGg9aS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGgtbi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGg9aS5tb2RpZmllZFN0YXJ0K2kubW9kaWZpZWRMZW5ndGgtbi5tb2RpZmllZFN0YXJ0KToodC5wdXNoKGkpLG49aSl9cmV0dXJuIHR9KGUpKSxoPVtdO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyloLnB1c2gob3QuY3JlYXRlRnJvbURpZmZDaGFuZ2UoZVt0XSxvLHMpKX19cmV0dXJuIG5ldyBhdChzLGMsbCx1LGgpfX1jbGFzcyBzdHtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXM9bi5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzPW4uc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlPW4uc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZj1uLnNob3VsZE1ha2VQcmV0dHlEaWZmLHRoaXMub3JpZ2luYWxMaW5lcz1lLHRoaXMubW9kaWZpZWRMaW5lcz10LHRoaXMub3JpZ2luYWw9bmV3IHJ0KGUpLHRoaXMubW9kaWZpZWQ9bmV3IHJ0KHQpLHRoaXMuY29udGludWVMaW5lRGlmZj11dChuLm1heENvbXB1dGF0aW9uVGltZSksdGhpcy5jb250aW51ZUNoYXJEaWZmPXV0KDA9PT1uLm1heENvbXB1dGF0aW9uVGltZT8wOk1hdGgubWluKG4ubWF4Q29tcHV0YXRpb25UaW1lLDVlMykpfWNvbXB1dGVEaWZmKCl7aWYoMT09PXRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoJiYwPT09dGhpcy5vcmlnaW5hbC5saW5lc1swXS5sZW5ndGgpcmV0dXJuIDE9PT10aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoP3txdWl0RWFybHk6ITEsY2hhbmdlczpbXX06e3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MSxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjp0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCxjaGFyQ2hhbmdlczpbe21vZGlmaWVkRW5kQ29sdW1uOjAsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjAsbW9kaWZpZWRTdGFydENvbHVtbjowLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjAsb3JpZ2luYWxFbmRDb2x1bW46MCxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MCxvcmlnaW5hbFN0YXJ0Q29sdW1uOjAsb3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MH1dfV19O2lmKDE9PT10aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoKXJldHVybntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOnRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjEsY2hhckNoYW5nZXM6W3ttb2RpZmllZEVuZENvbHVtbjowLG1vZGlmaWVkRW5kTGluZU51bWJlcjowLG1vZGlmaWVkU3RhcnRDb2x1bW46MCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjowLG9yaWdpbmFsRW5kQ29sdW1uOjAsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjAsb3JpZ2luYWxTdGFydENvbHVtbjowLG9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjB9XX1dfTtjb25zdCBlPW50KHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlTGluZURpZmYsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZiksdD1lLmNoYW5nZXMsbj1lLnF1aXRFYXJseTtpZih0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlKXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllLnB1c2goYXQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSx0W25dLHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSk7cmV0dXJue3F1aXRFYXJseTpuLGNoYW5nZXM6ZX19Y29uc3Qgcj1bXTtsZXQgaT0wLG89MDtmb3IobGV0IGU9LTEsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBhPWUrMTxuP3RbZSsxXTpudWxsLHM9YT9hLm9yaWdpbmFsU3RhcnQ6dGhpcy5vcmlnaW5hbExpbmVzLmxlbmd0aCxjPWE/YS5tb2RpZmllZFN0YXJ0OnRoaXMubW9kaWZpZWRMaW5lcy5sZW5ndGg7Zm9yKDtpPHMmJm88Yzspe2NvbnN0IGU9dGhpcy5vcmlnaW5hbExpbmVzW2ldLHQ9dGhpcy5tb2RpZmllZExpbmVzW29dO2lmKGUhPT10KXt7bGV0IG49Y3QoZSwxKSxhPWN0KHQsMSk7Zm9yKDtuPjEmJmE+MTspe2lmKGUuY2hhckNvZGVBdChuLTIpIT09dC5jaGFyQ29kZUF0KGEtMikpYnJlYWs7bi0tLGEtLX0obj4xfHxhPjEpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHIsaSsxLDEsbixvKzEsMSxhKX17bGV0IG49bHQoZSwxKSxhPWx0KHQsMSk7Y29uc3Qgcz1lLmxlbmd0aCsxLGM9dC5sZW5ndGgrMTtmb3IoO248cyYmYTxjOyl7aWYoZS5jaGFyQ29kZUF0KG4tMSkhPT1lLmNoYXJDb2RlQXQoYS0xKSlicmVhaztuKyssYSsrfShuPHN8fGE8YykmJnRoaXMuX3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UocixpKzEsbixzLG8rMSxhLGMpfX1pKyssbysrfWEmJihyLnB1c2goYXQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSxhLHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSksaSs9YS5vcmlnaW5hbExlbmd0aCxvKz1hLm1vZGlmaWVkTGVuZ3RoKX1yZXR1cm57cXVpdEVhcmx5Om4sY2hhbmdlczpyfX1fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQsbixyLGksbyxhKXtpZih0aGlzLl9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQsbixyLGksbyxhKSlyZXR1cm47bGV0IHM7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJihzPVtuZXcgb3QodCxuLHQscixpLG8saSxhKV0pLGUucHVzaChuZXcgYXQodCx0LGksaSxzKSl9X21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGUsdCxuLHIsaSxvLGEpe2NvbnN0IHM9ZS5sZW5ndGg7aWYoMD09PXMpcmV0dXJuITE7Y29uc3QgYz1lW3MtMV07cmV0dXJuIDAhPT1jLm9yaWdpbmFsRW5kTGluZU51bWJlciYmMCE9PWMubW9kaWZpZWRFbmRMaW5lTnVtYmVyJiYoYy5vcmlnaW5hbEVuZExpbmVOdW1iZXIrMT09PXQmJmMubW9kaWZpZWRFbmRMaW5lTnVtYmVyKzE9PT1pJiYoYy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCxjLm1vZGlmaWVkRW5kTGluZU51bWJlcj1pLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiZjLmNoYXJDaGFuZ2VzJiZjLmNoYXJDaGFuZ2VzLnB1c2gobmV3IG90KHQsbix0LHIsaSxvLGksYSkpLCEwKSl9fWZ1bmN0aW9uIGN0KGUsdCl7Y29uc3Qgbj1mdW5jdGlvbihlKXtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KHQpO2lmKDMyIT09biYmOSE9PW4pcmV0dXJuIHR9cmV0dXJuLTF9KGUpO3JldHVybi0xPT09bj90Om4rMX1mdW5jdGlvbiBsdChlLHQpe2NvbnN0IG49ZnVuY3Rpb24oZSx0PWUubGVuZ3RoLTEpe2ZvcihsZXQgbj10O24+PTA7bi0tKXtjb25zdCB0PWUuY2hhckNvZGVBdChuKTtpZigzMiE9PXQmJjkhPT10KXJldHVybiBufXJldHVybi0xfShlKTtyZXR1cm4tMT09PW4/dDpuKzJ9ZnVuY3Rpb24gdXQoZSl7aWYoMD09PWUpcmV0dXJuKCk9PiEwO2NvbnN0IHQ9RGF0ZS5ub3coKTtyZXR1cm4oKT0+RGF0ZS5ub3coKS10PGV9dmFyIGh0O2Z1bmN0aW9uIGZ0KGUpe3JldHVybiBlPDA/MDplPjI1NT8yNTU6MHxlfWZ1bmN0aW9uIGR0KGUpe3JldHVybiBlPDA/MDplPjQyOTQ5NjcyOTU/NDI5NDk2NzI5NTowfGV9IWZ1bmN0aW9uKGUpe2UuaXNMZXNzVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gZTwwfSxlLmlzR3JlYXRlclRoYW49ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MH0sZS5pc05laXRoZXJMZXNzT3JHcmVhdGVyVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gMD09PWV9LGUuZ3JlYXRlclRoYW49MSxlLmxlc3NUaGFuPS0xLGUubmVpdGhlckxlc3NPckdyZWF0ZXJUaGFuPTB9KGh0fHwoaHQ9e30pKTtjbGFzcyBtdHtjb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlcz1lLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheShlLmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4PW5ldyBJbnQzMkFycmF5KDEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT0tMX1pbnNlcnRWYWx1ZXMoZSx0KXtlPWR0KGUpO2NvbnN0IG49dGhpcy52YWx1ZXMscj10aGlzLnByZWZpeFN1bSxpPXQubGVuZ3RoO3JldHVybiAwIT09aSYmKHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aCtpKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheSgwLGUpLDApLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KGUpLGUraSksdGhpcy52YWx1ZXMuc2V0KHQsZSksZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1zZXRWYWx1ZShlLHQpe3JldHVybiBlPWR0KGUpLHQ9ZHQodCksdGhpcy52YWx1ZXNbZV0hPT10JiYodGhpcy52YWx1ZXNbZV09dCxlLTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPWUtMSksITApfXJlbW92ZVZhbHVlcyhlLHQpe2U9ZHQoZSksdD1kdCh0KTtjb25zdCBuPXRoaXMudmFsdWVzLHI9dGhpcy5wcmVmaXhTdW07aWYoZT49bi5sZW5ndGgpcmV0dXJuITE7Y29uc3QgaT1uLmxlbmd0aC1lO3JldHVybiB0Pj1pJiYodD1pKSwwIT09dCYmKHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aC10KSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheSgwLGUpLDApLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KGUrdCksZSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1nZXRUb3RhbFN1bSgpe3JldHVybiAwPT09dGhpcy52YWx1ZXMubGVuZ3RoPzA6dGhpcy5fZ2V0UHJlZml4U3VtKHRoaXMudmFsdWVzLmxlbmd0aC0xKX1nZXRQcmVmaXhTdW0oZSl7cmV0dXJuIGU8MD8wOihlPWR0KGUpLHRoaXMuX2dldFByZWZpeFN1bShlKSl9X2dldFByZWZpeFN1bShlKXtpZihlPD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0pcmV0dXJuIHRoaXMucHJlZml4U3VtW2VdO2xldCB0PXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxOzA9PT10JiYodGhpcy5wcmVmaXhTdW1bMF09dGhpcy52YWx1ZXNbMF0sdCsrKSxlPj10aGlzLnZhbHVlcy5sZW5ndGgmJihlPXRoaXMudmFsdWVzLmxlbmd0aC0xKTtmb3IobGV0IG49dDtuPD1lO24rKyl0aGlzLnByZWZpeFN1bVtuXT10aGlzLnByZWZpeFN1bVtuLTFdK3RoaXMudmFsdWVzW25dO3JldHVybiB0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09TWF0aC5tYXgodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdLGUpLHRoaXMucHJlZml4U3VtW2VdfWdldEluZGV4T2YoZSl7ZT1NYXRoLmZsb29yKGUpLHRoaXMuZ2V0VG90YWxTdW0oKTtsZXQgdD0wLG49dGhpcy52YWx1ZXMubGVuZ3RoLTEscj0wLGk9MCxvPTA7Zm9yKDt0PD1uOylpZihyPXQrKG4tdCkvMnwwLGk9dGhpcy5wcmVmaXhTdW1bcl0sbz1pLXRoaXMudmFsdWVzW3JdLGU8byluPXItMTtlbHNle2lmKCEoZT49aSkpYnJlYWs7dD1yKzF9cmV0dXJuIG5ldyBndChyLGUtbyl9fWNsYXNzIGd0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5pbmRleD1lLHRoaXMucmVtYWluZGVyPXQsdGhpcy5fcHJlZml4U3VtSW5kZXhPZlJlc3VsdEJyYW5kPXZvaWQgMCx0aGlzLmluZGV4PWUsdGhpcy5yZW1haW5kZXI9dH19Y2xhc3MgcHR7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGluZXM9dCx0aGlzLl9lb2w9bix0aGlzLl92ZXJzaW9uSWQ9cix0aGlzLl9saW5lU3RhcnRzPW51bGwsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX2xpbmVzLmxlbmd0aD0wfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb25JZH1nZXRUZXh0KCl7cmV0dXJuIG51bGw9PT10aGlzLl9jYWNoZWRUZXh0VmFsdWUmJih0aGlzLl9jYWNoZWRUZXh0VmFsdWU9dGhpcy5fbGluZXMuam9pbih0aGlzLl9lb2wpKSx0aGlzLl9jYWNoZWRUZXh0VmFsdWV9b25FdmVudHMoZSl7ZS5lb2wmJmUuZW9sIT09dGhpcy5fZW9sJiYodGhpcy5fZW9sPWUuZW9sLHRoaXMuX2xpbmVTdGFydHM9bnVsbCk7Y29uc3QgdD1lLmNoYW5nZXM7Zm9yKGNvbnN0IGUgb2YgdCl0aGlzLl9hY2NlcHREZWxldGVSYW5nZShlLnJhbmdlKSx0aGlzLl9hY2NlcHRJbnNlcnRUZXh0KG5ldyBldChlLnJhbmdlLnN0YXJ0TGluZU51bWJlcixlLnJhbmdlLnN0YXJ0Q29sdW1uKSxlLnRleHQpO3RoaXMuX3ZlcnNpb25JZD1lLnZlcnNpb25JZCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1fZW5zdXJlTGluZVN0YXJ0cygpe2lmKCF0aGlzLl9saW5lU3RhcnRzKXtjb25zdCBlPXRoaXMuX2VvbC5sZW5ndGgsdD10aGlzLl9saW5lcy5sZW5ndGgsbj1uZXcgVWludDMyQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyluW3JdPXRoaXMuX2xpbmVzW3JdLmxlbmd0aCtlO3RoaXMuX2xpbmVTdGFydHM9bmV3IG10KG4pfX1fc2V0TGluZVRleHQoZSx0KXt0aGlzLl9saW5lc1tlXT10LHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuc2V0VmFsdWUoZSx0aGlzLl9saW5lc1tlXS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aCl9X2FjY2VwdERlbGV0ZVJhbmdlKGUpe2lmKGUuc3RhcnRMaW5lTnVtYmVyIT09ZS5lbmRMaW5lTnVtYmVyKXRoaXMuX3NldExpbmVUZXh0KGUuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1tlLmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UoZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyLWUuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyhlLnN0YXJ0TGluZU51bWJlcixlLmVuZExpbmVOdW1iZXItZS5zdGFydExpbmVOdW1iZXIpO2Vsc2V7aWYoZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1uKXJldHVybjt0aGlzLl9zZXRMaW5lVGV4dChlLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKX19X2FjY2VwdEluc2VydFRleHQoZSx0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IG49dC5zcGxpdCgvXHJcbnxccnxcbi8pO2lmKDE9PT1uLmxlbmd0aClyZXR1cm4gdm9pZCB0aGlzLl9zZXRMaW5lVGV4dChlLmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5jb2x1bW4tMSkrblswXSt0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpKTtuW24ubGVuZ3RoLTFdKz10aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpLHRoaXMuX3NldExpbmVUZXh0KGUubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLmNvbHVtbi0xKStuWzBdKTtjb25zdCByPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aC0xKTtmb3IobGV0IHQ9MTt0PG4ubGVuZ3RoO3QrKyl0aGlzLl9saW5lcy5zcGxpY2UoZS5saW5lTnVtYmVyK3QtMSwwLG5bdF0pLHJbdC0xXT1uW3RdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoO3RoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuaW5zZXJ0VmFsdWVzKGUubGluZU51bWJlcixyKX19Y29uc3QgYnQ9ZnVuY3Rpb24oZT0iIil7bGV0IHQ9IigtP1xcZCpcXC5cXGRcXHcqKXwoW14iO2Zvcihjb25zdCBuIG9mImB+IUAjJCVeJiooKS09K1t7XX1cXHw7OidcIiwuPD4vPyIpZS5pbmRleE9mKG4pPj0wfHwodCs9IlxcIituKTtyZXR1cm4gdCs9Ilxcc10rKSIsbmV3IFJlZ0V4cCh0LCJnIil9KCk7Y29uc3QgdnQ9bmV3IGc7ZnVuY3Rpb24geXQoZSx0LG4scixpKXtpZihpfHwoaT1zLmZpcnN0KHZ0KSksbi5sZW5ndGg+aS5tYXhMZW4pe2xldCBvPWUtaS5tYXhMZW4vMjtyZXR1cm4gbzwwP289MDpyKz1vLHl0KGUsdCxuPW4uc3Vic3RyaW5nKG8sZStpLm1heExlbi8yKSxyLGkpfWNvbnN0IG89RGF0ZS5ub3coKSxhPWUtMS1yO2xldCBjPS0xLGw9bnVsbDtmb3IobGV0IGU9MTshKERhdGUubm93KCktbz49aS50aW1lQnVkZ2V0KTtlKyspe2NvbnN0IHI9YS1pLndpbmRvd1NpemUqZTt0Lmxhc3RJbmRleD1NYXRoLm1heCgwLHIpO2NvbnN0IG89Q3QodCxuLGEsYyk7aWYoIW8mJmwpYnJlYWs7aWYobD1vLHI8PTApYnJlYWs7Yz1yfWlmKGwpe2NvbnN0IGU9e3dvcmQ6bFswXSxzdGFydENvbHVtbjpyKzErbC5pbmRleCxlbmRDb2x1bW46cisxK2wuaW5kZXgrbFswXS5sZW5ndGh9O3JldHVybiB0Lmxhc3RJbmRleD0wLGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ3QoZSx0LG4scil7bGV0IGk7Zm9yKDtpPWUuZXhlYyh0KTspe2NvbnN0IHQ9aS5pbmRleHx8MDtpZih0PD1uJiZlLmxhc3RJbmRleD49bilyZXR1cm4gaTtpZihyPjAmJnQ+cilyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH12dC51bnNoaWZ0KHttYXhMZW46MWUzLHdpbmRvd1NpemU6MTUsdGltZUJ1ZGdldDoxNTB9KTtjbGFzcyB3dHtjb25zdHJ1Y3RvcihlKXtjb25zdCB0PWZ0KGUpO3RoaXMuX2RlZmF1bHRWYWx1ZT10LHRoaXMuX2FzY2lpTWFwPXd0Ll9jcmVhdGVBc2NpaU1hcCh0KSx0aGlzLl9tYXA9bmV3IE1hcH1zdGF0aWMgX2NyZWF0ZUFzY2lpTWFwKGUpe2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IG49MDtuPDI1NjtuKyspdFtuXT1lO3JldHVybiB0fXNldChlLHQpe2NvbnN0IG49ZnQodCk7ZT49MCYmZTwyNTY/dGhpcy5fYXNjaWlNYXBbZV09bjp0aGlzLl9tYXAuc2V0KGUsbil9Z2V0KGUpe3JldHVybiBlPj0wJiZlPDI1Nj90aGlzLl9hc2NpaU1hcFtlXTp0aGlzLl9tYXAuZ2V0KGUpfHx0aGlzLl9kZWZhdWx0VmFsdWV9fWNsYXNzIF90e2NvbnN0cnVjdG9yKGUsdCxuKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUqdCk7Zm9yKGxldCBpPTAsbz1lKnQ7aTxvO2krKylyW2ldPW47dGhpcy5fZGF0YT1yLHRoaXMucm93cz1lLHRoaXMuY29scz10fWdldChlLHQpe3JldHVybiB0aGlzLl9kYXRhW2UqdGhpcy5jb2xzK3RdfXNldChlLHQsbil7dGhpcy5fZGF0YVtlKnRoaXMuY29scyt0XT1ufX1jbGFzcyBTdHtjb25zdHJ1Y3RvcihlKXtsZXQgdD0wLG49MDtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0W2ksbyxhXT1lW3JdO28+dCYmKHQ9byksaT5uJiYobj1pKSxhPm4mJihuPWEpfXQrKyxuKys7Y29uc3Qgcj1uZXcgX3Qobix0LDApO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3RbbixpLG9dPWVbdF07ci5zZXQobixpLG8pfXRoaXMuX3N0YXRlcz1yLHRoaXMuX21heENoYXJDb2RlPXR9bmV4dFN0YXRlKGUsdCl7cmV0dXJuIHQ8MHx8dD49dGhpcy5fbWF4Q2hhckNvZGU/MDp0aGlzLl9zdGF0ZXMuZ2V0KGUsdCl9fWxldCBBdD1udWxsO2xldCBFdD1udWxsO2NsYXNzIHh0e3N0YXRpYyBfY3JlYXRlTGluayhlLHQsbixyLGkpe2xldCBvPWktMTtkb3tjb25zdCBuPXQuY2hhckNvZGVBdChvKTtpZigyIT09ZS5nZXQobikpYnJlYWs7by0tfXdoaWxlKG8+cik7aWYocj4wKXtjb25zdCBlPXQuY2hhckNvZGVBdChyLTEpLG49dC5jaGFyQ29kZUF0KG8pOyg0MD09PWUmJjQxPT09bnx8OTE9PT1lJiY5Mz09PW58fDEyMz09PWUmJjEyNT09PW4pJiZvLS19cmV0dXJue3JhbmdlOntzdGFydExpbmVOdW1iZXI6bixzdGFydENvbHVtbjpyKzEsZW5kTGluZU51bWJlcjpuLGVuZENvbHVtbjpvKzJ9LHVybDp0LnN1YnN0cmluZyhyLG8rMSl9fXN0YXRpYyBjb21wdXRlTGlua3MoZSx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT1BdCYmKEF0PW5ldyBTdChbWzEsMTA0LDJdLFsxLDcyLDJdLFsxLDEwMiw2XSxbMSw3MCw2XSxbMiwxMTYsM10sWzIsODQsM10sWzMsMTE2LDRdLFszLDg0LDRdLFs0LDExMiw1XSxbNCw4MCw1XSxbNSwxMTUsOV0sWzUsODMsOV0sWzUsNTgsMTBdLFs2LDEwNSw3XSxbNiw3Myw3XSxbNywxMDgsOF0sWzcsNzYsOF0sWzgsMTAxLDldLFs4LDY5LDldLFs5LDU4LDEwXSxbMTAsNDcsMTFdLFsxMSw0NywxMl1dKSksQXR9KCkpe2NvbnN0IG49ZnVuY3Rpb24oKXtpZihudWxsPT09RXQpe0V0PW5ldyB3dCgwKTtjb25zdCBlPSIgXHQ8PidcIuOAgeOAgu+9oe+9pO+8jO+8ju+8mu+8m+KAmOOAiOOAjOOAjuOAlO+8iO+8u++9m++9ou+9o++9ne+8ve+8ieOAleOAj+OAjeOAieKAme+9gO+9nuKApiI7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspRXQuc2V0KGUuY2hhckNvZGVBdCh0KSwxKTtjb25zdCB0PSIuLDs6Ijtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylFdC5zZXQodC5jaGFyQ29kZUF0KGUpLDIpfXJldHVybiBFdH0oKSxyPVtdO2ZvcihsZXQgaT0xLG89ZS5nZXRMaW5lQ291bnQoKTtpPD1vO2krKyl7Y29uc3Qgbz1lLmdldExpbmVDb250ZW50KGkpLGE9by5sZW5ndGg7bGV0IHM9MCxjPTAsbD0wLHU9MSxoPSExLGY9ITEsZD0hMSxtPSExO2Zvcig7czxhOyl7bGV0IGU9ITE7Y29uc3QgYT1vLmNoYXJDb2RlQXQocyk7aWYoMTM9PT11KXtsZXQgdDtzd2l0Y2goYSl7Y2FzZSA0MDpoPSEwLHQ9MDticmVhaztjYXNlIDQxOnQ9aD8wOjE7YnJlYWs7Y2FzZSA5MTpkPSEwLGY9ITAsdD0wO2JyZWFrO2Nhc2UgOTM6ZD0hMSx0PWY/MDoxO2JyZWFrO2Nhc2UgMTIzOm09ITAsdD0wO2JyZWFrO2Nhc2UgMTI1OnQ9bT8wOjE7YnJlYWs7Y2FzZSAzOTp0PTM5PT09bD8xOjA7YnJlYWs7Y2FzZSAzNDp0PTM0PT09bD8xOjA7YnJlYWs7Y2FzZSA5Njp0PTk2PT09bD8xOjA7YnJlYWs7Y2FzZSA0Mjp0PTQyPT09bD8xOjA7YnJlYWs7Y2FzZSAxMjQ6dD0xMjQ9PT1sPzE6MDticmVhaztjYXNlIDMyOnQ9ZD8wOjE7YnJlYWs7ZGVmYXVsdDp0PW4uZ2V0KGEpfTE9PT10JiYoci5wdXNoKHh0Ll9jcmVhdGVMaW5rKG4sbyxpLGMscykpLGU9ITApfWVsc2UgaWYoMTI9PT11KXtsZXQgdDs5MT09PWE/KGY9ITAsdD0wKTp0PW4uZ2V0KGEpLDE9PT10P2U9ITA6dT0xM31lbHNlIHU9dC5uZXh0U3RhdGUodSxhKSwwPT09dSYmKGU9ITApO2UmJih1PTEsaD0hMSxmPSExLG09ITEsYz1zKzEsbD1hKSxzKyt9MTM9PT11JiZyLnB1c2goeHQuX2NyZWF0ZUxpbmsobixvLGksYyxhKSl9cmV0dXJuIHJ9fWNsYXNzIE50e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGVmYXVsdFZhbHVlU2V0PVtbInRydWUiLCJmYWxzZSJdLFsiVHJ1ZSIsIkZhbHNlIl0sWyJQcml2YXRlIiwiUHVibGljIiwiRnJpZW5kIiwiUmVhZE9ubHkiLCJQYXJ0aWFsIiwiUHJvdGVjdGVkIiwiV3JpdGVPbmx5Il0sWyJwdWJsaWMiLCJwcm90ZWN0ZWQiLCJwcml2YXRlIl1dfW5hdmlnYXRlVmFsdWVTZXQoZSx0LG4scixpKXtpZihlJiZ0KXtjb25zdCBuPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KHQsaSk7aWYobilyZXR1cm57cmFuZ2U6ZSx2YWx1ZTpufX1pZihuJiZyKXtjb25zdCBlPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KHIsaSk7aWYoZSlyZXR1cm57cmFuZ2U6bix2YWx1ZTplfX1yZXR1cm4gbnVsbH1kb05hdmlnYXRlVmFsdWVTZXQoZSx0KXtjb25zdCBuPXRoaXMubnVtYmVyUmVwbGFjZShlLHQpO3JldHVybiBudWxsIT09bj9uOnRoaXMudGV4dFJlcGxhY2UoZSx0KX1udW1iZXJSZXBsYWNlKGUsdCl7Y29uc3Qgbj1NYXRoLnBvdygxMCxlLmxlbmd0aC0oZS5sYXN0SW5kZXhPZigiLiIpKzEpKTtsZXQgcj1OdW1iZXIoZSk7Y29uc3QgaT1wYXJzZUZsb2F0KGUpO3JldHVybiBpc05hTihyKXx8aXNOYU4oaSl8fHIhPT1pP251bGw6MCE9PXJ8fHQ/KHI9TWF0aC5mbG9vcihyKm4pLHIrPXQ/bjotbixTdHJpbmcoci9uKSk6bnVsbH10ZXh0UmVwbGFjZShlLHQpe3JldHVybiB0aGlzLnZhbHVlU2V0c1JlcGxhY2UodGhpcy5fZGVmYXVsdFZhbHVlU2V0LGUsdCl9dmFsdWVTZXRzUmVwbGFjZShlLHQsbil7bGV0IHI9bnVsbDtmb3IobGV0IGk9MCxvPWUubGVuZ3RoO251bGw9PT1yJiZpPG87aSsrKXI9dGhpcy52YWx1ZVNldFJlcGxhY2UoZVtpXSx0LG4pO3JldHVybiByfXZhbHVlU2V0UmVwbGFjZShlLHQsbil7bGV0IHI9ZS5pbmRleE9mKHQpO3JldHVybiByPj0wPyhyKz1uPzE6LTEscjwwP3I9ZS5sZW5ndGgtMTpyJT1lLmxlbmd0aCxlW3JdKTpudWxsfX1OdC5JTlNUQU5DRT1uZXcgTnQ7Y29uc3Qga3Q9T2JqZWN0LmZyZWV6ZSgoZnVuY3Rpb24oZSx0KXtjb25zdCBuPXNldFRpbWVvdXQoZS5iaW5kKHQpLDApO3JldHVybntkaXNwb3NlKCl7Y2xlYXJUaW1lb3V0KG4pfX19KSk7dmFyIEx0OyFmdW5jdGlvbihlKXtlLmlzQ2FuY2VsbGF0aW9uVG9rZW49ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lLk5vbmV8fHQ9PT1lLkNhbmNlbGxlZHx8KHQgaW5zdGFuY2VvZiBUdHx8ISghdHx8Im9iamVjdCIhPXR5cGVvZiB0KSYmKCJib29sZWFuIj09dHlwZW9mIHQuaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKSl9LGUuTm9uZT1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMSxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpGLk5vbmV9KSxlLkNhbmNlbGxlZD1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMCxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDprdH0pfShMdHx8KEx0PXt9KSk7Y2xhc3MgVHR7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0NhbmNlbGxlZD0hMSx0aGlzLl9lbWl0dGVyPW51bGx9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP2t0Oih0aGlzLl9lbWl0dGVyfHwodGhpcy5fZW1pdHRlcj1uZXcgQiksdGhpcy5fZW1pdHRlci5ldmVudCl9ZGlzcG9zZSgpe3RoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmRpc3Bvc2UoKSx0aGlzLl9lbWl0dGVyPW51bGwpfX1jbGFzcyBPdHtjb25zdHJ1Y3RvcihlKXt0aGlzLl90b2tlbj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPWUmJmUub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQodGhpcy5jYW5jZWwsdGhpcyl9Z2V0IHRva2VuKCl7cmV0dXJuIHRoaXMuX3Rva2VufHwodGhpcy5fdG9rZW49bmV3IFR0KSx0aGlzLl90b2tlbn1jYW5jZWwoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIFR0JiZ0aGlzLl90b2tlbi5jYW5jZWwoKTp0aGlzLl90b2tlbj1MdC5DYW5jZWxsZWR9ZGlzcG9zZShlPSExKXtlJiZ0aGlzLmNhbmNlbCgpLHRoaXMuX3BhcmVudExpc3RlbmVyJiZ0aGlzLl9wYXJlbnRMaXN0ZW5lci5kaXNwb3NlKCksdGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBUdCYmdGhpcy5fdG9rZW4uZGlzcG9zZSgpOnRoaXMuX3Rva2VuPUx0Lk5vbmV9fWNsYXNzIEl0e2NvbnN0cnVjdG9yKCl7dGhpcy5fa2V5Q29kZVRvU3RyPVtdLHRoaXMuX3N0clRvS2V5Q29kZT1PYmplY3QuY3JlYXRlKG51bGwpfWRlZmluZShlLHQpe3RoaXMuX2tleUNvZGVUb1N0cltlXT10LHRoaXMuX3N0clRvS2V5Q29kZVt0LnRvTG93ZXJDYXNlKCldPWV9a2V5Q29kZVRvU3RyKGUpe3JldHVybiB0aGlzLl9rZXlDb2RlVG9TdHJbZV19c3RyVG9LZXlDb2RlKGUpe3JldHVybiB0aGlzLl9zdHJUb0tleUNvZGVbZS50b0xvd2VyQ2FzZSgpXXx8MH19Y29uc3QgTXQ9bmV3IEl0LFB0PW5ldyBJdCxSdD1uZXcgSXQsVnQ9bmV3IEFycmF5KDIzMCksRnQ9T2JqZWN0LmNyZWF0ZShudWxsKSxEdD1PYmplY3QuY3JlYXRlKG51bGwpO3ZhciBLdCxqdDshZnVuY3Rpb24oKXtjb25zdCBlPSIiLHQ9W1swLDEsMCwiTm9uZSIsMCwidW5rbm93biIsMCwiVktfVU5LTk9XTiIsZSxlXSxbMCwxLDEsIkh5cGVyIiwwLGUsMCxlLGUsZV0sWzAsMSwyLCJTdXBlciIsMCxlLDAsZSxlLGVdLFswLDEsMywiRm4iLDAsZSwwLGUsZSxlXSxbMCwxLDQsIkZuTG9jayIsMCxlLDAsZSxlLGVdLFswLDEsNSwiU3VzcGVuZCIsMCxlLDAsZSxlLGVdLFswLDEsNiwiUmVzdW1lIiwwLGUsMCxlLGUsZV0sWzAsMSw3LCJUdXJibyIsMCxlLDAsZSxlLGVdLFswLDEsOCwiU2xlZXAiLDAsZSwwLCJWS19TTEVFUCIsZSxlXSxbMCwxLDksIldha2VVcCIsMCxlLDAsZSxlLGVdLFszMSwwLDEwLCJLZXlBIiwzMSwiQSIsNjUsIlZLX0EiLGUsZV0sWzMyLDAsMTEsIktleUIiLDMyLCJCIiw2NiwiVktfQiIsZSxlXSxbMzMsMCwxMiwiS2V5QyIsMzMsIkMiLDY3LCJWS19DIixlLGVdLFszNCwwLDEzLCJLZXlEIiwzNCwiRCIsNjgsIlZLX0QiLGUsZV0sWzM1LDAsMTQsIktleUUiLDM1LCJFIiw2OSwiVktfRSIsZSxlXSxbMzYsMCwxNSwiS2V5RiIsMzYsIkYiLDcwLCJWS19GIixlLGVdLFszNywwLDE2LCJLZXlHIiwzNywiRyIsNzEsIlZLX0ciLGUsZV0sWzM4LDAsMTcsIktleUgiLDM4LCJIIiw3MiwiVktfSCIsZSxlXSxbMzksMCwxOCwiS2V5SSIsMzksIkkiLDczLCJWS19JIixlLGVdLFs0MCwwLDE5LCJLZXlKIiw0MCwiSiIsNzQsIlZLX0oiLGUsZV0sWzQxLDAsMjAsIktleUsiLDQxLCJLIiw3NSwiVktfSyIsZSxlXSxbNDIsMCwyMSwiS2V5TCIsNDIsIkwiLDc2LCJWS19MIixlLGVdLFs0MywwLDIyLCJLZXlNIiw0MywiTSIsNzcsIlZLX00iLGUsZV0sWzQ0LDAsMjMsIktleU4iLDQ0LCJOIiw3OCwiVktfTiIsZSxlXSxbNDUsMCwyNCwiS2V5TyIsNDUsIk8iLDc5LCJWS19PIixlLGVdLFs0NiwwLDI1LCJLZXlQIiw0NiwiUCIsODAsIlZLX1AiLGUsZV0sWzQ3LDAsMjYsIktleVEiLDQ3LCJRIiw4MSwiVktfUSIsZSxlXSxbNDgsMCwyNywiS2V5UiIsNDgsIlIiLDgyLCJWS19SIixlLGVdLFs0OSwwLDI4LCJLZXlTIiw0OSwiUyIsODMsIlZLX1MiLGUsZV0sWzUwLDAsMjksIktleVQiLDUwLCJUIiw4NCwiVktfVCIsZSxlXSxbNTEsMCwzMCwiS2V5VSIsNTEsIlUiLDg1LCJWS19VIixlLGVdLFs1MiwwLDMxLCJLZXlWIiw1MiwiViIsODYsIlZLX1YiLGUsZV0sWzUzLDAsMzIsIktleVciLDUzLCJXIiw4NywiVktfVyIsZSxlXSxbNTQsMCwzMywiS2V5WCIsNTQsIlgiLDg4LCJWS19YIixlLGVdLFs1NSwwLDM0LCJLZXlZIiw1NSwiWSIsODksIlZLX1kiLGUsZV0sWzU2LDAsMzUsIktleVoiLDU2LCJaIiw5MCwiVktfWiIsZSxlXSxbMjIsMCwzNiwiRGlnaXQxIiwyMiwiMSIsNDksIlZLXzEiLGUsZV0sWzIzLDAsMzcsIkRpZ2l0MiIsMjMsIjIiLDUwLCJWS18yIixlLGVdLFsyNCwwLDM4LCJEaWdpdDMiLDI0LCIzIiw1MSwiVktfMyIsZSxlXSxbMjUsMCwzOSwiRGlnaXQ0IiwyNSwiNCIsNTIsIlZLXzQiLGUsZV0sWzI2LDAsNDAsIkRpZ2l0NSIsMjYsIjUiLDUzLCJWS181IixlLGVdLFsyNywwLDQxLCJEaWdpdDYiLDI3LCI2Iiw1NCwiVktfNiIsZSxlXSxbMjgsMCw0MiwiRGlnaXQ3IiwyOCwiNyIsNTUsIlZLXzciLGUsZV0sWzI5LDAsNDMsIkRpZ2l0OCIsMjksIjgiLDU2LCJWS184IixlLGVdLFszMCwwLDQ0LCJEaWdpdDkiLDMwLCI5Iiw1NywiVktfOSIsZSxlXSxbMjEsMCw0NSwiRGlnaXQwIiwyMSwiMCIsNDgsIlZLXzAiLGUsZV0sWzMsMSw0NiwiRW50ZXIiLDMsIkVudGVyIiwxMywiVktfUkVUVVJOIixlLGVdLFs5LDEsNDcsIkVzY2FwZSIsOSwiRXNjYXBlIiwyNywiVktfRVNDQVBFIixlLGVdLFsxLDEsNDgsIkJhY2tzcGFjZSIsMSwiQmFja3NwYWNlIiw4LCJWS19CQUNLIixlLGVdLFsyLDEsNDksIlRhYiIsMiwiVGFiIiw5LCJWS19UQUIiLGUsZV0sWzEwLDEsNTAsIlNwYWNlIiwxMCwiU3BhY2UiLDMyLCJWS19TUEFDRSIsZSxlXSxbODMsMCw1MSwiTWludXMiLDgzLCItIiwxODksIlZLX09FTV9NSU5VUyIsIi0iLCJPRU1fTUlOVVMiXSxbODEsMCw1MiwiRXF1YWwiLDgxLCI9IiwxODcsIlZLX09FTV9QTFVTIiwiPSIsIk9FTV9QTFVTIl0sWzg3LDAsNTMsIkJyYWNrZXRMZWZ0Iiw4NywiWyIsMjE5LCJWS19PRU1fNCIsIlsiLCJPRU1fNCJdLFs4OSwwLDU0LCJCcmFja2V0UmlnaHQiLDg5LCJdIiwyMjEsIlZLX09FTV82IiwiXSIsIk9FTV82Il0sWzg4LDAsNTUsIkJhY2tzbGFzaCIsODgsIlxcIiwyMjAsIlZLX09FTV81IiwiXFwiLCJPRU1fNSJdLFswLDAsNTYsIkludGxIYXNoIiwwLGUsMCxlLGUsZV0sWzgwLDAsNTcsIlNlbWljb2xvbiIsODAsIjsiLDE4NiwiVktfT0VNXzEiLCI7IiwiT0VNXzEiXSxbOTAsMCw1OCwiUXVvdGUiLDkwLCInIiwyMjIsIlZLX09FTV83IiwiJyIsIk9FTV83Il0sWzg2LDAsNTksIkJhY2txdW90ZSIsODYsImAiLDE5MiwiVktfT0VNXzMiLCJgIiwiT0VNXzMiXSxbODIsMCw2MCwiQ29tbWEiLDgyLCIsIiwxODgsIlZLX09FTV9DT01NQSIsIiwiLCJPRU1fQ09NTUEiXSxbODQsMCw2MSwiUGVyaW9kIiw4NCwiLiIsMTkwLCJWS19PRU1fUEVSSU9EIiwiLiIsIk9FTV9QRVJJT0QiXSxbODUsMCw2MiwiU2xhc2giLDg1LCIvIiwxOTEsIlZLX09FTV8yIiwiLyIsIk9FTV8yIl0sWzgsMSw2MywiQ2Fwc0xvY2siLDgsIkNhcHNMb2NrIiwyMCwiVktfQ0FQSVRBTCIsZSxlXSxbNTksMSw2NCwiRjEiLDU5LCJGMSIsMTEyLCJWS19GMSIsZSxlXSxbNjAsMSw2NSwiRjIiLDYwLCJGMiIsMTEzLCJWS19GMiIsZSxlXSxbNjEsMSw2NiwiRjMiLDYxLCJGMyIsMTE0LCJWS19GMyIsZSxlXSxbNjIsMSw2NywiRjQiLDYyLCJGNCIsMTE1LCJWS19GNCIsZSxlXSxbNjMsMSw2OCwiRjUiLDYzLCJGNSIsMTE2LCJWS19GNSIsZSxlXSxbNjQsMSw2OSwiRjYiLDY0LCJGNiIsMTE3LCJWS19GNiIsZSxlXSxbNjUsMSw3MCwiRjciLDY1LCJGNyIsMTE4LCJWS19GNyIsZSxlXSxbNjYsMSw3MSwiRjgiLDY2LCJGOCIsMTE5LCJWS19GOCIsZSxlXSxbNjcsMSw3MiwiRjkiLDY3LCJGOSIsMTIwLCJWS19GOSIsZSxlXSxbNjgsMSw3MywiRjEwIiw2OCwiRjEwIiwxMjEsIlZLX0YxMCIsZSxlXSxbNjksMSw3NCwiRjExIiw2OSwiRjExIiwxMjIsIlZLX0YxMSIsZSxlXSxbNzAsMSw3NSwiRjEyIiw3MCwiRjEyIiwxMjMsIlZLX0YxMiIsZSxlXSxbMCwxLDc2LCJQcmludFNjcmVlbiIsMCxlLDAsZSxlLGVdLFs3OSwxLDc3LCJTY3JvbGxMb2NrIiw3OSwiU2Nyb2xsTG9jayIsMTQ1LCJWS19TQ1JPTEwiLGUsZV0sWzcsMSw3OCwiUGF1c2UiLDcsIlBhdXNlQnJlYWsiLDE5LCJWS19QQVVTRSIsZSxlXSxbMTksMSw3OSwiSW5zZXJ0IiwxOSwiSW5zZXJ0Iiw0NSwiVktfSU5TRVJUIixlLGVdLFsxNCwxLDgwLCJIb21lIiwxNCwiSG9tZSIsMzYsIlZLX0hPTUUiLGUsZV0sWzExLDEsODEsIlBhZ2VVcCIsMTEsIlBhZ2VVcCIsMzMsIlZLX1BSSU9SIixlLGVdLFsyMCwxLDgyLCJEZWxldGUiLDIwLCJEZWxldGUiLDQ2LCJWS19ERUxFVEUiLGUsZV0sWzEzLDEsODMsIkVuZCIsMTMsIkVuZCIsMzUsIlZLX0VORCIsZSxlXSxbMTIsMSw4NCwiUGFnZURvd24iLDEyLCJQYWdlRG93biIsMzQsIlZLX05FWFQiLGUsZV0sWzE3LDEsODUsIkFycm93UmlnaHQiLDE3LCJSaWdodEFycm93IiwzOSwiVktfUklHSFQiLCJSaWdodCIsZV0sWzE1LDEsODYsIkFycm93TGVmdCIsMTUsIkxlZnRBcnJvdyIsMzcsIlZLX0xFRlQiLCJMZWZ0IixlXSxbMTgsMSw4NywiQXJyb3dEb3duIiwxOCwiRG93bkFycm93Iiw0MCwiVktfRE9XTiIsIkRvd24iLGVdLFsxNiwxLDg4LCJBcnJvd1VwIiwxNiwiVXBBcnJvdyIsMzgsIlZLX1VQIiwiVXAiLGVdLFs3OCwxLDg5LCJOdW1Mb2NrIiw3OCwiTnVtTG9jayIsMTQ0LCJWS19OVU1MT0NLIixlLGVdLFsxMDgsMSw5MCwiTnVtcGFkRGl2aWRlIiwxMDgsIk51bVBhZF9EaXZpZGUiLDExMSwiVktfRElWSURFIixlLGVdLFsxMDMsMSw5MSwiTnVtcGFkTXVsdGlwbHkiLDEwMywiTnVtUGFkX011bHRpcGx5IiwxMDYsIlZLX01VTFRJUExZIixlLGVdLFsxMDYsMSw5MiwiTnVtcGFkU3VidHJhY3QiLDEwNiwiTnVtUGFkX1N1YnRyYWN0IiwxMDksIlZLX1NVQlRSQUNUIixlLGVdLFsxMDQsMSw5MywiTnVtcGFkQWRkIiwxMDQsIk51bVBhZF9BZGQiLDEwNywiVktfQUREIixlLGVdLFszLDEsOTQsIk51bXBhZEVudGVyIiwzLGUsMCxlLGUsZV0sWzk0LDEsOTUsIk51bXBhZDEiLDk0LCJOdW1QYWQxIiw5NywiVktfTlVNUEFEMSIsZSxlXSxbOTUsMSw5NiwiTnVtcGFkMiIsOTUsIk51bVBhZDIiLDk4LCJWS19OVU1QQUQyIixlLGVdLFs5NiwxLDk3LCJOdW1wYWQzIiw5NiwiTnVtUGFkMyIsOTksIlZLX05VTVBBRDMiLGUsZV0sWzk3LDEsOTgsIk51bXBhZDQiLDk3LCJOdW1QYWQ0IiwxMDAsIlZLX05VTVBBRDQiLGUsZV0sWzk4LDEsOTksIk51bXBhZDUiLDk4LCJOdW1QYWQ1IiwxMDEsIlZLX05VTVBBRDUiLGUsZV0sWzk5LDEsMTAwLCJOdW1wYWQ2Iiw5OSwiTnVtUGFkNiIsMTAyLCJWS19OVU1QQUQ2IixlLGVdLFsxMDAsMSwxMDEsIk51bXBhZDciLDEwMCwiTnVtUGFkNyIsMTAzLCJWS19OVU1QQUQ3IixlLGVdLFsxMDEsMSwxMDIsIk51bXBhZDgiLDEwMSwiTnVtUGFkOCIsMTA0LCJWS19OVU1QQUQ4IixlLGVdLFsxMDIsMSwxMDMsIk51bXBhZDkiLDEwMiwiTnVtUGFkOSIsMTA1LCJWS19OVU1QQUQ5IixlLGVdLFs5MywxLDEwNCwiTnVtcGFkMCIsOTMsIk51bVBhZDAiLDk2LCJWS19OVU1QQUQwIixlLGVdLFsxMDcsMSwxMDUsIk51bXBhZERlY2ltYWwiLDEwNywiTnVtUGFkX0RlY2ltYWwiLDExMCwiVktfREVDSU1BTCIsZSxlXSxbOTIsMCwxMDYsIkludGxCYWNrc2xhc2giLDkyLCJPRU1fMTAyIiwyMjYsIlZLX09FTV8xMDIiLGUsZV0sWzU4LDEsMTA3LCJDb250ZXh0TWVudSIsNTgsIkNvbnRleHRNZW51Iiw5MyxlLGUsZV0sWzAsMSwxMDgsIlBvd2VyIiwwLGUsMCxlLGUsZV0sWzAsMSwxMDksIk51bXBhZEVxdWFsIiwwLGUsMCxlLGUsZV0sWzcxLDEsMTEwLCJGMTMiLDcxLCJGMTMiLDEyNCwiVktfRjEzIixlLGVdLFs3MiwxLDExMSwiRjE0Iiw3MiwiRjE0IiwxMjUsIlZLX0YxNCIsZSxlXSxbNzMsMSwxMTIsIkYxNSIsNzMsIkYxNSIsMTI2LCJWS19GMTUiLGUsZV0sWzc0LDEsMTEzLCJGMTYiLDc0LCJGMTYiLDEyNywiVktfRjE2IixlLGVdLFs3NSwxLDExNCwiRjE3Iiw3NSwiRjE3IiwxMjgsIlZLX0YxNyIsZSxlXSxbNzYsMSwxMTUsIkYxOCIsNzYsIkYxOCIsMTI5LCJWS19GMTgiLGUsZV0sWzc3LDEsMTE2LCJGMTkiLDc3LCJGMTkiLDEzMCwiVktfRjE5IixlLGVdLFswLDEsMTE3LCJGMjAiLDAsZSwwLCJWS19GMjAiLGUsZV0sWzAsMSwxMTgsIkYyMSIsMCxlLDAsIlZLX0YyMSIsZSxlXSxbMCwxLDExOSwiRjIyIiwwLGUsMCwiVktfRjIyIixlLGVdLFswLDEsMTIwLCJGMjMiLDAsZSwwLCJWS19GMjMiLGUsZV0sWzAsMSwxMjEsIkYyNCIsMCxlLDAsIlZLX0YyNCIsZSxlXSxbMCwxLDEyMiwiT3BlbiIsMCxlLDAsZSxlLGVdLFswLDEsMTIzLCJIZWxwIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjQsIlNlbGVjdCIsMCxlLDAsZSxlLGVdLFswLDEsMTI1LCJBZ2FpbiIsMCxlLDAsZSxlLGVdLFswLDEsMTI2LCJVbmRvIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjcsIkN1dCIsMCxlLDAsZSxlLGVdLFswLDEsMTI4LCJDb3B5IiwwLGUsMCxlLGUsZV0sWzAsMSwxMjksIlBhc3RlIiwwLGUsMCxlLGUsZV0sWzAsMSwxMzAsIkZpbmQiLDAsZSwwLGUsZSxlXSxbMCwxLDEzMSwiQXVkaW9Wb2x1bWVNdXRlIiwxMTIsIkF1ZGlvVm9sdW1lTXV0ZSIsMTczLCJWS19WT0xVTUVfTVVURSIsZSxlXSxbMCwxLDEzMiwiQXVkaW9Wb2x1bWVVcCIsMTEzLCJBdWRpb1ZvbHVtZVVwIiwxNzUsIlZLX1ZPTFVNRV9VUCIsZSxlXSxbMCwxLDEzMywiQXVkaW9Wb2x1bWVEb3duIiwxMTQsIkF1ZGlvVm9sdW1lRG93biIsMTc0LCJWS19WT0xVTUVfRE9XTiIsZSxlXSxbMTA1LDEsMTM0LCJOdW1wYWRDb21tYSIsMTA1LCJOdW1QYWRfU2VwYXJhdG9yIiwxMDgsIlZLX1NFUEFSQVRPUiIsZSxlXSxbMTEwLDAsMTM1LCJJbnRsUm8iLDExMCwiQUJOVF9DMSIsMTkzLCJWS19BQk5UX0MxIixlLGVdLFswLDEsMTM2LCJLYW5hTW9kZSIsMCxlLDAsZSxlLGVdLFswLDAsMTM3LCJJbnRsWWVuIiwwLGUsMCxlLGUsZV0sWzAsMSwxMzgsIkNvbnZlcnQiLDAsZSwwLGUsZSxlXSxbMCwxLDEzOSwiTm9uQ29udmVydCIsMCxlLDAsZSxlLGVdLFswLDEsMTQwLCJMYW5nMSIsMCxlLDAsZSxlLGVdLFswLDEsMTQxLCJMYW5nMiIsMCxlLDAsZSxlLGVdLFswLDEsMTQyLCJMYW5nMyIsMCxlLDAsZSxlLGVdLFswLDEsMTQzLCJMYW5nNCIsMCxlLDAsZSxlLGVdLFswLDEsMTQ0LCJMYW5nNSIsMCxlLDAsZSxlLGVdLFswLDEsMTQ1LCJBYm9ydCIsMCxlLDAsZSxlLGVdLFswLDEsMTQ2LCJQcm9wcyIsMCxlLDAsZSxlLGVdLFswLDEsMTQ3LCJOdW1wYWRQYXJlbkxlZnQiLDAsZSwwLGUsZSxlXSxbMCwxLDE0OCwiTnVtcGFkUGFyZW5SaWdodCIsMCxlLDAsZSxlLGVdLFswLDEsMTQ5LCJOdW1wYWRCYWNrc3BhY2UiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MCwiTnVtcGFkTWVtb3J5U3RvcmUiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MSwiTnVtcGFkTWVtb3J5UmVjYWxsIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTIsIk51bXBhZE1lbW9yeUNsZWFyIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTMsIk51bXBhZE1lbW9yeUFkZCIsMCxlLDAsZSxlLGVdLFswLDEsMTU0LCJOdW1wYWRNZW1vcnlTdWJ0cmFjdCIsMCxlLDAsZSxlLGVdLFswLDEsMTU1LCJOdW1wYWRDbGVhciIsMTI2LCJDbGVhciIsMTIsIlZLX0NMRUFSIixlLGVdLFswLDEsMTU2LCJOdW1wYWRDbGVhckVudHJ5IiwwLGUsMCxlLGUsZV0sWzUsMSwwLGUsNSwiQ3RybCIsMTcsIlZLX0NPTlRST0wiLGUsZV0sWzQsMSwwLGUsNCwiU2hpZnQiLDE2LCJWS19TSElGVCIsZSxlXSxbNiwxLDAsZSw2LCJBbHQiLDE4LCJWS19NRU5VIixlLGVdLFs1NywxLDAsZSw1NywiTWV0YSIsMCwiVktfQ09NTUFORCIsZSxlXSxbNSwxLDE1NywiQ29udHJvbExlZnQiLDUsZSwwLCJWS19MQ09OVFJPTCIsZSxlXSxbNCwxLDE1OCwiU2hpZnRMZWZ0Iiw0LGUsMCwiVktfTFNISUZUIixlLGVdLFs2LDEsMTU5LCJBbHRMZWZ0Iiw2LGUsMCwiVktfTE1FTlUiLGUsZV0sWzU3LDEsMTYwLCJNZXRhTGVmdCIsNTcsZSwwLCJWS19MV0lOIixlLGVdLFs1LDEsMTYxLCJDb250cm9sUmlnaHQiLDUsZSwwLCJWS19SQ09OVFJPTCIsZSxlXSxbNCwxLDE2MiwiU2hpZnRSaWdodCIsNCxlLDAsIlZLX1JTSElGVCIsZSxlXSxbNiwxLDE2MywiQWx0UmlnaHQiLDYsZSwwLCJWS19STUVOVSIsZSxlXSxbNTcsMSwxNjQsIk1ldGFSaWdodCIsNTcsZSwwLCJWS19SV0lOIixlLGVdLFswLDEsMTY1LCJCcmlnaHRuZXNzVXAiLDAsZSwwLGUsZSxlXSxbMCwxLDE2NiwiQnJpZ2h0bmVzc0Rvd24iLDAsZSwwLGUsZSxlXSxbMCwxLDE2NywiTWVkaWFQbGF5IiwwLGUsMCxlLGUsZV0sWzAsMSwxNjgsIk1lZGlhUmVjb3JkIiwwLGUsMCxlLGUsZV0sWzAsMSwxNjksIk1lZGlhRmFzdEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMCwxLDE3MCwiTWVkaWFSZXdpbmQiLDAsZSwwLGUsZSxlXSxbMTE0LDEsMTcxLCJNZWRpYVRyYWNrTmV4dCIsMTE5LCJNZWRpYVRyYWNrTmV4dCIsMTc2LCJWS19NRURJQV9ORVhUX1RSQUNLIixlLGVdLFsxMTUsMSwxNzIsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTIwLCJNZWRpYVRyYWNrUHJldmlvdXMiLDE3NywiVktfTUVESUFfUFJFVl9UUkFDSyIsZSxlXSxbMTE2LDEsMTczLCJNZWRpYVN0b3AiLDEyMSwiTWVkaWFTdG9wIiwxNzgsIlZLX01FRElBX1NUT1AiLGUsZV0sWzAsMSwxNzQsIkVqZWN0IiwwLGUsMCxlLGUsZV0sWzExNywxLDE3NSwiTWVkaWFQbGF5UGF1c2UiLDEyMiwiTWVkaWFQbGF5UGF1c2UiLDE3OSwiVktfTUVESUFfUExBWV9QQVVTRSIsZSxlXSxbMCwxLDE3NiwiTWVkaWFTZWxlY3QiLDEyMywiTGF1bmNoTWVkaWFQbGF5ZXIiLDE4MSwiVktfTUVESUFfTEFVTkNIX01FRElBX1NFTEVDVCIsZSxlXSxbMCwxLDE3NywiTGF1bmNoTWFpbCIsMTI0LCJMYXVuY2hNYWlsIiwxODAsIlZLX01FRElBX0xBVU5DSF9NQUlMIixlLGVdLFswLDEsMTc4LCJMYXVuY2hBcHAyIiwxMjUsIkxhdW5jaEFwcDIiLDE4MywiVktfTUVESUFfTEFVTkNIX0FQUDIiLGUsZV0sWzAsMSwxNzksIkxhdW5jaEFwcDEiLDAsZSwwLCJWS19NRURJQV9MQVVOQ0hfQVBQMSIsZSxlXSxbMCwxLDE4MCwiU2VsZWN0VGFzayIsMCxlLDAsZSxlLGVdLFswLDEsMTgxLCJMYXVuY2hTY3JlZW5TYXZlciIsMCxlLDAsZSxlLGVdLFswLDEsMTgyLCJCcm93c2VyU2VhcmNoIiwxMTUsIkJyb3dzZXJTZWFyY2giLDE3MCwiVktfQlJPV1NFUl9TRUFSQ0giLGUsZV0sWzAsMSwxODMsIkJyb3dzZXJIb21lIiwxMTYsIkJyb3dzZXJIb21lIiwxNzIsIlZLX0JST1dTRVJfSE9NRSIsZSxlXSxbMTEyLDEsMTg0LCJCcm93c2VyQmFjayIsMTE3LCJCcm93c2VyQmFjayIsMTY2LCJWS19CUk9XU0VSX0JBQ0siLGUsZV0sWzExMywxLDE4NSwiQnJvd3NlckZvcndhcmQiLDExOCwiQnJvd3NlckZvcndhcmQiLDE2NywiVktfQlJPV1NFUl9GT1JXQVJEIixlLGVdLFswLDEsMTg2LCJCcm93c2VyU3RvcCIsMCxlLDAsIlZLX0JST1dTRVJfU1RPUCIsZSxlXSxbMCwxLDE4NywiQnJvd3NlclJlZnJlc2giLDAsZSwwLCJWS19CUk9XU0VSX1JFRlJFU0giLGUsZV0sWzAsMSwxODgsIkJyb3dzZXJGYXZvcml0ZXMiLDAsZSwwLCJWS19CUk9XU0VSX0ZBVk9SSVRFUyIsZSxlXSxbMCwxLDE4OSwiWm9vbVRvZ2dsZSIsMCxlLDAsZSxlLGVdLFswLDEsMTkwLCJNYWlsUmVwbHkiLDAsZSwwLGUsZSxlXSxbMCwxLDE5MSwiTWFpbEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMCwxLDE5MiwiTWFpbFNlbmQiLDAsZSwwLGUsZSxlXSxbMTA5LDEsMCxlLDEwOSwiS2V5SW5Db21wb3NpdGlvbiIsMjI5LGUsZSxlXSxbMTExLDEsMCxlLDExMSwiQUJOVF9DMiIsMTk0LCJWS19BQk5UX0MyIixlLGVdLFs5MSwxLDAsZSw5MSwiT0VNXzgiLDIyMywiVktfT0VNXzgiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0tBTkEiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0hBTkdVTCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfSlVOSkEiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0ZJTkFMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19IQU5KQSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfS0FOSkkiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0NPTlZFUlQiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX05PTkNPTlZFUlQiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0FDQ0VQVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfTU9ERUNIQU5HRSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfU0VMRUNUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19QUklOVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfRVhFQ1VURSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfU05BUFNIT1QiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0hFTFAiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0FQUFMiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BST0NFU1NLRVkiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BBQ0tFVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfREJFX1NCQ1NDSEFSIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19EQkVfREJDU0NIQVIiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0FUVE4iLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0NSU0VMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19FWFNFTCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfRVJFT0YiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BMQVkiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1pPT00iLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX05PTkFNRSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUEExIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19PRU1fQ0xFQVIiLGUsZV1dLG49W10scj1bXTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdFt0LGksbyxhLHMsYyxsLHUsaCxmXT1lO2lmKHJbb118fChyW29dPSEwLEZ0W2FdPW8sRHRbYS50b0xvd2VyQ2FzZSgpXT1vKSwhbltzXSl7aWYobltzXT0hMCwhYyl0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyByZXByZXNlbnRhdGlvbiBtaXNzaW5nIGZvciBrZXkgY29kZSAke3N9IGFyb3VuZCBzY2FuIGNvZGUgJHthfWApO010LmRlZmluZShzLGMpLFB0LmRlZmluZShzLGh8fGMpLFJ0LmRlZmluZShzLGZ8fGh8fGMpfWwmJihWdFtsXT1zKX19KCksZnVuY3Rpb24oZSl7ZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gTXQua2V5Q29kZVRvU3RyKGUpfSxlLmZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIE10LnN0clRvS2V5Q29kZShlKX0sZS50b1VzZXJTZXR0aW5nc1VTPWZ1bmN0aW9uKGUpe3JldHVybiBQdC5rZXlDb2RlVG9TdHIoZSl9LGUudG9Vc2VyU2V0dGluZ3NHZW5lcmFsPWZ1bmN0aW9uKGUpe3JldHVybiBSdC5rZXlDb2RlVG9TdHIoZSl9LGUuZnJvbVVzZXJTZXR0aW5ncz1mdW5jdGlvbihlKXtyZXR1cm4gUHQuc3RyVG9LZXlDb2RlKGUpfHxSdC5zdHJUb0tleUNvZGUoZSl9LGUudG9FbGVjdHJvbkFjY2VsZXJhdG9yPWZ1bmN0aW9uKGUpe2lmKGU+PTkzJiZlPD0xMDgpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2UgMTY6cmV0dXJuIlVwIjtjYXNlIDE4OnJldHVybiJEb3duIjtjYXNlIDE1OnJldHVybiJMZWZ0IjtjYXNlIDE3OnJldHVybiJSaWdodCJ9cmV0dXJuIE10LmtleUNvZGVUb1N0cihlKX19KEt0fHwoS3Q9e30pKTtjbGFzcyBVdCBleHRlbmRzIHR0e2NvbnN0cnVjdG9yKGUsdCxuLHIpe3N1cGVyKGUsdCxuLHIpLHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj10LHRoaXMucG9zaXRpb25MaW5lTnVtYmVyPW4sdGhpcy5wb3NpdGlvbkNvbHVtbj1yfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLnBvc2l0aW9uTGluZU51bWJlcisiLCIrdGhpcy5wb3NpdGlvbkNvbHVtbisiXSJ9ZXF1YWxzU2VsZWN0aW9uKGUpe3JldHVybiBVdC5zZWxlY3Rpb25zRXF1YWwodGhpcyxlKX1zdGF0aWMgc2VsZWN0aW9uc0VxdWFsKGUsdCl7cmV0dXJuIGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJmUuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10LnNlbGVjdGlvblN0YXJ0Q29sdW1uJiZlLnBvc2l0aW9uTGluZU51bWJlcj09PXQucG9zaXRpb25MaW5lTnVtYmVyJiZlLnBvc2l0aW9uQ29sdW1uPT09dC5wb3NpdGlvbkNvbHVtbn1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10aGlzLnN0YXJ0TGluZU51bWJlciYmdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj09PXRoaXMuc3RhcnRDb2x1bW4/MDoxfXNldEVuZFBvc2l0aW9uKGUsdCl7cmV0dXJuIDA9PT10aGlzLmdldERpcmVjdGlvbigpP25ldyBVdCh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLGUsdCk6bmV3IFV0KGUsdCx0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uKX1nZXRQb3NpdGlvbigpe3JldHVybiBuZXcgZXQodGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIsdGhpcy5wb3NpdGlvbkNvbHVtbil9Z2V0U2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gbmV3IGV0KHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4pfXNldFN0YXJ0UG9zaXRpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuZ2V0RGlyZWN0aW9uKCk/bmV3IFV0KGUsdCx0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pOm5ldyBVdCh0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4sZSx0KX1zdGF0aWMgZnJvbVBvc2l0aW9ucyhlLHQ9ZSl7cmV0dXJuIG5ldyBVdChlLmxpbmVOdW1iZXIsZS5jb2x1bW4sdC5saW5lTnVtYmVyLHQuY29sdW1uKX1zdGF0aWMgZnJvbVJhbmdlKGUsdCl7cmV0dXJuIDA9PT10P25ldyBVdChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbik6bmV3IFV0KGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbixlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgbGlmdFNlbGVjdGlvbihlKXtyZXR1cm4gbmV3IFV0KGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLGUuc2VsZWN0aW9uU3RhcnRDb2x1bW4sZS5wb3NpdGlvbkxpbmVOdW1iZXIsZS5wb3NpdGlvbkNvbHVtbil9c3RhdGljIHNlbGVjdGlvbnNBcnJFcXVhbChlLHQpe2lmKGUmJiF0fHwhZSYmdClyZXR1cm4hMTtpZighZSYmIXQpcmV0dXJuITA7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoIXRoaXMuc2VsZWN0aW9uc0VxdWFsKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9c3RhdGljIGlzSVNlbGVjdGlvbihlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0Q29sdW1uJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25MaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25Db2x1bW59c3RhdGljIGNyZWF0ZVdpdGhEaXJlY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gMD09PWk/bmV3IFV0KGUsdCxuLHIpOm5ldyBVdChuLHIsZSx0KX19Y2xhc3MgQnR7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuaWQ9ZSx0aGlzLmRlZmluaXRpb249dCx0aGlzLmRlc2NyaXB0aW9uPW4sQnQuX2FsbENvZGljb25zLnB1c2godGhpcyl9Z2V0IGNsYXNzTmFtZXMoKXtyZXR1cm4iY29kaWNvbiBjb2RpY29uLSIrdGhpcy5pZH1nZXQgY2xhc3NOYW1lc0FycmF5KCl7cmV0dXJuWyJjb2RpY29uIiwiY29kaWNvbi0iK3RoaXMuaWRdfWdldCBjc3NTZWxlY3Rvcigpe3JldHVybiIuY29kaWNvbi5jb2RpY29uLSIrdGhpcy5pZH1zdGF0aWMgZ2V0QWxsKCl7cmV0dXJuIEJ0Ll9hbGxDb2RpY29uc319QnQuX2FsbENvZGljb25zPVtdLEJ0LmFkZD1uZXcgQnQoImFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MCJ9KSxCdC5wbHVzPW5ldyBCdCgicGx1cyIsQnQuYWRkLmRlZmluaXRpb24pLEJ0Lmdpc3ROZXc9bmV3IEJ0KCJnaXN0LW5ldyIsQnQuYWRkLmRlZmluaXRpb24pLEJ0LnJlcG9DcmVhdGU9bmV3IEJ0KCJyZXBvLWNyZWF0ZSIsQnQuYWRkLmRlZmluaXRpb24pLEJ0LmxpZ2h0YnVsYj1uZXcgQnQoImxpZ2h0YnVsYiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MSJ9KSxCdC5saWdodEJ1bGI9bmV3IEJ0KCJsaWdodC1idWxiIix7Zm9udENoYXJhY3RlcjoiXFxlYTYxIn0pLEJ0LnJlcG89bmV3IEJ0KCJyZXBvIix7Zm9udENoYXJhY3RlcjoiXFxlYTYyIn0pLEJ0LnJlcG9EZWxldGU9bmV3IEJ0KCJyZXBvLWRlbGV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MiJ9KSxCdC5naXN0Rm9yaz1uZXcgQnQoImdpc3QtZm9yayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MyJ9KSxCdC5yZXBvRm9ya2VkPW5ldyBCdCgicmVwby1mb3JrZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjMifSksQnQuZ2l0UHVsbFJlcXVlc3Q9bmV3IEJ0KCJnaXQtcHVsbC1yZXF1ZXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTY0In0pLEJ0LmdpdFB1bGxSZXF1ZXN0QWJhbmRvbmVkPW5ldyBCdCgiZ2l0LXB1bGwtcmVxdWVzdC1hYmFuZG9uZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjQifSksQnQucmVjb3JkS2V5cz1uZXcgQnQoInJlY29yZC1rZXlzIix7Zm9udENoYXJhY3RlcjoiXFxlYTY1In0pLEJ0LmtleWJvYXJkPW5ldyBCdCgia2V5Ym9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjUifSksQnQudGFnPW5ldyBCdCgidGFnIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLEJ0LnRhZ0FkZD1uZXcgQnQoInRhZy1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjYifSksQnQudGFnUmVtb3ZlPW5ldyBCdCgidGFnLXJlbW92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NiJ9KSxCdC5wZXJzb249bmV3IEJ0KCJwZXJzb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksQnQucGVyc29uRm9sbG93PW5ldyBCdCgicGVyc29uLWZvbGxvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxCdC5wZXJzb25PdXRsaW5lPW5ldyBCdCgicGVyc29uLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksQnQucGVyc29uRmlsbGVkPW5ldyBCdCgicGVyc29uLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxCdC5naXRCcmFuY2g9bmV3IEJ0KCJnaXQtYnJhbmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLEJ0LmdpdEJyYW5jaENyZWF0ZT1uZXcgQnQoImdpdC1icmFuY2gtY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLEJ0LmdpdEJyYW5jaERlbGV0ZT1uZXcgQnQoImdpdC1icmFuY2gtZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLEJ0LnNvdXJjZUNvbnRyb2w9bmV3IEJ0KCJzb3VyY2UtY29udHJvbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxCdC5taXJyb3I9bmV3IEJ0KCJtaXJyb3IiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjkifSksQnQubWlycm9yUHVibGljPW5ldyBCdCgibWlycm9yLXB1YmxpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OSJ9KSxCdC5zdGFyPW5ldyBCdCgic3RhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxCdC5zdGFyQWRkPW5ldyBCdCgic3Rhci1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksQnQuc3RhckRlbGV0ZT1uZXcgQnQoInN0YXItZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLEJ0LnN0YXJFbXB0eT1uZXcgQnQoInN0YXItZW1wdHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksQnQuY29tbWVudD1uZXcgQnQoImNvbW1lbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmIifSksQnQuY29tbWVudEFkZD1uZXcgQnQoImNvbW1lbnQtYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTZiIn0pLEJ0LmFsZXJ0PW5ldyBCdCgiYWxlcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmMifSksQnQud2FybmluZz1uZXcgQnQoIndhcm5pbmciLHtmb250Q2hhcmFjdGVyOiJcXGVhNmMifSksQnQuc2VhcmNoPW5ldyBCdCgic2VhcmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTZkIn0pLEJ0LnNlYXJjaFNhdmU9bmV3IEJ0KCJzZWFyY2gtc2F2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZCJ9KSxCdC5sb2dPdXQ9bmV3IEJ0KCJsb2ctb3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZlIn0pLEJ0LnNpZ25PdXQ9bmV3IEJ0KCJzaWduLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZSJ9KSxCdC5sb2dJbj1uZXcgQnQoImxvZy1pbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZiJ9KSxCdC5zaWduSW49bmV3IEJ0KCJzaWduLWluIix7Zm9udENoYXJhY3RlcjoiXFxlYTZmIn0pLEJ0LmV5ZT1uZXcgQnQoImV5ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxCdC5leWVVbndhdGNoPW5ldyBCdCgiZXllLXVud2F0Y2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNzAifSksQnQuZXllV2F0Y2g9bmV3IEJ0KCJleWUtd2F0Y2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNzAifSksQnQuY2lyY2xlRmlsbGVkPW5ldyBCdCgiY2lyY2xlLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxCdC5wcmltaXRpdmVEb3Q9bmV3IEJ0KCJwcmltaXRpdmUtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LmNsb3NlRGlydHk9bmV3IEJ0KCJjbG9zZS1kaXJ0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LmRlYnVnQnJlYWtwb2ludERpc2FibGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxCdC5kZWJ1Z0hpbnQ9bmV3IEJ0KCJkZWJ1Zy1oaW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LnByaW1pdGl2ZVNxdWFyZT1uZXcgQnQoInByaW1pdGl2ZS1zcXVhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzIifSksQnQuZWRpdD1uZXcgQnQoImVkaXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzMifSksQnQucGVuY2lsPW5ldyBCdCgicGVuY2lsIix7Zm9udENoYXJhY3RlcjoiXFxlYTczIn0pLEJ0LmluZm89bmV3IEJ0KCJpbmZvIix7Zm9udENoYXJhY3RlcjoiXFxlYTc0In0pLEJ0Lmlzc3VlT3BlbmVkPW5ldyBCdCgiaXNzdWUtb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTc0In0pLEJ0Lmdpc3RQcml2YXRlPW5ldyBCdCgiZ2lzdC1wcml2YXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc1In0pLEJ0LmdpdEZvcmtQcml2YXRlPW5ldyBCdCgiZ2l0LWZvcmstcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxCdC5sb2NrPW5ldyBCdCgibG9jayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxCdC5taXJyb3JQcml2YXRlPW5ldyBCdCgibWlycm9yLXByaXZhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksQnQuY2xvc2U9bmV3IEJ0KCJjbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxCdC5yZW1vdmVDbG9zZT1uZXcgQnQoInJlbW92ZS1jbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxCdC54PW5ldyBCdCgieCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxCdC5yZXBvU3luYz1uZXcgQnQoInJlcG8tc3luYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NyJ9KSxCdC5zeW5jPW5ldyBCdCgic3luYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NyJ9KSxCdC5jbG9uZT1uZXcgQnQoImNsb25lIix7Zm9udENoYXJhY3RlcjoiXFxlYTc4In0pLEJ0LmRlc2t0b3BEb3dubG9hZD1uZXcgQnQoImRlc2t0b3AtZG93bmxvYWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzgifSksQnQuYmVha2VyPW5ldyBCdCgiYmVha2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYTc5In0pLEJ0Lm1pY3Jvc2NvcGU9bmV3IEJ0KCJtaWNyb3Njb3BlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc5In0pLEJ0LnZtPW5ldyBCdCgidm0iLHtmb250Q2hhcmFjdGVyOiJcXGVhN2EifSksQnQuZGV2aWNlRGVza3RvcD1uZXcgQnQoImRldmljZS1kZXNrdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYTdhIn0pLEJ0LmZpbGU9bmV3IEJ0KCJmaWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTdiIn0pLEJ0LmZpbGVUZXh0PW5ldyBCdCgiZmlsZS10ZXh0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdiIn0pLEJ0Lm1vcmU9bmV3IEJ0KCJtb3JlIix7Zm9udENoYXJhY3RlcjoiXFxlYTdjIn0pLEJ0LmVsbGlwc2lzPW5ldyBCdCgiZWxsaXBzaXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2MifSksQnQua2ViYWJIb3Jpem9udGFsPW5ldyBCdCgia2ViYWItaG9yaXpvbnRhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxCdC5tYWlsUmVwbHk9bmV3IEJ0KCJtYWlsLXJlcGx5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdkIn0pLEJ0LnJlcGx5PW5ldyBCdCgicmVwbHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2QifSksQnQub3JnYW5pemF0aW9uPW5ldyBCdCgib3JnYW5pemF0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLEJ0Lm9yZ2FuaXphdGlvbkZpbGxlZD1uZXcgQnQoIm9yZ2FuaXphdGlvbi1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2UifSksQnQub3JnYW5pemF0aW9uT3V0bGluZT1uZXcgQnQoIm9yZ2FuaXphdGlvbi1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLEJ0Lm5ld0ZpbGU9bmV3IEJ0KCJuZXctZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZiJ9KSxCdC5maWxlQWRkPW5ldyBCdCgiZmlsZS1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2YifSksQnQubmV3Rm9sZGVyPW5ldyBCdCgibmV3LWZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MCJ9KSxCdC5maWxlRGlyZWN0b3J5Q3JlYXRlPW5ldyBCdCgiZmlsZS1kaXJlY3RvcnktY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTgwIn0pLEJ0LnRyYXNoPW5ldyBCdCgidHJhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVhODEifSksQnQudHJhc2hjYW49bmV3IEJ0KCJ0cmFzaGNhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MSJ9KSxCdC5oaXN0b3J5PW5ldyBCdCgiaGlzdG9yeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MiJ9KSxCdC5jbG9jaz1uZXcgQnQoImNsb2NrIix7Zm9udENoYXJhY3RlcjoiXFxlYTgyIn0pLEJ0LmZvbGRlcj1uZXcgQnQoImZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MyJ9KSxCdC5maWxlRGlyZWN0b3J5PW5ldyBCdCgiZmlsZS1kaXJlY3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksQnQuc3ltYm9sRm9sZGVyPW5ldyBCdCgic3ltYm9sLWZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MyJ9KSxCdC5sb2dvR2l0aHViPW5ldyBCdCgibG9nby1naXRodWIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODQifSksQnQubWFya0dpdGh1Yj1uZXcgQnQoIm1hcmstZ2l0aHViIix7Zm9udENoYXJhY3RlcjoiXFxlYTg0In0pLEJ0LmdpdGh1Yj1uZXcgQnQoImdpdGh1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NCJ9KSxCdC50ZXJtaW5hbD1uZXcgQnQoInRlcm1pbmFsIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLEJ0LmNvbnNvbGU9bmV3IEJ0KCJjb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLEJ0LnJlcGw9bmV3IEJ0KCJyZXBsIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLEJ0LnphcD1uZXcgQnQoInphcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NiJ9KSxCdC5zeW1ib2xFdmVudD1uZXcgQnQoInN5bWJvbC1ldmVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NiJ9KSxCdC5lcnJvcj1uZXcgQnQoImVycm9yIix7Zm9udENoYXJhY3RlcjoiXFxlYTg3In0pLEJ0LnN0b3A9bmV3IEJ0KCJzdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYTg3In0pLEJ0LnZhcmlhYmxlPW5ldyBCdCgidmFyaWFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODgifSksQnQuc3ltYm9sVmFyaWFibGU9bmV3IEJ0KCJzeW1ib2wtdmFyaWFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODgifSksQnQuYXJyYXk9bmV3IEJ0KCJhcnJheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YSJ9KSxCdC5zeW1ib2xBcnJheT1uZXcgQnQoInN5bWJvbC1hcnJheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YSJ9KSxCdC5zeW1ib2xNb2R1bGU9bmV3IEJ0KCJzeW1ib2wtbW9kdWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLEJ0LnN5bWJvbFBhY2thZ2U9bmV3IEJ0KCJzeW1ib2wtcGFja2FnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxCdC5zeW1ib2xOYW1lc3BhY2U9bmV3IEJ0KCJzeW1ib2wtbmFtZXNwYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLEJ0LnN5bWJvbE9iamVjdD1uZXcgQnQoInN5bWJvbC1vYmplY3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGIifSksQnQuc3ltYm9sTWV0aG9kPW5ldyBCdCgic3ltYm9sLW1ldGhvZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxCdC5zeW1ib2xGdW5jdGlvbj1uZXcgQnQoInN5bWJvbC1mdW5jdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxCdC5zeW1ib2xDb25zdHJ1Y3Rvcj1uZXcgQnQoInN5bWJvbC1jb25zdHJ1Y3RvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxCdC5zeW1ib2xCb29sZWFuPW5ldyBCdCgic3ltYm9sLWJvb2xlYW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhOGYifSksQnQuc3ltYm9sTnVsbD1uZXcgQnQoInN5bWJvbC1udWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYThmIn0pLEJ0LnN5bWJvbE51bWVyaWM9bmV3IEJ0KCJzeW1ib2wtbnVtZXJpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MCJ9KSxCdC5zeW1ib2xOdW1iZXI9bmV3IEJ0KCJzeW1ib2wtbnVtYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTkwIn0pLEJ0LnN5bWJvbFN0cnVjdHVyZT1uZXcgQnQoInN5bWJvbC1zdHJ1Y3R1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTEifSksQnQuc3ltYm9sU3RydWN0PW5ldyBCdCgic3ltYm9sLXN0cnVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MSJ9KSxCdC5zeW1ib2xQYXJhbWV0ZXI9bmV3IEJ0KCJzeW1ib2wtcGFyYW1ldGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTkyIn0pLEJ0LnN5bWJvbFR5cGVQYXJhbWV0ZXI9bmV3IEJ0KCJzeW1ib2wtdHlwZS1wYXJhbWV0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTIifSksQnQuc3ltYm9sS2V5PW5ldyBCdCgic3ltYm9sLWtleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MyJ9KSxCdC5zeW1ib2xUZXh0PW5ldyBCdCgic3ltYm9sLXRleHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTMifSksQnQuc3ltYm9sUmVmZXJlbmNlPW5ldyBCdCgic3ltYm9sLXJlZmVyZW5jZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NCJ9KSxCdC5nb1RvRmlsZT1uZXcgQnQoImdvLXRvLWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTQifSksQnQuc3ltYm9sRW51bT1uZXcgQnQoInN5bWJvbC1lbnVtIix7Zm9udENoYXJhY3RlcjoiXFxlYTk1In0pLEJ0LnN5bWJvbFZhbHVlPW5ldyBCdCgic3ltYm9sLXZhbHVlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk1In0pLEJ0LnN5bWJvbFJ1bGVyPW5ldyBCdCgic3ltYm9sLXJ1bGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTk2In0pLEJ0LnN5bWJvbFVuaXQ9bmV3IEJ0KCJzeW1ib2wtdW5pdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NiJ9KSxCdC5hY3RpdmF0ZUJyZWFrcG9pbnRzPW5ldyBCdCgiYWN0aXZhdGUtYnJlYWtwb2ludHMiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTcifSksQnQuYXJjaGl2ZT1uZXcgQnQoImFyY2hpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTgifSksQnQuYXJyb3dCb3RoPW5ldyBCdCgiYXJyb3ctYm90aCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5OSJ9KSxCdC5hcnJvd0Rvd249bmV3IEJ0KCJhcnJvdy1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYTlhIn0pLEJ0LmFycm93TGVmdD1uZXcgQnQoImFycm93LWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWIifSksQnQuYXJyb3dSaWdodD1uZXcgQnQoImFycm93LXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTljIn0pLEJ0LmFycm93U21hbGxEb3duPW5ldyBCdCgiYXJyb3ctc21hbGwtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZCJ9KSxCdC5hcnJvd1NtYWxsTGVmdD1uZXcgQnQoImFycm93LXNtYWxsLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWUifSksQnQuYXJyb3dTbWFsbFJpZ2h0PW5ldyBCdCgiYXJyb3ctc21hbGwtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWYifSksQnQuYXJyb3dTbWFsbFVwPW5ldyBCdCgiYXJyb3ctc21hbGwtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTAifSksQnQuYXJyb3dVcD1uZXcgQnQoImFycm93LXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWExIn0pLEJ0LmJlbGw9bmV3IEJ0KCJiZWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWEyIn0pLEJ0LmJvbGQ9bmV3IEJ0KCJib2xkIix7Zm9udENoYXJhY3RlcjoiXFxlYWEzIn0pLEJ0LmJvb2s9bmV3IEJ0KCJib29rIix7Zm9udENoYXJhY3RlcjoiXFxlYWE0In0pLEJ0LmJvb2ttYXJrPW5ldyBCdCgiYm9va21hcmsiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTUifSksQnQuZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxVbnZlcmlmaWVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE2In0pLEJ0LmRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNyJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNyJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnREYXRhVW52ZXJpZmllZD1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE4In0pLEJ0LmRlYnVnQnJlYWtwb2ludERhdGE9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWRhdGEiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTkifSksQnQuZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1kYXRhLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE5In0pLEJ0LmRlYnVnQnJlYWtwb2ludExvZ1VudmVyaWZpZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWxvZy11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWFhIn0pLEJ0LmRlYnVnQnJlYWtwb2ludExvZz1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtbG9nIix7Zm9udENoYXJhY3RlcjoiXFxlYWFiIn0pLEJ0LmRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1sb2ctZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWIifSksQnQuYnJpZWZjYXNlPW5ldyBCdCgiYnJpZWZjYXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYWFjIn0pLEJ0LmJyb2FkY2FzdD1uZXcgQnQoImJyb2FkY2FzdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhZCJ9KSxCdC5icm93c2VyPW5ldyBCdCgiYnJvd3NlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhZSJ9KSxCdC5idWc9bmV3IEJ0KCJidWciLHtmb250Q2hhcmFjdGVyOiJcXGVhYWYifSksQnQuY2FsZW5kYXI9bmV3IEJ0KCJjYWxlbmRhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMCJ9KSxCdC5jYXNlU2Vuc2l0aXZlPW5ldyBCdCgiY2FzZS1zZW5zaXRpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjEifSksQnQuY2hlY2s9bmV3IEJ0KCJjaGVjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMiJ9KSxCdC5jaGVja2xpc3Q9bmV3IEJ0KCJjaGVja2xpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjMifSksQnQuY2hldnJvbkRvd249bmV3IEJ0KCJjaGV2cm9uLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhYjQifSksQnQuZHJvcERvd25CdXR0b249bmV3IEJ0KCJkcm9wLWRvd24tYnV0dG9uIixCdC5jaGV2cm9uRG93bi5kZWZpbml0aW9uKSxCdC5jaGV2cm9uTGVmdD1uZXcgQnQoImNoZXZyb24tbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNSJ9KSxCdC5jaGV2cm9uUmlnaHQ9bmV3IEJ0KCJjaGV2cm9uLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWI2In0pLEJ0LmNoZXZyb25VcD1uZXcgQnQoImNoZXZyb24tdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjcifSksQnQuY2hyb21lQ2xvc2U9bmV3IEJ0KCJjaHJvbWUtY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjgifSksQnQuY2hyb21lTWF4aW1pemU9bmV3IEJ0KCJjaHJvbWUtbWF4aW1pemUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjkifSksQnQuY2hyb21lTWluaW1pemU9bmV3IEJ0KCJjaHJvbWUtbWluaW1pemUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmEifSksQnQuY2hyb21lUmVzdG9yZT1uZXcgQnQoImNocm9tZS1yZXN0b3JlIix7Zm9udENoYXJhY3RlcjoiXFxlYWJiIn0pLEJ0LmNpcmNsZU91dGxpbmU9bmV3IEJ0KCJjaXJjbGUtb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYyJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnRVbnZlcmlmaWVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWJjIn0pLEJ0LmNpcmNsZVNsYXNoPW5ldyBCdCgiY2lyY2xlLXNsYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYWJkIn0pLEJ0LmNpcmN1aXRCb2FyZD1uZXcgQnQoImNpcmN1aXQtYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmUifSksQnQuY2xlYXJBbGw9bmV3IEJ0KCJjbGVhci1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmYifSksQnQuY2xpcHB5PW5ldyBCdCgiY2xpcHB5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWMwIn0pLEJ0LmNsb3NlQWxsPW5ldyBCdCgiY2xvc2UtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWMxIn0pLEJ0LmNsb3VkRG93bmxvYWQ9bmV3IEJ0KCJjbG91ZC1kb3dubG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMiJ9KSxCdC5jbG91ZFVwbG9hZD1uZXcgQnQoImNsb3VkLXVwbG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMyJ9KSxCdC5jb2RlPW5ldyBCdCgiY29kZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNCJ9KSxCdC5jb2xsYXBzZUFsbD1uZXcgQnQoImNvbGxhcHNlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNSJ9KSxCdC5jb2xvck1vZGU9bmV3IEJ0KCJjb2xvci1tb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWM2In0pLEJ0LmNvbW1lbnREaXNjdXNzaW9uPW5ldyBCdCgiY29tbWVudC1kaXNjdXNzaW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYWM3In0pLEJ0LmNvbXBhcmVDaGFuZ2VzPW5ldyBCdCgiY29tcGFyZS1jaGFuZ2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYWZkIn0pLEJ0LmNyZWRpdENhcmQ9bmV3IEJ0KCJjcmVkaXQtY2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjOSJ9KSxCdC5kYXNoPW5ldyBCdCgiZGFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjYyJ9KSxCdC5kYXNoYm9hcmQ9bmV3IEJ0KCJkYXNoYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhY2QifSksQnQuZGF0YWJhc2U9bmV3IEJ0KCJkYXRhYmFzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZSJ9KSxCdC5kZWJ1Z0NvbnRpbnVlPW5ldyBCdCgiZGVidWctY29udGludWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhY2YifSksQnQuZGVidWdEaXNjb25uZWN0PW5ldyBCdCgiZGVidWctZGlzY29ubmVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMCJ9KSxCdC5kZWJ1Z1BhdXNlPW5ldyBCdCgiZGVidWctcGF1c2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDEifSksQnQuZGVidWdSZXN0YXJ0PW5ldyBCdCgiZGVidWctcmVzdGFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMiJ9KSxCdC5kZWJ1Z1N0YXJ0PW5ldyBCdCgiZGVidWctc3RhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDMifSksQnQuZGVidWdTdGVwSW50bz1uZXcgQnQoImRlYnVnLXN0ZXAtaW50byIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNCJ9KSxCdC5kZWJ1Z1N0ZXBPdXQ9bmV3IEJ0KCJkZWJ1Zy1zdGVwLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNSJ9KSxCdC5kZWJ1Z1N0ZXBPdmVyPW5ldyBCdCgiZGVidWctc3RlcC1vdmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYWQ2In0pLEJ0LmRlYnVnU3RvcD1uZXcgQnQoImRlYnVnLXN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDcifSksQnQuZGVidWc9bmV3IEJ0KCJkZWJ1ZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkOCJ9KSxCdC5kZXZpY2VDYW1lcmFWaWRlbz1uZXcgQnQoImRldmljZS1jYW1lcmEtdmlkZW8iLHtmb250Q2hhcmFjdGVyOiJcXGVhZDkifSksQnQuZGV2aWNlQ2FtZXJhPW5ldyBCdCgiZGV2aWNlLWNhbWVyYSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYSJ9KSxCdC5kZXZpY2VNb2JpbGU9bmV3IEJ0KCJkZXZpY2UtbW9iaWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYWRiIn0pLEJ0LmRpZmZBZGRlZD1uZXcgQnQoImRpZmYtYWRkZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGMifSksQnQuZGlmZklnbm9yZWQ9bmV3IEJ0KCJkaWZmLWlnbm9yZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGQifSksQnQuZGlmZk1vZGlmaWVkPW5ldyBCdCgiZGlmZi1tb2RpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkZSJ9KSxCdC5kaWZmUmVtb3ZlZD1uZXcgQnQoImRpZmYtcmVtb3ZlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkZiJ9KSxCdC5kaWZmUmVuYW1lZD1uZXcgQnQoImRpZmYtcmVuYW1lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMCJ9KSxCdC5kaWZmPW5ldyBCdCgiZGlmZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMSJ9KSxCdC5kaXNjYXJkPW5ldyBCdCgiZGlzY2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMiJ9KSxCdC5lZGl0b3JMYXlvdXQ9bmV3IEJ0KCJlZGl0b3ItbGF5b3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWUzIn0pLEJ0LmVtcHR5V2luZG93PW5ldyBCdCgiZW1wdHktd2luZG93Iix7Zm9udENoYXJhY3RlcjoiXFxlYWU0In0pLEJ0LmV4Y2x1ZGU9bmV3IEJ0KCJleGNsdWRlIix7Zm9udENoYXJhY3RlcjoiXFxlYWU1In0pLEJ0LmV4dGVuc2lvbnM9bmV3IEJ0KCJleHRlbnNpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYWU2In0pLEJ0LmV5ZUNsb3NlZD1uZXcgQnQoImV5ZS1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTcifSksQnQuZmlsZUJpbmFyeT1uZXcgQnQoImZpbGUtYmluYXJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWU4In0pLEJ0LmZpbGVDb2RlPW5ldyBCdCgiZmlsZS1jb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWU5In0pLEJ0LmZpbGVNZWRpYT1uZXcgQnQoImZpbGUtbWVkaWEiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWEifSksQnQuZmlsZVBkZj1uZXcgQnQoImZpbGUtcGRmIix7Zm9udENoYXJhY3RlcjoiXFxlYWViIn0pLEJ0LmZpbGVTdWJtb2R1bGU9bmV3IEJ0KCJmaWxlLXN1Ym1vZHVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlYyJ9KSxCdC5maWxlU3ltbGlua0RpcmVjdG9yeT1uZXcgQnQoImZpbGUtc3ltbGluay1kaXJlY3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWQifSksQnQuZmlsZVN5bWxpbmtGaWxlPW5ldyBCdCgiZmlsZS1zeW1saW5rLWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWUifSksQnQuZmlsZVppcD1uZXcgQnQoImZpbGUtemlwIix7Zm9udENoYXJhY3RlcjoiXFxlYWVmIn0pLEJ0LmZpbGVzPW5ldyBCdCgiZmlsZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjAifSksQnQuZmlsdGVyPW5ldyBCdCgiZmlsdGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYWYxIn0pLEJ0LmZsYW1lPW5ldyBCdCgiZmxhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjIifSksQnQuZm9sZERvd249bmV3IEJ0KCJmb2xkLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhZjMifSksQnQuZm9sZFVwPW5ldyBCdCgiZm9sZC11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNCJ9KSxCdC5mb2xkPW5ldyBCdCgiZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNSJ9KSxCdC5mb2xkZXJBY3RpdmU9bmV3IEJ0KCJmb2xkZXItYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYWY2In0pLEJ0LmZvbGRlck9wZW5lZD1uZXcgQnQoImZvbGRlci1vcGVuZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjcifSksQnQuZ2Vhcj1uZXcgQnQoImdlYXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjgifSksQnQuZ2lmdD1uZXcgQnQoImdpZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjkifSksQnQuZ2lzdFNlY3JldD1uZXcgQnQoImdpc3Qtc2VjcmV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZhIn0pLEJ0Lmdpc3Q9bmV3IEJ0KCJnaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZiIn0pLEJ0LmdpdENvbW1pdD1uZXcgQnQoImdpdC1jb21taXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmMifSksQnQuZ2l0Q29tcGFyZT1uZXcgQnQoImdpdC1jb21wYXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYWZkIn0pLEJ0LmdpdE1lcmdlPW5ldyBCdCgiZ2l0LW1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYWZlIn0pLEJ0LmdpdGh1YkFjdGlvbj1uZXcgQnQoImdpdGh1Yi1hY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhZmYifSksQnQuZ2l0aHViQWx0PW5ldyBCdCgiZ2l0aHViLWFsdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMCJ9KSxCdC5nbG9iZT1uZXcgQnQoImdsb2JlIix7Zm9udENoYXJhY3RlcjoiXFxlYjAxIn0pLEJ0LmdyYWJiZXI9bmV3IEJ0KCJncmFiYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjAyIn0pLEJ0LmdyYXBoPW5ldyBCdCgiZ3JhcGgiLHtmb250Q2hhcmFjdGVyOiJcXGViMDMifSksQnQuZ3JpcHBlcj1uZXcgQnQoImdyaXBwZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMDQifSksQnQuaGVhcnQ9bmV3IEJ0KCJoZWFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNSJ9KSxCdC5ob21lPW5ldyBCdCgiaG9tZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNiJ9KSxCdC5ob3Jpem9udGFsUnVsZT1uZXcgQnQoImhvcml6b250YWwtcnVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNyJ9KSxCdC5odWJvdD1uZXcgQnQoImh1Ym90Iix7Zm9udENoYXJhY3RlcjoiXFxlYjA4In0pLEJ0LmluYm94PW5ldyBCdCgiaW5ib3giLHtmb250Q2hhcmFjdGVyOiJcXGViMDkifSksQnQuaXNzdWVDbG9zZWQ9bmV3IEJ0KCJpc3N1ZS1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTQifSksQnQuaXNzdWVSZW9wZW5lZD1uZXcgQnQoImlzc3VlLXJlb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjBiIn0pLEJ0Lmlzc3Vlcz1uZXcgQnQoImlzc3VlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwYyJ9KSxCdC5pdGFsaWM9bmV3IEJ0KCJpdGFsaWMiLHtmb250Q2hhcmFjdGVyOiJcXGViMGQifSksQnQuamVyc2V5PW5ldyBCdCgiamVyc2V5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjBlIn0pLEJ0Lmpzb249bmV3IEJ0KCJqc29uIix7Zm9udENoYXJhY3RlcjoiXFxlYjBmIn0pLEJ0LmtlYmFiVmVydGljYWw9bmV3IEJ0KCJrZWJhYi12ZXJ0aWNhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMCJ9KSxCdC5rZXk9bmV3IEJ0KCJrZXkiLHtmb250Q2hhcmFjdGVyOiJcXGViMTEifSksQnQubGF3PW5ldyBCdCgibGF3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjEyIn0pLEJ0LmxpZ2h0YnVsYkF1dG9maXg9bmV3IEJ0KCJsaWdodGJ1bGItYXV0b2ZpeCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMyJ9KSxCdC5saW5rRXh0ZXJuYWw9bmV3IEJ0KCJsaW5rLWV4dGVybmFsIix7Zm9udENoYXJhY3RlcjoiXFxlYjE0In0pLEJ0Lmxpbms9bmV3IEJ0KCJsaW5rIix7Zm9udENoYXJhY3RlcjoiXFxlYjE1In0pLEJ0Lmxpc3RPcmRlcmVkPW5ldyBCdCgibGlzdC1vcmRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjE2In0pLEJ0Lmxpc3RVbm9yZGVyZWQ9bmV3IEJ0KCJsaXN0LXVub3JkZXJlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNyJ9KSxCdC5saXZlU2hhcmU9bmV3IEJ0KCJsaXZlLXNoYXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYjE4In0pLEJ0LmxvYWRpbmc9bmV3IEJ0KCJsb2FkaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjE5In0pLEJ0LmxvY2F0aW9uPW5ldyBCdCgibG9jYXRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWEifSksQnQubWFpbFJlYWQ9bmV3IEJ0KCJtYWlsLXJlYWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMWIifSksQnQubWFpbD1uZXcgQnQoIm1haWwiLHtmb250Q2hhcmFjdGVyOiJcXGViMWMifSksQnQubWFya2Rvd249bmV3IEJ0KCJtYXJrZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxZCJ9KSxCdC5tZWdhcGhvbmU9bmV3IEJ0KCJtZWdhcGhvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMWUifSksQnQubWVudGlvbj1uZXcgQnQoIm1lbnRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWYifSksQnQubWlsZXN0b25lPW5ldyBCdCgibWlsZXN0b25lIix7Zm9udENoYXJhY3RlcjoiXFxlYjIwIn0pLEJ0Lm1vcnRhckJvYXJkPW5ldyBCdCgibW9ydGFyLWJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYjIxIn0pLEJ0Lm1vdmU9bmV3IEJ0KCJtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjIyIn0pLEJ0Lm11bHRpcGxlV2luZG93cz1uZXcgQnQoIm11bHRpcGxlLXdpbmRvd3MiLHtmb250Q2hhcmFjdGVyOiJcXGViMjMifSksQnQubXV0ZT1uZXcgQnQoIm11dGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjQifSksQnQubm9OZXdsaW5lPW5ldyBCdCgibm8tbmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNSJ9KSxCdC5ub3RlPW5ldyBCdCgibm90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNiJ9KSxCdC5vY3RvZmFjZT1uZXcgQnQoIm9jdG9mYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjI3In0pLEJ0Lm9wZW5QcmV2aWV3PW5ldyBCdCgib3Blbi1wcmV2aWV3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjI4In0pLEJ0LnBhY2thZ2VfPW5ldyBCdCgicGFja2FnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyOSJ9KSxCdC5wYWludGNhbj1uZXcgQnQoInBhaW50Y2FuIix7Zm9udENoYXJhY3RlcjoiXFxlYjJhIn0pLEJ0LnBpbj1uZXcgQnQoInBpbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYiJ9KSxCdC5wbGF5PW5ldyBCdCgicGxheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYyJ9KSxCdC5ydW49bmV3IEJ0KCJydW4iLHtmb250Q2hhcmFjdGVyOiJcXGViMmMifSksQnQucGx1Zz1uZXcgQnQoInBsdWciLHtmb250Q2hhcmFjdGVyOiJcXGViMmQifSksQnQucHJlc2VydmVDYXNlPW5ldyBCdCgicHJlc2VydmUtY2FzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyZSJ9KSxCdC5wcmV2aWV3PW5ldyBCdCgicHJldmlldyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyZiJ9KSxCdC5wcm9qZWN0PW5ldyBCdCgicHJvamVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMCJ9KSxCdC5wdWxzZT1uZXcgQnQoInB1bHNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjMxIn0pLEJ0LnF1ZXN0aW9uPW5ldyBCdCgicXVlc3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMzIifSksQnQucXVvdGU9bmV3IEJ0KCJxdW90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMyJ9KSxCdC5yYWRpb1Rvd2VyPW5ldyBCdCgicmFkaW8tdG93ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMzQifSksQnQucmVhY3Rpb25zPW5ldyBCdCgicmVhY3Rpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYjM1In0pLEJ0LnJlZmVyZW5jZXM9bmV3IEJ0KCJyZWZlcmVuY2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYjM2In0pLEJ0LnJlZnJlc2g9bmV3IEJ0KCJyZWZyZXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjM3In0pLEJ0LnJlZ2V4PW5ldyBCdCgicmVnZXgiLHtmb250Q2hhcmFjdGVyOiJcXGViMzgifSksQnQucmVtb3RlRXhwbG9yZXI9bmV3IEJ0KCJyZW1vdGUtZXhwbG9yZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMzkifSksQnQucmVtb3RlPW5ldyBCdCgicmVtb3RlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNhIn0pLEJ0LnJlbW92ZT1uZXcgQnQoInJlbW92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzYiJ9KSxCdC5yZXBsYWNlQWxsPW5ldyBCdCgicmVwbGFjZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViM2MifSksQnQucmVwbGFjZT1uZXcgQnQoInJlcGxhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViM2QifSksQnQucmVwb0Nsb25lPW5ldyBCdCgicmVwby1jbG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzZSJ9KSxCdC5yZXBvRm9yY2VQdXNoPW5ldyBCdCgicmVwby1mb3JjZS1wdXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjNmIn0pLEJ0LnJlcG9QdWxsPW5ldyBCdCgicmVwby1wdWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjQwIn0pLEJ0LnJlcG9QdXNoPW5ldyBCdCgicmVwby1wdXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjQxIn0pLEJ0LnJlcG9ydD1uZXcgQnQoInJlcG9ydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MiJ9KSxCdC5yZXF1ZXN0Q2hhbmdlcz1uZXcgQnQoInJlcXVlc3QtY2hhbmdlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MyJ9KSxCdC5yb2NrZXQ9bmV3IEJ0KCJyb2NrZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViNDQifSksQnQucm9vdEZvbGRlck9wZW5lZD1uZXcgQnQoInJvb3QtZm9sZGVyLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NSJ9KSxCdC5yb290Rm9sZGVyPW5ldyBCdCgicm9vdC1mb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNDYifSksQnQucnNzPW5ldyBCdCgicnNzIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ3In0pLEJ0LnJ1Ynk9bmV3IEJ0KCJydWJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjQ4In0pLEJ0LnNhdmVBbGw9bmV3IEJ0KCJzYXZlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0OSJ9KSxCdC5zYXZlQXM9bmV3IEJ0KCJzYXZlLWFzIix7Zm9udENoYXJhY3RlcjoiXFxlYjRhIn0pLEJ0LnNhdmU9bmV3IEJ0KCJzYXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjRiIn0pLEJ0LnNjcmVlbkZ1bGw9bmV3IEJ0KCJzY3JlZW4tZnVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0YyJ9KSxCdC5zY3JlZW5Ob3JtYWw9bmV3IEJ0KCJzY3JlZW4tbm9ybWFsIix7Zm9udENoYXJhY3RlcjoiXFxlYjRkIn0pLEJ0LnNlYXJjaFN0b3A9bmV3IEJ0KCJzZWFyY2gtc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0ZSJ9KSxCdC5zZXJ2ZXI9bmV3IEJ0KCJzZXJ2ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNTAifSksQnQuc2V0dGluZ3NHZWFyPW5ldyBCdCgic2V0dGluZ3MtZ2VhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MSJ9KSxCdC5zZXR0aW5ncz1uZXcgQnQoInNldHRpbmdzIix7Zm9udENoYXJhY3RlcjoiXFxlYjUyIn0pLEJ0LnNoaWVsZD1uZXcgQnQoInNoaWVsZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MyJ9KSxCdC5zbWlsZXk9bmV3IEJ0KCJzbWlsZXkiLHtmb250Q2hhcmFjdGVyOiJcXGViNTQifSksQnQuc29ydFByZWNlZGVuY2U9bmV3IEJ0KCJzb3J0LXByZWNlZGVuY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViNTUifSksQnQuc3BsaXRIb3Jpem9udGFsPW5ldyBCdCgic3BsaXQtaG9yaXpvbnRhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NiJ9KSxCdC5zcGxpdFZlcnRpY2FsPW5ldyBCdCgic3BsaXQtdmVydGljYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTcifSksQnQuc3F1aXJyZWw9bmV3IEJ0KCJzcXVpcnJlbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1OCJ9KSxCdC5zdGFyRnVsbD1uZXcgQnQoInN0YXItZnVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1OSJ9KSxCdC5zdGFySGFsZj1uZXcgQnQoInN0YXItaGFsZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YSJ9KSxCdC5zeW1ib2xDbGFzcz1uZXcgQnQoInN5bWJvbC1jbGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YiJ9KSxCdC5zeW1ib2xDb2xvcj1uZXcgQnQoInN5bWJvbC1jb2xvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YyJ9KSxCdC5zeW1ib2xDdXN0b21Db2xvcj1uZXcgQnQoInN5bWJvbC1jdXN0b21jb2xvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YyJ9KSxCdC5zeW1ib2xDb25zdGFudD1uZXcgQnQoInN5bWJvbC1jb25zdGFudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZCJ9KSxCdC5zeW1ib2xFbnVtTWVtYmVyPW5ldyBCdCgic3ltYm9sLWVudW0tbWVtYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjVlIn0pLEJ0LnN5bWJvbEZpZWxkPW5ldyBCdCgic3ltYm9sLWZpZWxkIix7Zm9udENoYXJhY3RlcjoiXFxlYjVmIn0pLEJ0LnN5bWJvbEZpbGU9bmV3IEJ0KCJzeW1ib2wtZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MCJ9KSxCdC5zeW1ib2xJbnRlcmZhY2U9bmV3IEJ0KCJzeW1ib2wtaW50ZXJmYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjYxIn0pLEJ0LnN5bWJvbEtleXdvcmQ9bmV3IEJ0KCJzeW1ib2wta2V5d29yZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MiJ9KSxCdC5zeW1ib2xNaXNjPW5ldyBCdCgic3ltYm9sLW1pc2MiLHtmb250Q2hhcmFjdGVyOiJcXGViNjMifSksQnQuc3ltYm9sT3BlcmF0b3I9bmV3IEJ0KCJzeW1ib2wtb3BlcmF0b3IiLHtmb250Q2hhcmFjdGVyOiJcXGViNjQifSksQnQuc3ltYm9sUHJvcGVydHk9bmV3IEJ0KCJzeW1ib2wtcHJvcGVydHkiLHtmb250Q2hhcmFjdGVyOiJcXGViNjUifSksQnQud3JlbmNoPW5ldyBCdCgid3JlbmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLEJ0LndyZW5jaFN1YmFjdGlvbj1uZXcgQnQoIndyZW5jaC1zdWJhY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViNjUifSksQnQuc3ltYm9sU25pcHBldD1uZXcgQnQoInN5bWJvbC1zbmlwcGV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjY2In0pLEJ0LnRhc2tsaXN0PW5ldyBCdCgidGFza2xpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGViNjcifSksQnQudGVsZXNjb3BlPW5ldyBCdCgidGVsZXNjb3BlIix7Zm9udENoYXJhY3RlcjoiXFxlYjY4In0pLEJ0LnRleHRTaXplPW5ldyBCdCgidGV4dC1zaXplIix7Zm9udENoYXJhY3RlcjoiXFxlYjY5In0pLEJ0LnRocmVlQmFycz1uZXcgQnQoInRocmVlLWJhcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViNmEifSksQnQudGh1bWJzZG93bj1uZXcgQnQoInRodW1ic2Rvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViNmIifSksQnQudGh1bWJzdXA9bmV3IEJ0KCJ0aHVtYnN1cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2YyJ9KSxCdC50b29scz1uZXcgQnQoInRvb2xzIix7Zm9udENoYXJhY3RlcjoiXFxlYjZkIn0pLEJ0LnRyaWFuZ2xlRG93bj1uZXcgQnQoInRyaWFuZ2xlLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViNmUifSksQnQudHJpYW5nbGVMZWZ0PW5ldyBCdCgidHJpYW5nbGUtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2ZiJ9KSxCdC50cmlhbmdsZVJpZ2h0PW5ldyBCdCgidHJpYW5nbGUtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzAifSksQnQudHJpYW5nbGVVcD1uZXcgQnQoInRyaWFuZ2xlLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYjcxIn0pLEJ0LnR3aXR0ZXI9bmV3IEJ0KCJ0d2l0dGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjcyIn0pLEJ0LnVuZm9sZD1uZXcgQnQoInVuZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MyJ9KSxCdC51bmxvY2s9bmV3IEJ0KCJ1bmxvY2siLHtmb250Q2hhcmFjdGVyOiJcXGViNzQifSksQnQudW5tdXRlPW5ldyBCdCgidW5tdXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYjc1In0pLEJ0LnVudmVyaWZpZWQ9bmV3IEJ0KCJ1bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjc2In0pLEJ0LnZlcmlmaWVkPW5ldyBCdCgidmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzcifSksQnQudmVyc2lvbnM9bmV3IEJ0KCJ2ZXJzaW9ucyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3OCJ9KSxCdC52bUFjdGl2ZT1uZXcgQnQoInZtLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3OSJ9KSxCdC52bU91dGxpbmU9bmV3IEJ0KCJ2bS1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYjdhIn0pLEJ0LnZtUnVubmluZz1uZXcgQnQoInZtLXJ1bm5pbmciLHtmb250Q2hhcmFjdGVyOiJcXGViN2IifSksQnQud2F0Y2g9bmV3IEJ0KCJ3YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YyJ9KSxCdC53aGl0ZXNwYWNlPW5ldyBCdCgid2hpdGVzcGFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZCJ9KSxCdC53aG9sZVdvcmQ9bmV3IEJ0KCJ3aG9sZS13b3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYjdlIn0pLEJ0LndpbmRvdz1uZXcgQnQoIndpbmRvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZiJ9KSxCdC53b3JkV3JhcD1uZXcgQnQoIndvcmQtd3JhcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MCJ9KSxCdC56b29tSW49bmV3IEJ0KCJ6b29tLWluIix7Zm9udENoYXJhY3RlcjoiXFxlYjgxIn0pLEJ0Lnpvb21PdXQ9bmV3IEJ0KCJ6b29tLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MiJ9KSxCdC5saXN0RmlsdGVyPW5ldyBCdCgibGlzdC1maWx0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViODMifSksQnQubGlzdEZsYXQ9bmV3IEJ0KCJsaXN0LWZsYXQiLHtmb250Q2hhcmFjdGVyOiJcXGViODQifSksQnQubGlzdFNlbGVjdGlvbj1uZXcgQnQoImxpc3Qtc2VsZWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg1In0pLEJ0LnNlbGVjdGlvbj1uZXcgQnQoInNlbGVjdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NSJ9KSxCdC5saXN0VHJlZT1uZXcgQnQoImxpc3QtdHJlZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NiJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvblVudmVyaWZpZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViODcifSksQnQuZGVidWdCcmVha3BvaW50RnVuY3Rpb249bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg4In0pLEJ0LmRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uRGlzYWJsZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjg4In0pLEJ0LmRlYnVnU3RhY2tmcmFtZUFjdGl2ZT1uZXcgQnQoImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjg5In0pLEJ0LmNpcmNsZVNtYWxsRmlsbGVkPW5ldyBCdCgiY2lyY2xlLXNtYWxsLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YSJ9KSxCdC5kZWJ1Z1N0YWNrZnJhbWVEb3Q9bmV3IEJ0KCJkZWJ1Zy1zdGFja2ZyYW1lLWRvdCIsQnQuY2lyY2xlU21hbGxGaWxsZWQuZGVmaW5pdGlvbiksQnQuZGVidWdTdGFja2ZyYW1lPW5ldyBCdCgiZGVidWctc3RhY2tmcmFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YiJ9KSxCdC5kZWJ1Z1N0YWNrZnJhbWVGb2N1c2VkPW5ldyBCdCgiZGVidWctc3RhY2tmcmFtZS1mb2N1c2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYjhiIn0pLEJ0LmRlYnVnQnJlYWtwb2ludFVuc3VwcG9ydGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC11bnN1cHBvcnRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YyJ9KSxCdC5zeW1ib2xTdHJpbmc9bmV3IEJ0KCJzeW1ib2wtc3RyaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjhkIn0pLEJ0LmRlYnVnUmV2ZXJzZUNvbnRpbnVlPW5ldyBCdCgiZGVidWctcmV2ZXJzZS1jb250aW51ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4ZSJ9KSxCdC5kZWJ1Z1N0ZXBCYWNrPW5ldyBCdCgiZGVidWctc3RlcC1iYWNrIix7Zm9udENoYXJhY3RlcjoiXFxlYjhmIn0pLEJ0LmRlYnVnUmVzdGFydEZyYW1lPW5ldyBCdCgiZGVidWctcmVzdGFydC1mcmFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MCJ9KSxCdC5jYWxsSW5jb21pbmc9bmV3IEJ0KCJjYWxsLWluY29taW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjkyIn0pLEJ0LmNhbGxPdXRnb2luZz1uZXcgQnQoImNhbGwtb3V0Z29pbmciLHtmb250Q2hhcmFjdGVyOiJcXGViOTMifSksQnQubWVudT1uZXcgQnQoIm1lbnUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTQifSksQnQuZXhwYW5kQWxsPW5ldyBCdCgiZXhwYW5kLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5NSJ9KSxCdC5mZWVkYmFjaz1uZXcgQnQoImZlZWRiYWNrIix7Zm9udENoYXJhY3RlcjoiXFxlYjk2In0pLEJ0Lmdyb3VwQnlSZWZUeXBlPW5ldyBCdCgiZ3JvdXAtYnktcmVmLXR5cGUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTcifSksQnQudW5ncm91cEJ5UmVmVHlwZT1uZXcgQnQoInVuZ3JvdXAtYnktcmVmLXR5cGUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTgifSksQnQuYWNjb3VudD1uZXcgQnQoImFjY291bnQiLHtmb250Q2hhcmFjdGVyOiJcXGViOTkifSksQnQuYmVsbERvdD1uZXcgQnQoImJlbGwtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYjlhIn0pLEJ0LmRlYnVnQ29uc29sZT1uZXcgQnQoImRlYnVnLWNvbnNvbGUiLHtmb250Q2hhcmFjdGVyOiJcXGViOWIifSksQnQubGlicmFyeT1uZXcgQnQoImxpYnJhcnkiLHtmb250Q2hhcmFjdGVyOiJcXGViOWMifSksQnQub3V0cHV0PW5ldyBCdCgib3V0cHV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjlkIn0pLEJ0LnJ1bkFsbD1uZXcgQnQoInJ1bi1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViOWUifSksQnQuc3luY0lnbm9yZWQ9bmV3IEJ0KCJzeW5jLWlnbm9yZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViOWYifSksQnQucGlubmVkPW5ldyBCdCgicGlubmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmEwIn0pLEJ0LmdpdGh1YkludmVydGVkPW5ldyBCdCgiZ2l0aHViLWludmVydGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmExIn0pLEJ0LmRlYnVnQWx0PW5ldyBCdCgiZGVidWctYWx0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjkxIn0pLEJ0LnNlcnZlclByb2Nlc3M9bmV3IEJ0KCJzZXJ2ZXItcHJvY2VzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMiJ9KSxCdC5zZXJ2ZXJFbnZpcm9ubWVudD1uZXcgQnQoInNlcnZlci1lbnZpcm9ubWVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMyJ9KSxCdC5wYXNzPW5ldyBCdCgicGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNCJ9KSxCdC5zdG9wQ2lyY2xlPW5ldyBCdCgic3RvcC1jaXJjbGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYTUifSksQnQucGxheUNpcmNsZT1uZXcgQnQoInBsYXktY2lyY2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYmE2In0pLEJ0LnJlY29yZD1uZXcgQnQoInJlY29yZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNyJ9KSxCdC5kZWJ1Z0FsdFNtYWxsPW5ldyBCdCgiZGVidWctYWx0LXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmE4In0pLEJ0LnZtQ29ubmVjdD1uZXcgQnQoInZtLWNvbm5lY3QiLHtmb250Q2hhcmFjdGVyOiJcXGViYTkifSksQnQuY2xvdWQ9bmV3IEJ0KCJjbG91ZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhYSJ9KSxCdC5tZXJnZT1uZXcgQnQoIm1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYmFiIn0pLEJ0LmV4cG9ydEljb249bmV3IEJ0KCJleHBvcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWMifSksQnQuZ3JhcGhMZWZ0PW5ldyBCdCgiZ3JhcGgtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhZCJ9KSxCdC5tYWduZXQ9bmV3IEJ0KCJtYWduZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWUifSksQnQubm90ZWJvb2s9bmV3IEJ0KCJub3RlYm9vayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhZiJ9KSxCdC5yZWRvPW5ldyBCdCgicmVkbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMCJ9KSxCdC5jaGVja0FsbD1uZXcgQnQoImNoZWNrLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMSJ9KSxCdC5waW5uZWREaXJ0eT1uZXcgQnQoInBpbm5lZC1kaXJ0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMiJ9KSxCdC5wYXNzRmlsbGVkPW5ldyBCdCgicGFzcy1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYjMifSksQnQuY2lyY2xlTGFyZ2VGaWxsZWQ9bmV3IEJ0KCJjaXJjbGUtbGFyZ2UtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmI0In0pLEJ0LmNpcmNsZUxhcmdlT3V0bGluZT1uZXcgQnQoImNpcmNsZS1sYXJnZS1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmI1In0pLEJ0LmNvbWJpbmU9bmV3IEJ0KCJjb21iaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmI2In0pLEJ0LmdhdGhlcj1uZXcgQnQoImdhdGhlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNiJ9KSxCdC50YWJsZT1uZXcgQnQoInRhYmxlIix7Zm9udENoYXJhY3RlcjoiXFxlYmI3In0pLEJ0LnZhcmlhYmxlR3JvdXA9bmV3IEJ0KCJ2YXJpYWJsZS1ncm91cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiOCJ9KSxCdC50eXBlSGllcmFyY2h5PW5ldyBCdCgidHlwZS1oaWVyYXJjaHkiLHtmb250Q2hhcmFjdGVyOiJcXGViYjkifSksQnQudHlwZUhpZXJhcmNoeVN1Yj1uZXcgQnQoInR5cGUtaGllcmFyY2h5LXN1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiYSJ9KSxCdC50eXBlSGllcmFyY2h5U3VwZXI9bmV3IEJ0KCJ0eXBlLWhpZXJhcmNoeS1zdXBlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiYiJ9KSxCdC5naXRQdWxsUmVxdWVzdENyZWF0ZT1uZXcgQnQoImdpdC1wdWxsLXJlcXVlc3QtY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYmJjIn0pLEJ0LnJ1bkFib3ZlPW5ldyBCdCgicnVuLWFib3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYmJkIn0pLEJ0LnJ1bkJlbG93PW5ldyBCdCgicnVuLWJlbG93Iix7Zm9udENoYXJhY3RlcjoiXFxlYmJlIn0pLEJ0Lm5vdGVib29rVGVtcGxhdGU9bmV3IEJ0KCJub3RlYm9vay10ZW1wbGF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZiJ9KSxCdC5kZWJ1Z1JlcnVuPW5ldyBCdCgiZGVidWctcmVydW4iLHtmb250Q2hhcmFjdGVyOiJcXGViYzAifSksQnQud29ya3NwYWNlVHJ1c3RlZD1uZXcgQnQoIndvcmtzcGFjZS10cnVzdGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMxIn0pLEJ0LndvcmtzcGFjZVVudHJ1c3RlZD1uZXcgQnQoIndvcmtzcGFjZS11bnRydXN0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzIifSksQnQud29ya3NwYWNlVW5zcGVjaWZpZWQ9bmV3IEJ0KCJ3b3Jrc3BhY2UtdW5zcGVjaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzMifSksQnQudGVybWluYWxDbWQ9bmV3IEJ0KCJ0ZXJtaW5hbC1jbWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzQifSksQnQudGVybWluYWxEZWJpYW49bmV3IEJ0KCJ0ZXJtaW5hbC1kZWJpYW4iLHtmb250Q2hhcmFjdGVyOiJcXGViYzUifSksQnQudGVybWluYWxMaW51eD1uZXcgQnQoInRlcm1pbmFsLWxpbnV4Iix7Zm9udENoYXJhY3RlcjoiXFxlYmM2In0pLEJ0LnRlcm1pbmFsUG93ZXJzaGVsbD1uZXcgQnQoInRlcm1pbmFsLXBvd2Vyc2hlbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViYzcifSksQnQudGVybWluYWxUbXV4PW5ldyBCdCgidGVybWluYWwtdG11eCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjOCJ9KSxCdC50ZXJtaW5hbFVidW50dT1uZXcgQnQoInRlcm1pbmFsLXVidW50dSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjOSJ9KSxCdC50ZXJtaW5hbEJhc2g9bmV3IEJ0KCJ0ZXJtaW5hbC1iYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYmNhIn0pLEJ0LmFycm93U3dhcD1uZXcgQnQoImFycm93LXN3YXAiLHtmb250Q2hhcmFjdGVyOiJcXGViY2IifSksQnQuY29weT1uZXcgQnQoImNvcHkiLHtmb250Q2hhcmFjdGVyOiJcXGViY2MifSksQnQucGVyc29uQWRkPW5ldyBCdCgicGVyc29uLWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZCJ9KSxCdC5maWx0ZXJGaWxsZWQ9bmV3IEJ0KCJmaWx0ZXItZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmNlIn0pLEJ0LndhbmQ9bmV3IEJ0KCJ3YW5kIix7Zm9udENoYXJhY3RlcjoiXFxlYmNmIn0pLEJ0LmRlYnVnTGluZUJ5TGluZT1uZXcgQnQoImRlYnVnLWxpbmUtYnktbGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMCJ9KSxCdC5pbnNwZWN0PW5ldyBCdCgiaW5zcGVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMSJ9KSxCdC5sYXllcnM9bmV3IEJ0KCJsYXllcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViZDIifSksQnQubGF5ZXJzRG90PW5ldyBCdCgibGF5ZXJzLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMyJ9KSxCdC5sYXllcnNBY3RpdmU9bmV3IEJ0KCJsYXllcnMtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ0In0pLEJ0LmNvbXBhc3M9bmV3IEJ0KCJjb21wYXNzIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ1In0pLEJ0LmNvbXBhc3NEb3Q9bmV3IEJ0KCJjb21wYXNzLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNiJ9KSxCdC5jb21wYXNzQWN0aXZlPW5ldyBCdCgiY29tcGFzcy1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDcifSksQnQuYXp1cmU9bmV3IEJ0KCJhenVyZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkOCJ9KSxCdC5pc3N1ZURyYWZ0PW5ldyBCdCgiaXNzdWUtZHJhZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZDkifSksQnQuZ2l0UHVsbFJlcXVlc3RDbG9zZWQ9bmV3IEJ0KCJnaXQtcHVsbC1yZXF1ZXN0LWNsb3NlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkYSJ9KSxCdC5naXRQdWxsUmVxdWVzdERyYWZ0PW5ldyBCdCgiZ2l0LXB1bGwtcmVxdWVzdC1kcmFmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkYiJ9KSxCdC5kZWJ1Z0FsbD1uZXcgQnQoImRlYnVnLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkYyJ9KSxCdC5kZWJ1Z0NvdmVyYWdlPW5ldyBCdCgiZGVidWctY292ZXJhZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGViZGQifSksQnQucnVuRXJyb3JzPW5ldyBCdCgicnVuLWVycm9ycyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkZSJ9KSxCdC5mb2xkZXJMaWJyYXJ5PW5ldyBCdCgiZm9sZGVyLWxpYnJhcnkiLHtmb250Q2hhcmFjdGVyOiJcXGViZGYifSksQnQuZGVidWdDb250aW51ZVNtYWxsPW5ldyBCdCgiZGVidWctY29udGludWUtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZTAifSksQnQuYmVha2VyU3RvcD1uZXcgQnQoImJlYWtlci1zdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYmUxIn0pLEJ0LmdyYXBoTGluZT1uZXcgQnQoImdyYXBoLWxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZTIifSksQnQuZ3JhcGhTY2F0dGVyPW5ldyBCdCgiZ3JhcGgtc2NhdHRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMyJ9KSxCdC5waWVDaGFydD1uZXcgQnQoInBpZS1jaGFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNCJ9KSxCdC5icmFja2V0PW5ldyBCdCgiYnJhY2tldCIsQnQuanNvbi5kZWZpbml0aW9uKSxCdC5icmFja2V0RG90PW5ldyBCdCgiYnJhY2tldC1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZTUifSksQnQuYnJhY2tldEVycm9yPW5ldyBCdCgiYnJhY2tldC1lcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNiJ9KSxCdC5sb2NrU21hbGw9bmV3IEJ0KCJsb2NrLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmU3In0pLEJ0LmF6dXJlRGV2b3BzPW5ldyBCdCgiYXp1cmUtZGV2b3BzIix7Zm9udENoYXJhY3RlcjoiXFxlYmU4In0pLEJ0LnZlcmlmaWVkRmlsbGVkPW5ldyBCdCgidmVyaWZpZWQtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmU5In0pLEJ0Lm5ld0xpbmU9bmV3IEJ0KCJuZXdsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmVhIn0pLEJ0LmxheW91dD1uZXcgQnQoImxheW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYiJ9KSxCdC5sYXlvdXRBY3Rpdml0eWJhckxlZnQ9bmV3IEJ0KCJsYXlvdXQtYWN0aXZpdHliYXItbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYyJ9KSxCdC5sYXlvdXRBY3Rpdml0eWJhclJpZ2h0PW5ldyBCdCgibGF5b3V0LWFjdGl2aXR5YmFyLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmVkIn0pLEJ0LmxheW91dFBhbmVsTGVmdD1uZXcgQnQoImxheW91dC1wYW5lbC1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmVlIn0pLEJ0LmxheW91dFBhbmVsQ2VudGVyPW5ldyBCdCgibGF5b3V0LXBhbmVsLWNlbnRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZiJ9KSxCdC5sYXlvdXRQYW5lbEp1c3RpZnk9bmV3IEJ0KCJsYXlvdXQtcGFuZWwtanVzdGlmeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMCJ9KSxCdC5sYXlvdXRQYW5lbFJpZ2h0PW5ldyBCdCgibGF5b3V0LXBhbmVsLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmYxIn0pLEJ0LmxheW91dFBhbmVsPW5ldyBCdCgibGF5b3V0LXBhbmVsIix7Zm9udENoYXJhY3RlcjoiXFxlYmYyIn0pLEJ0LmxheW91dFNpZGViYXJMZWZ0PW5ldyBCdCgibGF5b3V0LXNpZGViYXItbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMyJ9KSxCdC5sYXlvdXRTaWRlYmFyUmlnaHQ9bmV3IEJ0KCJsYXlvdXQtc2lkZWJhci1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmNCJ9KSxCdC5sYXlvdXRTdGF0dXNiYXI9bmV3IEJ0KCJsYXlvdXQtc3RhdHVzYmFyIix7Zm9udENoYXJhY3RlcjoiXFxlYmY1In0pLEJ0LmxheW91dE1lbnViYXI9bmV3IEJ0KCJsYXlvdXQtbWVudWJhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmNiJ9KSxCdC5sYXlvdXRDZW50ZXJlZD1uZXcgQnQoImxheW91dC1jZW50ZXJlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmNyJ9KSxCdC5sYXlvdXRTaWRlYmFyUmlnaHRPZmY9bmV3IEJ0KCJsYXlvdXQtc2lkZWJhci1yaWdodC1vZmYiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDAifSksQnQubGF5b3V0UGFuZWxPZmY9bmV3IEJ0KCJsYXlvdXQtcGFuZWwtb2ZmIix7Zm9udENoYXJhY3RlcjoiXFxlYzAxIn0pLEJ0LmxheW91dFNpZGViYXJMZWZ0T2ZmPW5ldyBCdCgibGF5b3V0LXNpZGViYXItbGVmdC1vZmYiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDIifSksQnQudGFyZ2V0PW5ldyBCdCgidGFyZ2V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmY4In0pLEJ0LmluZGVudD1uZXcgQnQoImluZGVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmOSJ9KSxCdC5yZWNvcmRTbWFsbD1uZXcgQnQoInJlY29yZC1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmYSJ9KSxCdC5lcnJvclNtYWxsPW5ldyBCdCgiZXJyb3Itc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZmIifSksQnQuYXJyb3dDaXJjbGVEb3duPW5ldyBCdCgiYXJyb3ctY2lyY2xlLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViZmMifSksQnQuYXJyb3dDaXJjbGVMZWZ0PW5ldyBCdCgiYXJyb3ctY2lyY2xlLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZmQifSksQnQuYXJyb3dDaXJjbGVSaWdodD1uZXcgQnQoImFycm93LWNpcmNsZS1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmZSJ9KSxCdC5hcnJvd0NpcmNsZVVwPW5ldyBCdCgiYXJyb3ctY2lyY2xlLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYmZmIn0pLEJ0LmhlYXJ0RmlsbGVkPW5ldyBCdCgiaGVhcnQtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYzA0In0pLEJ0Lm1hcD1uZXcgQnQoIm1hcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwNSJ9KSxCdC5tYXBGaWxsZWQ9bmV3IEJ0KCJtYXAtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYzA2In0pLEJ0LmNpcmNsZVNtYWxsPW5ldyBCdCgiY2lyY2xlLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYzA3In0pLEJ0LmJlbGxTbGFzaD1uZXcgQnQoImJlbGwtc2xhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVjMDgifSksQnQuYmVsbFNsYXNoRG90PW5ldyBCdCgiYmVsbC1zbGFzaC1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDkifSksQnQuY29tbWVudFVucmVzb2x2ZWQ9bmV3IEJ0KCJjb21tZW50LXVucmVzb2x2ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVjMGEifSksQnQuZ2l0UHVsbFJlcXVlc3RHb1RvQ2hhbmdlcz1uZXcgQnQoImdpdC1wdWxsLXJlcXVlc3QtZ28tdG8tY2hhbmdlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwYiJ9KSxCdC5naXRQdWxsUmVxdWVzdE5ld0NoYW5nZXM9bmV3IEJ0KCJnaXQtcHVsbC1yZXF1ZXN0LW5ldy1jaGFuZ2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYzBjIn0pLEJ0LmRpYWxvZ0Vycm9yPW5ldyBCdCgiZGlhbG9nLWVycm9yIixCdC5lcnJvci5kZWZpbml0aW9uKSxCdC5kaWFsb2dXYXJuaW5nPW5ldyBCdCgiZGlhbG9nLXdhcm5pbmciLEJ0Lndhcm5pbmcuZGVmaW5pdGlvbiksQnQuZGlhbG9nSW5mbz1uZXcgQnQoImRpYWxvZy1pbmZvIixCdC5pbmZvLmRlZmluaXRpb24pLEJ0LmRpYWxvZ0Nsb3NlPW5ldyBCdCgiZGlhbG9nLWNsb3NlIixCdC5jbG9zZS5kZWZpbml0aW9uKSxCdC50cmVlSXRlbUV4cGFuZGVkPW5ldyBCdCgidHJlZS1pdGVtLWV4cGFuZGVkIixCdC5jaGV2cm9uRG93bi5kZWZpbml0aW9uKSxCdC50cmVlRmlsdGVyT25UeXBlT249bmV3IEJ0KCJ0cmVlLWZpbHRlci1vbi10eXBlLW9uIixCdC5saXN0RmlsdGVyLmRlZmluaXRpb24pLEJ0LnRyZWVGaWx0ZXJPblR5cGVPZmY9bmV3IEJ0KCJ0cmVlLWZpbHRlci1vbi10eXBlLW9mZiIsQnQubGlzdFNlbGVjdGlvbi5kZWZpbml0aW9uKSxCdC50cmVlRmlsdGVyQ2xlYXI9bmV3IEJ0KCJ0cmVlLWZpbHRlci1jbGVhciIsQnQuY2xvc2UuZGVmaW5pdGlvbiksQnQudHJlZUl0ZW1Mb2FkaW5nPW5ldyBCdCgidHJlZS1pdGVtLWxvYWRpbmciLEJ0LmxvYWRpbmcuZGVmaW5pdGlvbiksQnQubWVudVNlbGVjdGlvbj1uZXcgQnQoIm1lbnUtc2VsZWN0aW9uIixCdC5jaGVjay5kZWZpbml0aW9uKSxCdC5tZW51U3VibWVudT1uZXcgQnQoIm1lbnUtc3VibWVudSIsQnQuY2hldnJvblJpZ2h0LmRlZmluaXRpb24pLEJ0Lm1lbnVCYXJNb3JlPW5ldyBCdCgibWVudWJhci1tb3JlIixCdC5tb3JlLmRlZmluaXRpb24pLEJ0LnNjcm9sbGJhckJ1dHRvbkxlZnQ9bmV3IEJ0KCJzY3JvbGxiYXItYnV0dG9uLWxlZnQiLEJ0LnRyaWFuZ2xlTGVmdC5kZWZpbml0aW9uKSxCdC5zY3JvbGxiYXJCdXR0b25SaWdodD1uZXcgQnQoInNjcm9sbGJhci1idXR0b24tcmlnaHQiLEJ0LnRyaWFuZ2xlUmlnaHQuZGVmaW5pdGlvbiksQnQuc2Nyb2xsYmFyQnV0dG9uVXA9bmV3IEJ0KCJzY3JvbGxiYXItYnV0dG9uLXVwIixCdC50cmlhbmdsZVVwLmRlZmluaXRpb24pLEJ0LnNjcm9sbGJhckJ1dHRvbkRvd249bmV3IEJ0KCJzY3JvbGxiYXItYnV0dG9uLWRvd24iLEJ0LnRyaWFuZ2xlRG93bi5kZWZpbml0aW9uKSxCdC50b29sQmFyTW9yZT1uZXcgQnQoInRvb2xiYXItbW9yZSIsQnQubW9yZS5kZWZpbml0aW9uKSxCdC5xdWlja0lucHV0QmFjaz1uZXcgQnQoInF1aWNrLWlucHV0LWJhY2siLEJ0LmFycm93TGVmdC5kZWZpbml0aW9uKSxmdW5jdGlvbihlKXtlLmljb25OYW1lU2VnbWVudD0iW0EtWmEtejAtOV0rIixlLmljb25OYW1lRXhwcmVzc2lvbj0iW0EtWmEtejAtOS1dKyIsZS5pY29uTW9kaWZpZXJFeHByZXNzaW9uPSJ+W0EtWmEtel0rIixlLmljb25OYW1lQ2hhcmFjdGVyPSJbQS1aYS16MC05fi1dIjtjb25zdCB0PW5ldyBSZWdFeHAoYF4oJHtlLmljb25OYW1lRXhwcmVzc2lvbn0pKCR7ZS5pY29uTW9kaWZpZXJFeHByZXNzaW9ufSk/JGApO2Z1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIEJ0KXJldHVyblsiY29kaWNvbiIsImNvZGljb24tIitlLmlkXTtjb25zdCByPXQuZXhlYyhlLmlkKTtpZighcilyZXR1cm4gbihCdC5lcnJvcik7Y29uc3RbLGksb109cixhPVsiY29kaWNvbiIsImNvZGljb24tIitpXTtyZXR1cm4gbyYmYS5wdXNoKCJjb2RpY29uLW1vZGlmaWVyLSIrby5zdWJzdHIoMSkpLGF9ZS5hc0NsYXNzTmFtZUFycmF5PW4sZS5hc0NsYXNzTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gbihlKS5qb2luKCIgIil9LGUuYXNDU1NTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4iLiIrbihlKS5qb2luKCIuIil9fShqdHx8KGp0PXt9KSk7dmFyIHF0LCR0LFd0LEh0LHp0LEd0LEp0LFh0LFp0LFl0LFF0LGVuLHRuLG5uLHJuLG9uLGFuLHNuLGNuLGxuLHVuLGhuLGZuLGRuLG1uLGduLHBuLGJuLHZuLHluLENuLHduLF9uLFNuLEFuLEVuLHhuLE5uLGtuLExuLFRuLE9uLEluLE1uLFBuLFJuLFZuLEZuLERuPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjbGFzcyBLbiBleHRlbmRzIGZ7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKCksdGhpcy5fcmVnaXN0cnk9ZSx0aGlzLl9sYW5ndWFnZUlkPXQsdGhpcy5fZmFjdG9yeT1uLHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5fcmVzb2x2ZVByb21pc2U9bnVsbCx0aGlzLl9pc1Jlc29sdmVkPSExfWdldCBpc1Jlc29sdmVkKCl7cmV0dXJuIHRoaXMuX2lzUmVzb2x2ZWR9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWQ9ITAsc3VwZXIuZGlzcG9zZSgpfXJlc29sdmUoKXtyZXR1cm4gRG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVByb21pc2V8fCh0aGlzLl9yZXNvbHZlUHJvbWlzZT10aGlzLl9jcmVhdGUoKSksdGhpcy5fcmVzb2x2ZVByb21pc2V9KSl9X2NyZWF0ZSgpe3JldHVybiBEbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZhY3RvcnkuY3JlYXRlVG9rZW5pemF0aW9uU3VwcG9ydCgpKTt0aGlzLl9pc1Jlc29sdmVkPSEwLGUmJiF0aGlzLl9pc0Rpc3Bvc2VkJiZ0aGlzLl9yZWdpc3Rlcih0aGlzLl9yZWdpc3RyeS5yZWdpc3Rlcih0aGlzLl9sYW5ndWFnZUlkLGUpKX0pKX19Y2xhc3Mgam57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuX3Rva2VuQnJhbmQ9dm9pZCAwLHRoaXMub2Zmc2V0PWUsdGhpcy50eXBlPXQsdGhpcy5sYW5ndWFnZT1ufXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMub2Zmc2V0KyIsICIrdGhpcy50eXBlKyIpIn19IWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLEJ0LnN5bWJvbE1ldGhvZCksdC5zZXQoMSxCdC5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMixCdC5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoMyxCdC5zeW1ib2xGaWVsZCksdC5zZXQoNCxCdC5zeW1ib2xWYXJpYWJsZSksdC5zZXQoNSxCdC5zeW1ib2xDbGFzcyksdC5zZXQoNixCdC5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDcsQnQuc3ltYm9sSW50ZXJmYWNlKSx0LnNldCg4LEJ0LnN5bWJvbE1vZHVsZSksdC5zZXQoOSxCdC5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoMTAsQnQuc3ltYm9sRXZlbnQpLHQuc2V0KDExLEJ0LnN5bWJvbE9wZXJhdG9yKSx0LnNldCgxMixCdC5zeW1ib2xVbml0KSx0LnNldCgxMyxCdC5zeW1ib2xWYWx1ZSksdC5zZXQoMTUsQnQuc3ltYm9sRW51bSksdC5zZXQoMTQsQnQuc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE1LEJ0LnN5bWJvbEVudW0pLHQuc2V0KDE2LEJ0LnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDE3LEJ0LnN5bWJvbEtleXdvcmQpLHQuc2V0KDI3LEJ0LnN5bWJvbFNuaXBwZXQpLHQuc2V0KDE4LEJ0LnN5bWJvbFRleHQpLHQuc2V0KDE5LEJ0LnN5bWJvbENvbG9yKSx0LnNldCgyMCxCdC5zeW1ib2xGaWxlKSx0LnNldCgyMSxCdC5zeW1ib2xSZWZlcmVuY2UpLHQuc2V0KDIyLEJ0LnN5bWJvbEN1c3RvbUNvbG9yKSx0LnNldCgyMyxCdC5zeW1ib2xGb2xkZXIpLHQuc2V0KDI0LEJ0LnN5bWJvbFR5cGVQYXJhbWV0ZXIpLHQuc2V0KDI1LEJ0LmFjY291bnQpLHQuc2V0KDI2LEJ0Lmlzc3VlcyksZS50b0ljb249ZnVuY3Rpb24oZSl7bGV0IG49dC5nZXQoZSk7cmV0dXJuIG58fChjb25zb2xlLmluZm8oIk5vIGNvZGljb24gZm91bmQgZm9yIENvbXBsZXRpb25JdGVtS2luZCAiK2UpLG49QnQuc3ltYm9sUHJvcGVydHkpLG59O2NvbnN0IG49bmV3IE1hcDtuLnNldCgibWV0aG9kIiwwKSxuLnNldCgiZnVuY3Rpb24iLDEpLG4uc2V0KCJjb25zdHJ1Y3RvciIsMiksbi5zZXQoImZpZWxkIiwzKSxuLnNldCgidmFyaWFibGUiLDQpLG4uc2V0KCJjbGFzcyIsNSksbi5zZXQoInN0cnVjdCIsNiksbi5zZXQoImludGVyZmFjZSIsNyksbi5zZXQoIm1vZHVsZSIsOCksbi5zZXQoInByb3BlcnR5Iiw5KSxuLnNldCgiZXZlbnQiLDEwKSxuLnNldCgib3BlcmF0b3IiLDExKSxuLnNldCgidW5pdCIsMTIpLG4uc2V0KCJ2YWx1ZSIsMTMpLG4uc2V0KCJjb25zdGFudCIsMTQpLG4uc2V0KCJlbnVtIiwxNSksbi5zZXQoImVudW0tbWVtYmVyIiwxNiksbi5zZXQoImVudW1NZW1iZXIiLDE2KSxuLnNldCgia2V5d29yZCIsMTcpLG4uc2V0KCJzbmlwcGV0IiwyNyksbi5zZXQoInRleHQiLDE4KSxuLnNldCgiY29sb3IiLDE5KSxuLnNldCgiZmlsZSIsMjApLG4uc2V0KCJyZWZlcmVuY2UiLDIxKSxuLnNldCgiY3VzdG9tY29sb3IiLDIyKSxuLnNldCgiZm9sZGVyIiwyMyksbi5zZXQoInR5cGUtcGFyYW1ldGVyIiwyNCksbi5zZXQoInR5cGVQYXJhbWV0ZXIiLDI0KSxuLnNldCgiYWNjb3VudCIsMjUpLG4uc2V0KCJpc3N1ZSIsMjYpLGUuZnJvbVN0cmluZz1mdW5jdGlvbihlLHQpe2xldCByPW4uZ2V0KGUpO3JldHVybiB2b2lkIDAhPT1yfHx0fHwocj05KSxyfX0ocXR8fChxdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KCR0fHwoJHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KFd0fHwoV3Q9e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifShIdHx8KEh0PXt9KSksZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3Quc2V0KDAsQnQuc3ltYm9sRmlsZSksdC5zZXQoMSxCdC5zeW1ib2xNb2R1bGUpLHQuc2V0KDIsQnQuc3ltYm9sTmFtZXNwYWNlKSx0LnNldCgzLEJ0LnN5bWJvbFBhY2thZ2UpLHQuc2V0KDQsQnQuc3ltYm9sQ2xhc3MpLHQuc2V0KDUsQnQuc3ltYm9sTWV0aG9kKSx0LnNldCg2LEJ0LnN5bWJvbFByb3BlcnR5KSx0LnNldCg3LEJ0LnN5bWJvbEZpZWxkKSx0LnNldCg4LEJ0LnN5bWJvbENvbnN0cnVjdG9yKSx0LnNldCg5LEJ0LnN5bWJvbEVudW0pLHQuc2V0KDEwLEJ0LnN5bWJvbEludGVyZmFjZSksdC5zZXQoMTEsQnQuc3ltYm9sRnVuY3Rpb24pLHQuc2V0KDEyLEJ0LnN5bWJvbFZhcmlhYmxlKSx0LnNldCgxMyxCdC5zeW1ib2xDb25zdGFudCksdC5zZXQoMTQsQnQuc3ltYm9sU3RyaW5nKSx0LnNldCgxNSxCdC5zeW1ib2xOdW1iZXIpLHQuc2V0KDE2LEJ0LnN5bWJvbEJvb2xlYW4pLHQuc2V0KDE3LEJ0LnN5bWJvbEFycmF5KSx0LnNldCgxOCxCdC5zeW1ib2xPYmplY3QpLHQuc2V0KDE5LEJ0LnN5bWJvbEtleSksdC5zZXQoMjAsQnQuc3ltYm9sTnVsbCksdC5zZXQoMjEsQnQuc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMjIsQnQuc3ltYm9sU3RydWN0KSx0LnNldCgyMyxCdC5zeW1ib2xFdmVudCksdC5zZXQoMjQsQnQuc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDI1LEJ0LnN5bWJvbFR5cGVQYXJhbWV0ZXIpLGUudG9JY29uPWZ1bmN0aW9uKGUpe2xldCBuPXQuZ2V0KGUpO3JldHVybiBufHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBTeW1ib2xLaW5kICIrZSksbj1CdC5zeW1ib2xQcm9wZXJ0eSksbn19KHp0fHwoenQ9e30pKSxmdW5jdGlvbihlKXtlLmlzPWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCJvYmplY3QiIT10eXBlb2YgZSkmJigic3RyaW5nIj09dHlwZW9mIGUuaWQmJiJzdHJpbmciPT10eXBlb2YgZS50aXRsZSl9fShHdHx8KEd0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KEp0fHwoSnQ9e30pKSxuZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcCx0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcCx0aGlzLl9vbkRpZENoYW5nZT1uZXcgQix0aGlzLm9uRGlkQ2hhbmdlPXRoaXMuX29uRGlkQ2hhbmdlLmV2ZW50LHRoaXMuX2NvbG9yTWFwPW51bGx9ZmlyZShlKXt0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOmUsY2hhbmdlZENvbG9yTWFwOiExfSl9cmVnaXN0ZXIoZSx0KXtyZXR1cm4gdGhpcy5fbWFwLnNldChlLHQpLHRoaXMuZmlyZShbZV0pLHUoKCgpPT57dGhpcy5fbWFwLmdldChlKT09PXQmJih0aGlzLl9tYXAuZGVsZXRlKGUpLHRoaXMuZmlyZShbZV0pKX0pKX1yZWdpc3RlckZhY3RvcnkoZSx0KXt2YXIgbjtudWxsPT09KG49dGhpcy5fZmFjdG9yaWVzLmdldChlKSl8fHZvaWQgMD09PW58fG4uZGlzcG9zZSgpO2NvbnN0IHI9bmV3IEtuKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5fZmFjdG9yaWVzLnNldChlLHIpLHUoKCgpPT57Y29uc3QgdD10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3QmJnQ9PT1yJiYodGhpcy5fZmFjdG9yaWVzLmRlbGV0ZShlKSx0LmRpc3Bvc2UoKSl9KSl9Z2V0T3JDcmVhdGUoZSl7cmV0dXJuIERuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD10aGlzLmdldChlKTtpZih0KXJldHVybiB0O2NvbnN0IG49dGhpcy5fZmFjdG9yaWVzLmdldChlKTtyZXR1cm4hbnx8bi5pc1Jlc29sdmVkP251bGw6KHlpZWxkIG4ucmVzb2x2ZSgpLHRoaXMuZ2V0KGUpKX0pKX1nZXQoZSl7cmV0dXJuIHRoaXMuX21hcC5nZXQoZSl8fG51bGx9aXNSZXNvbHZlZChlKXtpZih0aGlzLmdldChlKSlyZXR1cm4hMDtjb25zdCB0PXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSk7cmV0dXJuISh0JiYhdC5pc1Jlc29sdmVkKX1zZXRDb2xvck1hcChlKXt0aGlzLl9jb2xvck1hcD1lLHRoaXMuX29uRGlkQ2hhbmdlLmZpcmUoe2NoYW5nZWRMYW5ndWFnZXM6QXJyYXkuZnJvbSh0aGlzLl9tYXAua2V5cygpKSxjaGFuZ2VkQ29sb3JNYXA6ITB9KX1nZXRDb2xvck1hcCgpe3JldHVybiB0aGlzLl9jb2xvck1hcH1nZXREZWZhdWx0QmFja2dyb3VuZCgpe3JldHVybiB0aGlzLl9jb2xvck1hcCYmdGhpcy5fY29sb3JNYXAubGVuZ3RoPjI/dGhpcy5fY29sb3JNYXBbMl06bnVsbH19LGZ1bmN0aW9uKGUpe2VbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuRGlzYWJsZWQ9MV09IkRpc2FibGVkIixlW2UuRW5hYmxlZD0yXT0iRW5hYmxlZCJ9KFh0fHwoWHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5BdXRvPTJdPSJBdXRvIn0oWnR8fChadD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5LZWVwV2hpdGVzcGFjZT0xXT0iS2VlcFdoaXRlc3BhY2UiLGVbZS5JbnNlcnRBc1NuaXBwZXQ9NF09Ikluc2VydEFzU25pcHBldCJ9KFl0fHwoWXQ9e30pKSxmdW5jdGlvbihlKXtlW2UuTWV0aG9kPTBdPSJNZXRob2QiLGVbZS5GdW5jdGlvbj0xXT0iRnVuY3Rpb24iLGVbZS5Db25zdHJ1Y3Rvcj0yXT0iQ29uc3RydWN0b3IiLGVbZS5GaWVsZD0zXT0iRmllbGQiLGVbZS5WYXJpYWJsZT00XT0iVmFyaWFibGUiLGVbZS5DbGFzcz01XT0iQ2xhc3MiLGVbZS5TdHJ1Y3Q9Nl09IlN0cnVjdCIsZVtlLkludGVyZmFjZT03XT0iSW50ZXJmYWNlIixlW2UuTW9kdWxlPThdPSJNb2R1bGUiLGVbZS5Qcm9wZXJ0eT05XT0iUHJvcGVydHkiLGVbZS5FdmVudD0xMF09IkV2ZW50IixlW2UuT3BlcmF0b3I9MTFdPSJPcGVyYXRvciIsZVtlLlVuaXQ9MTJdPSJVbml0IixlW2UuVmFsdWU9MTNdPSJWYWx1ZSIsZVtlLkNvbnN0YW50PTE0XT0iQ29uc3RhbnQiLGVbZS5FbnVtPTE1XT0iRW51bSIsZVtlLkVudW1NZW1iZXI9MTZdPSJFbnVtTWVtYmVyIixlW2UuS2V5d29yZD0xN109IktleXdvcmQiLGVbZS5UZXh0PTE4XT0iVGV4dCIsZVtlLkNvbG9yPTE5XT0iQ29sb3IiLGVbZS5GaWxlPTIwXT0iRmlsZSIsZVtlLlJlZmVyZW5jZT0yMV09IlJlZmVyZW5jZSIsZVtlLkN1c3RvbWNvbG9yPTIyXT0iQ3VzdG9tY29sb3IiLGVbZS5Gb2xkZXI9MjNdPSJGb2xkZXIiLGVbZS5UeXBlUGFyYW1ldGVyPTI0XT0iVHlwZVBhcmFtZXRlciIsZVtlLlVzZXI9MjVdPSJVc2VyIixlW2UuSXNzdWU9MjZdPSJJc3N1ZSIsZVtlLlNuaXBwZXQ9MjddPSJTbmlwcGV0In0oUXR8fChRdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0oZW58fChlbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9MV09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5UcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zPTJdPSJUcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zIn0odG58fCh0bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5FWEFDVD0wXT0iRVhBQ1QiLGVbZS5BQk9WRT0xXT0iQUJPVkUiLGVbZS5CRUxPVz0yXT0iQkVMT1cifShubnx8KG5uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vdFNldD0wXT0iTm90U2V0IixlW2UuQ29udGVudEZsdXNoPTFdPSJDb250ZW50Rmx1c2giLGVbZS5SZWNvdmVyRnJvbU1hcmtlcnM9Ml09IlJlY292ZXJGcm9tTWFya2VycyIsZVtlLkV4cGxpY2l0PTNdPSJFeHBsaWNpdCIsZVtlLlBhc3RlPTRdPSJQYXN0ZSIsZVtlLlVuZG89NV09IlVuZG8iLGVbZS5SZWRvPTZdPSJSZWRvIn0ocm58fChybj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0ob258fChvbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuUmVhZD0xXT0iUmVhZCIsZVtlLldyaXRlPTJdPSJXcml0ZSJ9KGFufHwoYW49e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLktlZXA9MV09IktlZXAiLGVbZS5CcmFja2V0cz0yXT0iQnJhY2tldHMiLGVbZS5BZHZhbmNlZD0zXT0iQWR2YW5jZWQiLGVbZS5GdWxsPTRdPSJGdWxsIn0oc258fChzbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5hY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXI9MF09ImFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3RlciIsZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyPTFdPSJhY2NlcHRTdWdnZXN0aW9uT25FbnRlciIsZVtlLmFjY2Vzc2liaWxpdHlTdXBwb3J0PTJdPSJhY2Nlc3NpYmlsaXR5U3VwcG9ydCIsZVtlLmFjY2Vzc2liaWxpdHlQYWdlU2l6ZT0zXT0iYWNjZXNzaWJpbGl0eVBhZ2VTaXplIixlW2UuYXJpYUxhYmVsPTRdPSJhcmlhTGFiZWwiLGVbZS5hdXRvQ2xvc2luZ0JyYWNrZXRzPTVdPSJhdXRvQ2xvc2luZ0JyYWNrZXRzIixlW2UuYXV0b0Nsb3NpbmdEZWxldGU9Nl09ImF1dG9DbG9zaW5nRGVsZXRlIixlW2UuYXV0b0Nsb3NpbmdPdmVydHlwZT03XT0iYXV0b0Nsb3NpbmdPdmVydHlwZSIsZVtlLmF1dG9DbG9zaW5nUXVvdGVzPThdPSJhdXRvQ2xvc2luZ1F1b3RlcyIsZVtlLmF1dG9JbmRlbnQ9OV09ImF1dG9JbmRlbnQiLGVbZS5hdXRvbWF0aWNMYXlvdXQ9MTBdPSJhdXRvbWF0aWNMYXlvdXQiLGVbZS5hdXRvU3Vycm91bmQ9MTFdPSJhdXRvU3Vycm91bmQiLGVbZS5icmFja2V0UGFpckNvbG9yaXphdGlvbj0xMl09ImJyYWNrZXRQYWlyQ29sb3JpemF0aW9uIixlW2UuZ3VpZGVzPTEzXT0iZ3VpZGVzIixlW2UuY29kZUxlbnM9MTRdPSJjb2RlTGVucyIsZVtlLmNvZGVMZW5zRm9udEZhbWlseT0xNV09ImNvZGVMZW5zRm9udEZhbWlseSIsZVtlLmNvZGVMZW5zRm9udFNpemU9MTZdPSJjb2RlTGVuc0ZvbnRTaXplIixlW2UuY29sb3JEZWNvcmF0b3JzPTE3XT0iY29sb3JEZWNvcmF0b3JzIixlW2UuY29sdW1uU2VsZWN0aW9uPTE4XT0iY29sdW1uU2VsZWN0aW9uIixlW2UuY29tbWVudHM9MTldPSJjb21tZW50cyIsZVtlLmNvbnRleHRtZW51PTIwXT0iY29udGV4dG1lbnUiLGVbZS5jb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZz0yMV09ImNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nIixlW2UuY3Vyc29yQmxpbmtpbmc9MjJdPSJjdXJzb3JCbGlua2luZyIsZVtlLmN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uPTIzXT0iY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb24iLGVbZS5jdXJzb3JTdHlsZT0yNF09ImN1cnNvclN0eWxlIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lcz0yNV09ImN1cnNvclN1cnJvdW5kaW5nTGluZXMiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGU9MjZdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGUiLGVbZS5jdXJzb3JXaWR0aD0yN109ImN1cnNvcldpZHRoIixlW2UuZGlzYWJsZUxheWVySGludGluZz0yOF09ImRpc2FibGVMYXllckhpbnRpbmciLGVbZS5kaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucz0yOV09ImRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zIixlW2UuZG9tUmVhZE9ubHk9MzBdPSJkb21SZWFkT25seSIsZVtlLmRyYWdBbmREcm9wPTMxXT0iZHJhZ0FuZERyb3AiLGVbZS5kcm9wSW50b0VkaXRvcj0zMl09ImRyb3BJbnRvRWRpdG9yIixlW2UuZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQ9MzNdPSJlbXB0eVNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLmV4cGVyaW1lbnRhbD0zNF09ImV4cGVyaW1lbnRhbCIsZVtlLmV4dHJhRWRpdG9yQ2xhc3NOYW1lPTM1XT0iZXh0cmFFZGl0b3JDbGFzc05hbWUiLGVbZS5mYXN0U2Nyb2xsU2Vuc2l0aXZpdHk9MzZdPSJmYXN0U2Nyb2xsU2Vuc2l0aXZpdHkiLGVbZS5maW5kPTM3XT0iZmluZCIsZVtlLmZpeGVkT3ZlcmZsb3dXaWRnZXRzPTM4XT0iZml4ZWRPdmVyZmxvd1dpZGdldHMiLGVbZS5mb2xkaW5nPTM5XT0iZm9sZGluZyIsZVtlLmZvbGRpbmdTdHJhdGVneT00MF09ImZvbGRpbmdTdHJhdGVneSIsZVtlLmZvbGRpbmdIaWdobGlnaHQ9NDFdPSJmb2xkaW5nSGlnaGxpZ2h0IixlW2UuZm9sZGluZ0ltcG9ydHNCeURlZmF1bHQ9NDJdPSJmb2xkaW5nSW1wb3J0c0J5RGVmYXVsdCIsZVtlLmZvbGRpbmdNYXhpbXVtUmVnaW9ucz00M109ImZvbGRpbmdNYXhpbXVtUmVnaW9ucyIsZVtlLnVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZT00NF09InVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZSIsZVtlLmZvbnRGYW1pbHk9NDVdPSJmb250RmFtaWx5IixlW2UuZm9udEluZm89NDZdPSJmb250SW5mbyIsZVtlLmZvbnRMaWdhdHVyZXM9NDddPSJmb250TGlnYXR1cmVzIixlW2UuZm9udFNpemU9NDhdPSJmb250U2l6ZSIsZVtlLmZvbnRXZWlnaHQ9NDldPSJmb250V2VpZ2h0IixlW2UuZm9ybWF0T25QYXN0ZT01MF09ImZvcm1hdE9uUGFzdGUiLGVbZS5mb3JtYXRPblR5cGU9NTFdPSJmb3JtYXRPblR5cGUiLGVbZS5nbHlwaE1hcmdpbj01Ml09ImdseXBoTWFyZ2luIixlW2UuZ290b0xvY2F0aW9uPTUzXT0iZ290b0xvY2F0aW9uIixlW2UuaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlcj01NF09ImhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXIiLGVbZS5ob3Zlcj01NV09ImhvdmVyIixlW2UuaW5EaWZmRWRpdG9yPTU2XT0iaW5EaWZmRWRpdG9yIixlW2UuaW5saW5lU3VnZ2VzdD01N109ImlubGluZVN1Z2dlc3QiLGVbZS5sZXR0ZXJTcGFjaW5nPTU4XT0ibGV0dGVyU3BhY2luZyIsZVtlLmxpZ2h0YnVsYj01OV09ImxpZ2h0YnVsYiIsZVtlLmxpbmVEZWNvcmF0aW9uc1dpZHRoPTYwXT0ibGluZURlY29yYXRpb25zV2lkdGgiLGVbZS5saW5lSGVpZ2h0PTYxXT0ibGluZUhlaWdodCIsZVtlLmxpbmVOdW1iZXJzPTYyXT0ibGluZU51bWJlcnMiLGVbZS5saW5lTnVtYmVyc01pbkNoYXJzPTYzXT0ibGluZU51bWJlcnNNaW5DaGFycyIsZVtlLmxpbmtlZEVkaXRpbmc9NjRdPSJsaW5rZWRFZGl0aW5nIixlW2UubGlua3M9NjVdPSJsaW5rcyIsZVtlLm1hdGNoQnJhY2tldHM9NjZdPSJtYXRjaEJyYWNrZXRzIixlW2UubWluaW1hcD02N109Im1pbmltYXAiLGVbZS5tb3VzZVN0eWxlPTY4XT0ibW91c2VTdHlsZSIsZVtlLm1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eT02OV09Im1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eSIsZVtlLm1vdXNlV2hlZWxab29tPTcwXT0ibW91c2VXaGVlbFpvb20iLGVbZS5tdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmc9NzFdPSJtdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmciLGVbZS5tdWx0aUN1cnNvck1vZGlmaWVyPTcyXT0ibXVsdGlDdXJzb3JNb2RpZmllciIsZVtlLm11bHRpQ3Vyc29yUGFzdGU9NzNdPSJtdWx0aUN1cnNvclBhc3RlIixlW2Uub2NjdXJyZW5jZXNIaWdobGlnaHQ9NzRdPSJvY2N1cnJlbmNlc0hpZ2hsaWdodCIsZVtlLm92ZXJ2aWV3UnVsZXJCb3JkZXI9NzVdPSJvdmVydmlld1J1bGVyQm9yZGVyIixlW2Uub3ZlcnZpZXdSdWxlckxhbmVzPTc2XT0ib3ZlcnZpZXdSdWxlckxhbmVzIixlW2UucGFkZGluZz03N109InBhZGRpbmciLGVbZS5wYXJhbWV0ZXJIaW50cz03OF09InBhcmFtZXRlckhpbnRzIixlW2UucGVla1dpZGdldERlZmF1bHRGb2N1cz03OV09InBlZWtXaWRnZXREZWZhdWx0Rm9jdXMiLGVbZS5kZWZpbml0aW9uTGlua09wZW5zSW5QZWVrPTgwXT0iZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlayIsZVtlLnF1aWNrU3VnZ2VzdGlvbnM9ODFdPSJxdWlja1N1Z2dlc3Rpb25zIixlW2UucXVpY2tTdWdnZXN0aW9uc0RlbGF5PTgyXT0icXVpY2tTdWdnZXN0aW9uc0RlbGF5IixlW2UucmVhZE9ubHk9ODNdPSJyZWFkT25seSIsZVtlLnJlbmFtZU9uVHlwZT04NF09InJlbmFtZU9uVHlwZSIsZVtlLnJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzPTg1XT0icmVuZGVyQ29udHJvbENoYXJhY3RlcnMiLGVbZS5yZW5kZXJGaW5hbE5ld2xpbmU9ODZdPSJyZW5kZXJGaW5hbE5ld2xpbmUiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0PTg3XT0icmVuZGVyTGluZUhpZ2hsaWdodCIsZVtlLnJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzPTg4XT0icmVuZGVyTGluZUhpZ2hsaWdodE9ubHlXaGVuRm9jdXMiLGVbZS5yZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnM9ODldPSJyZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnMiLGVbZS5yZW5kZXJXaGl0ZXNwYWNlPTkwXT0icmVuZGVyV2hpdGVzcGFjZSIsZVtlLnJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmc9OTFdPSJyZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nIixlW2Uucm91bmRlZFNlbGVjdGlvbj05Ml09InJvdW5kZWRTZWxlY3Rpb24iLGVbZS5ydWxlcnM9OTNdPSJydWxlcnMiLGVbZS5zY3JvbGxiYXI9OTRdPSJzY3JvbGxiYXIiLGVbZS5zY3JvbGxCZXlvbmRMYXN0Q29sdW1uPTk1XT0ic2Nyb2xsQmV5b25kTGFzdENvbHVtbiIsZVtlLnNjcm9sbEJleW9uZExhc3RMaW5lPTk2XT0ic2Nyb2xsQmV5b25kTGFzdExpbmUiLGVbZS5zY3JvbGxQcmVkb21pbmFudEF4aXM9OTddPSJzY3JvbGxQcmVkb21pbmFudEF4aXMiLGVbZS5zZWxlY3Rpb25DbGlwYm9hcmQ9OThdPSJzZWxlY3Rpb25DbGlwYm9hcmQiLGVbZS5zZWxlY3Rpb25IaWdobGlnaHQ9OTldPSJzZWxlY3Rpb25IaWdobGlnaHQiLGVbZS5zZWxlY3RPbkxpbmVOdW1iZXJzPTEwMF09InNlbGVjdE9uTGluZU51bWJlcnMiLGVbZS5zaG93Rm9sZGluZ0NvbnRyb2xzPTEwMV09InNob3dGb2xkaW5nQ29udHJvbHMiLGVbZS5zaG93VW51c2VkPTEwMl09InNob3dVbnVzZWQiLGVbZS5zbmlwcGV0U3VnZ2VzdGlvbnM9MTAzXT0ic25pcHBldFN1Z2dlc3Rpb25zIixlW2Uuc21hcnRTZWxlY3Q9MTA0XT0ic21hcnRTZWxlY3QiLGVbZS5zbW9vdGhTY3JvbGxpbmc9MTA1XT0ic21vb3RoU2Nyb2xsaW5nIixlW2Uuc3RpY2t5VGFiU3RvcHM9MTA2XT0ic3RpY2t5VGFiU3RvcHMiLGVbZS5zdG9wUmVuZGVyaW5nTGluZUFmdGVyPTEwN109InN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXIiLGVbZS5zdWdnZXN0PTEwOF09InN1Z2dlc3QiLGVbZS5zdWdnZXN0Rm9udFNpemU9MTA5XT0ic3VnZ2VzdEZvbnRTaXplIixlW2Uuc3VnZ2VzdExpbmVIZWlnaHQ9MTEwXT0ic3VnZ2VzdExpbmVIZWlnaHQiLGVbZS5zdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycz0xMTFdPSJzdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycyIsZVtlLnN1Z2dlc3RTZWxlY3Rpb249MTEyXT0ic3VnZ2VzdFNlbGVjdGlvbiIsZVtlLnRhYkNvbXBsZXRpb249MTEzXT0idGFiQ29tcGxldGlvbiIsZVtlLnRhYkluZGV4PTExNF09InRhYkluZGV4IixlW2UudW5pY29kZUhpZ2hsaWdodGluZz0xMTVdPSJ1bmljb2RlSGlnaGxpZ2h0aW5nIixlW2UudW51c3VhbExpbmVUZXJtaW5hdG9ycz0xMTZdPSJ1bnVzdWFsTGluZVRlcm1pbmF0b3JzIixlW2UudXNlU2hhZG93RE9NPTExN109InVzZVNoYWRvd0RPTSIsZVtlLnVzZVRhYlN0b3BzPTExOF09InVzZVRhYlN0b3BzIixlW2Uud29yZFNlcGFyYXRvcnM9MTE5XT0id29yZFNlcGFyYXRvcnMiLGVbZS53b3JkV3JhcD0xMjBdPSJ3b3JkV3JhcCIsZVtlLndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnM9MTIxXT0id29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzPTEyMl09IndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBDb2x1bW49MTIzXT0id29yZFdyYXBDb2x1bW4iLGVbZS53b3JkV3JhcE92ZXJyaWRlMT0xMjRdPSJ3b3JkV3JhcE92ZXJyaWRlMSIsZVtlLndvcmRXcmFwT3ZlcnJpZGUyPTEyNV09IndvcmRXcmFwT3ZlcnJpZGUyIixlW2Uud3JhcHBpbmdJbmRlbnQ9MTI2XT0id3JhcHBpbmdJbmRlbnQiLGVbZS53cmFwcGluZ1N0cmF0ZWd5PTEyN109IndyYXBwaW5nU3RyYXRlZ3kiLGVbZS5zaG93RGVwcmVjYXRlZD0xMjhdPSJzaG93RGVwcmVjYXRlZCIsZVtlLmlubGF5SGludHM9MTI5XT0iaW5sYXlIaW50cyIsZVtlLmVkaXRvckNsYXNzTmFtZT0xMzBdPSJlZGl0b3JDbGFzc05hbWUiLGVbZS5waXhlbFJhdGlvPTEzMV09InBpeGVsUmF0aW8iLGVbZS50YWJGb2N1c01vZGU9MTMyXT0idGFiRm9jdXNNb2RlIixlW2UubGF5b3V0SW5mbz0xMzNdPSJsYXlvdXRJbmZvIixlW2Uud3JhcHBpbmdJbmZvPTEzNF09IndyYXBwaW5nSW5mbyJ9KGNufHwoY249e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dERlZmluZWQ9MF09IlRleHREZWZpbmVkIixlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KGxufHwobG49e30pKSxmdW5jdGlvbihlKXtlW2UuTEY9MF09IkxGIixlW2UuQ1JMRj0xXT0iQ1JMRiJ9KHVufHwodW49e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLkluZGVudD0xXT0iSW5kZW50IixlW2UuSW5kZW50T3V0ZGVudD0yXT0iSW5kZW50T3V0ZGVudCIsZVtlLk91dGRlbnQ9M109Ik91dGRlbnQifShobnx8KGhuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KGZufHwoZm49e30pKSxmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0oZG58fChkbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KG1ufHwobW49e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIsZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5CYWNrc3BhY2U9MV09IkJhY2tzcGFjZSIsZVtlLlRhYj0yXT0iVGFiIixlW2UuRW50ZXI9M109IkVudGVyIixlW2UuU2hpZnQ9NF09IlNoaWZ0IixlW2UuQ3RybD01XT0iQ3RybCIsZVtlLkFsdD02XT0iQWx0IixlW2UuUGF1c2VCcmVhaz03XT0iUGF1c2VCcmVhayIsZVtlLkNhcHNMb2NrPThdPSJDYXBzTG9jayIsZVtlLkVzY2FwZT05XT0iRXNjYXBlIixlW2UuU3BhY2U9MTBdPSJTcGFjZSIsZVtlLlBhZ2VVcD0xMV09IlBhZ2VVcCIsZVtlLlBhZ2VEb3duPTEyXT0iUGFnZURvd24iLGVbZS5FbmQ9MTNdPSJFbmQiLGVbZS5Ib21lPTE0XT0iSG9tZSIsZVtlLkxlZnRBcnJvdz0xNV09IkxlZnRBcnJvdyIsZVtlLlVwQXJyb3c9MTZdPSJVcEFycm93IixlW2UuUmlnaHRBcnJvdz0xN109IlJpZ2h0QXJyb3ciLGVbZS5Eb3duQXJyb3c9MThdPSJEb3duQXJyb3ciLGVbZS5JbnNlcnQ9MTldPSJJbnNlcnQiLGVbZS5EZWxldGU9MjBdPSJEZWxldGUiLGVbZS5EaWdpdDA9MjFdPSJEaWdpdDAiLGVbZS5EaWdpdDE9MjJdPSJEaWdpdDEiLGVbZS5EaWdpdDI9MjNdPSJEaWdpdDIiLGVbZS5EaWdpdDM9MjRdPSJEaWdpdDMiLGVbZS5EaWdpdDQ9MjVdPSJEaWdpdDQiLGVbZS5EaWdpdDU9MjZdPSJEaWdpdDUiLGVbZS5EaWdpdDY9MjddPSJEaWdpdDYiLGVbZS5EaWdpdDc9MjhdPSJEaWdpdDciLGVbZS5EaWdpdDg9MjldPSJEaWdpdDgiLGVbZS5EaWdpdDk9MzBdPSJEaWdpdDkiLGVbZS5LZXlBPTMxXT0iS2V5QSIsZVtlLktleUI9MzJdPSJLZXlCIixlW2UuS2V5Qz0zM109IktleUMiLGVbZS5LZXlEPTM0XT0iS2V5RCIsZVtlLktleUU9MzVdPSJLZXlFIixlW2UuS2V5Rj0zNl09IktleUYiLGVbZS5LZXlHPTM3XT0iS2V5RyIsZVtlLktleUg9MzhdPSJLZXlIIixlW2UuS2V5ST0zOV09IktleUkiLGVbZS5LZXlKPTQwXT0iS2V5SiIsZVtlLktleUs9NDFdPSJLZXlLIixlW2UuS2V5TD00Ml09IktleUwiLGVbZS5LZXlNPTQzXT0iS2V5TSIsZVtlLktleU49NDRdPSJLZXlOIixlW2UuS2V5Tz00NV09IktleU8iLGVbZS5LZXlQPTQ2XT0iS2V5UCIsZVtlLktleVE9NDddPSJLZXlRIixlW2UuS2V5Uj00OF09IktleVIiLGVbZS5LZXlTPTQ5XT0iS2V5UyIsZVtlLktleVQ9NTBdPSJLZXlUIixlW2UuS2V5VT01MV09IktleVUiLGVbZS5LZXlWPTUyXT0iS2V5ViIsZVtlLktleVc9NTNdPSJLZXlXIixlW2UuS2V5WD01NF09IktleVgiLGVbZS5LZXlZPTU1XT0iS2V5WSIsZVtlLktleVo9NTZdPSJLZXlaIixlW2UuTWV0YT01N109Ik1ldGEiLGVbZS5Db250ZXh0TWVudT01OF09IkNvbnRleHRNZW51IixlW2UuRjE9NTldPSJGMSIsZVtlLkYyPTYwXT0iRjIiLGVbZS5GMz02MV09IkYzIixlW2UuRjQ9NjJdPSJGNCIsZVtlLkY1PTYzXT0iRjUiLGVbZS5GNj02NF09IkY2IixlW2UuRjc9NjVdPSJGNyIsZVtlLkY4PTY2XT0iRjgiLGVbZS5GOT02N109IkY5IixlW2UuRjEwPTY4XT0iRjEwIixlW2UuRjExPTY5XT0iRjExIixlW2UuRjEyPTcwXT0iRjEyIixlW2UuRjEzPTcxXT0iRjEzIixlW2UuRjE0PTcyXT0iRjE0IixlW2UuRjE1PTczXT0iRjE1IixlW2UuRjE2PTc0XT0iRjE2IixlW2UuRjE3PTc1XT0iRjE3IixlW2UuRjE4PTc2XT0iRjE4IixlW2UuRjE5PTc3XT0iRjE5IixlW2UuTnVtTG9jaz03OF09Ik51bUxvY2siLGVbZS5TY3JvbGxMb2NrPTc5XT0iU2Nyb2xsTG9jayIsZVtlLlNlbWljb2xvbj04MF09IlNlbWljb2xvbiIsZVtlLkVxdWFsPTgxXT0iRXF1YWwiLGVbZS5Db21tYT04Ml09IkNvbW1hIixlW2UuTWludXM9ODNdPSJNaW51cyIsZVtlLlBlcmlvZD04NF09IlBlcmlvZCIsZVtlLlNsYXNoPTg1XT0iU2xhc2giLGVbZS5CYWNrcXVvdGU9ODZdPSJCYWNrcXVvdGUiLGVbZS5CcmFja2V0TGVmdD04N109IkJyYWNrZXRMZWZ0IixlW2UuQmFja3NsYXNoPTg4XT0iQmFja3NsYXNoIixlW2UuQnJhY2tldFJpZ2h0PTg5XT0iQnJhY2tldFJpZ2h0IixlW2UuUXVvdGU9OTBdPSJRdW90ZSIsZVtlLk9FTV84PTkxXT0iT0VNXzgiLGVbZS5JbnRsQmFja3NsYXNoPTkyXT0iSW50bEJhY2tzbGFzaCIsZVtlLk51bXBhZDA9OTNdPSJOdW1wYWQwIixlW2UuTnVtcGFkMT05NF09Ik51bXBhZDEiLGVbZS5OdW1wYWQyPTk1XT0iTnVtcGFkMiIsZVtlLk51bXBhZDM9OTZdPSJOdW1wYWQzIixlW2UuTnVtcGFkND05N109Ik51bXBhZDQiLGVbZS5OdW1wYWQ1PTk4XT0iTnVtcGFkNSIsZVtlLk51bXBhZDY9OTldPSJOdW1wYWQ2IixlW2UuTnVtcGFkNz0xMDBdPSJOdW1wYWQ3IixlW2UuTnVtcGFkOD0xMDFdPSJOdW1wYWQ4IixlW2UuTnVtcGFkOT0xMDJdPSJOdW1wYWQ5IixlW2UuTnVtcGFkTXVsdGlwbHk9MTAzXT0iTnVtcGFkTXVsdGlwbHkiLGVbZS5OdW1wYWRBZGQ9MTA0XT0iTnVtcGFkQWRkIixlW2UuTlVNUEFEX1NFUEFSQVRPUj0xMDVdPSJOVU1QQURfU0VQQVJBVE9SIixlW2UuTnVtcGFkU3VidHJhY3Q9MTA2XT0iTnVtcGFkU3VidHJhY3QiLGVbZS5OdW1wYWREZWNpbWFsPTEwN109Ik51bXBhZERlY2ltYWwiLGVbZS5OdW1wYWREaXZpZGU9MTA4XT0iTnVtcGFkRGl2aWRlIixlW2UuS0VZX0lOX0NPTVBPU0lUSU9OPTEwOV09IktFWV9JTl9DT01QT1NJVElPTiIsZVtlLkFCTlRfQzE9MTEwXT0iQUJOVF9DMSIsZVtlLkFCTlRfQzI9MTExXT0iQUJOVF9DMiIsZVtlLkF1ZGlvVm9sdW1lTXV0ZT0xMTJdPSJBdWRpb1ZvbHVtZU11dGUiLGVbZS5BdWRpb1ZvbHVtZVVwPTExM109IkF1ZGlvVm9sdW1lVXAiLGVbZS5BdWRpb1ZvbHVtZURvd249MTE0XT0iQXVkaW9Wb2x1bWVEb3duIixlW2UuQnJvd3NlclNlYXJjaD0xMTVdPSJCcm93c2VyU2VhcmNoIixlW2UuQnJvd3NlckhvbWU9MTE2XT0iQnJvd3NlckhvbWUiLGVbZS5Ccm93c2VyQmFjaz0xMTddPSJCcm93c2VyQmFjayIsZVtlLkJyb3dzZXJGb3J3YXJkPTExOF09IkJyb3dzZXJGb3J3YXJkIixlW2UuTWVkaWFUcmFja05leHQ9MTE5XT0iTWVkaWFUcmFja05leHQiLGVbZS5NZWRpYVRyYWNrUHJldmlvdXM9MTIwXT0iTWVkaWFUcmFja1ByZXZpb3VzIixlW2UuTWVkaWFTdG9wPTEyMV09Ik1lZGlhU3RvcCIsZVtlLk1lZGlhUGxheVBhdXNlPTEyMl09Ik1lZGlhUGxheVBhdXNlIixlW2UuTGF1bmNoTWVkaWFQbGF5ZXI9MTIzXT0iTGF1bmNoTWVkaWFQbGF5ZXIiLGVbZS5MYXVuY2hNYWlsPTEyNF09IkxhdW5jaE1haWwiLGVbZS5MYXVuY2hBcHAyPTEyNV09IkxhdW5jaEFwcDIiLGVbZS5DbGVhcj0xMjZdPSJDbGVhciIsZVtlLk1BWF9WQUxVRT0xMjddPSJNQVhfVkFMVUUifShnbnx8KGduPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkhpbnQ9MV09IkhpbnQiLGVbZS5JbmZvPTJdPSJJbmZvIixlW2UuV2FybmluZz00XT0iV2FybmluZyIsZVtlLkVycm9yPThdPSJFcnJvciJ9KHBufHwocG49e30pKSxmdW5jdGlvbihlKXtlW2UuVW5uZWNlc3Nhcnk9MV09IlVubmVjZXNzYXJ5IixlW2UuRGVwcmVjYXRlZD0yXT0iRGVwcmVjYXRlZCJ9KGJufHwoYm49e30pKSxmdW5jdGlvbihlKXtlW2UuSW5saW5lPTFdPSJJbmxpbmUiLGVbZS5HdXR0ZXI9Ml09Ikd1dHRlciJ9KHZufHwodm49e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTj0wXT0iVU5LTk9XTiIsZVtlLlRFWFRBUkVBPTFdPSJURVhUQVJFQSIsZVtlLkdVVFRFUl9HTFlQSF9NQVJHSU49Ml09IkdVVFRFUl9HTFlQSF9NQVJHSU4iLGVbZS5HVVRURVJfTElORV9OVU1CRVJTPTNdPSJHVVRURVJfTElORV9OVU1CRVJTIixlW2UuR1VUVEVSX0xJTkVfREVDT1JBVElPTlM9NF09IkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TIixlW2UuR1VUVEVSX1ZJRVdfWk9ORT01XT0iR1VUVEVSX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfVEVYVD02XT0iQ09OVEVOVF9URVhUIixlW2UuQ09OVEVOVF9FTVBUWT03XT0iQ09OVEVOVF9FTVBUWSIsZVtlLkNPTlRFTlRfVklFV19aT05FPThdPSJDT05URU5UX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfV0lER0VUPTldPSJDT05URU5UX1dJREdFVCIsZVtlLk9WRVJWSUVXX1JVTEVSPTEwXT0iT1ZFUlZJRVdfUlVMRVIiLGVbZS5TQ1JPTExCQVI9MTFdPSJTQ1JPTExCQVIiLGVbZS5PVkVSTEFZX1dJREdFVD0xMl09Ik9WRVJMQVlfV0lER0VUIixlW2UuT1VUU0lERV9FRElUT1I9MTNdPSJPVVRTSURFX0VESVRPUiJ9KHlufHwoeW49e30pKSxmdW5jdGlvbihlKXtlW2UuVE9QX1JJR0hUX0NPUk5FUj0wXT0iVE9QX1JJR0hUX0NPUk5FUiIsZVtlLkJPVFRPTV9SSUdIVF9DT1JORVI9MV09IkJPVFRPTV9SSUdIVF9DT1JORVIiLGVbZS5UT1BfQ0VOVEVSPTJdPSJUT1BfQ0VOVEVSIn0oQ258fChDbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0od258fCh3bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTBdPSJMZWZ0IixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTm9uZT0yXT0iTm9uZSIsZVtlLkxlZnRPZkluamVjdGVkVGV4dD0zXT0iTGVmdE9mSW5qZWN0ZWRUZXh0IixlW2UuUmlnaHRPZkluamVjdGVkVGV4dD00XT0iUmlnaHRPZkluamVjdGVkVGV4dCJ9KF9ufHwoX249e30pKSxmdW5jdGlvbihlKXtlW2UuT2ZmPTBdPSJPZmYiLGVbZS5Pbj0xXT0iT24iLGVbZS5SZWxhdGl2ZT0yXT0iUmVsYXRpdmUiLGVbZS5JbnRlcnZhbD0zXT0iSW50ZXJ2YWwiLGVbZS5DdXN0b209NF09IkN1c3RvbSJ9KFNufHwoU249e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlRleHQ9MV09IlRleHQiLGVbZS5CbG9ja3M9Ml09IkJsb2NrcyJ9KEFufHwoQW49e30pKSxmdW5jdGlvbihlKXtlW2UuU21vb3RoPTBdPSJTbW9vdGgiLGVbZS5JbW1lZGlhdGU9MV09IkltbWVkaWF0ZSJ9KEVufHwoRW49e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0bz0xXT0iQXV0byIsZVtlLkhpZGRlbj0yXT0iSGlkZGVuIixlW2UuVmlzaWJsZT0zXT0iVmlzaWJsZSJ9KHhufHwoeG49e30pKSxmdW5jdGlvbihlKXtlW2UuTFRSPTBdPSJMVFIiLGVbZS5SVEw9MV09IlJUTCJ9KE5ufHwoTm49e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KGtufHwoa249e30pKSxmdW5jdGlvbihlKXtlW2UuRmlsZT0wXT0iRmlsZSIsZVtlLk1vZHVsZT0xXT0iTW9kdWxlIixlW2UuTmFtZXNwYWNlPTJdPSJOYW1lc3BhY2UiLGVbZS5QYWNrYWdlPTNdPSJQYWNrYWdlIixlW2UuQ2xhc3M9NF09IkNsYXNzIixlW2UuTWV0aG9kPTVdPSJNZXRob2QiLGVbZS5Qcm9wZXJ0eT02XT0iUHJvcGVydHkiLGVbZS5GaWVsZD03XT0iRmllbGQiLGVbZS5Db25zdHJ1Y3Rvcj04XT0iQ29uc3RydWN0b3IiLGVbZS5FbnVtPTldPSJFbnVtIixlW2UuSW50ZXJmYWNlPTEwXT0iSW50ZXJmYWNlIixlW2UuRnVuY3Rpb249MTFdPSJGdW5jdGlvbiIsZVtlLlZhcmlhYmxlPTEyXT0iVmFyaWFibGUiLGVbZS5Db25zdGFudD0xM109IkNvbnN0YW50IixlW2UuU3RyaW5nPTE0XT0iU3RyaW5nIixlW2UuTnVtYmVyPTE1XT0iTnVtYmVyIixlW2UuQm9vbGVhbj0xNl09IkJvb2xlYW4iLGVbZS5BcnJheT0xN109IkFycmF5IixlW2UuT2JqZWN0PTE4XT0iT2JqZWN0IixlW2UuS2V5PTE5XT0iS2V5IixlW2UuTnVsbD0yMF09Ik51bGwiLGVbZS5FbnVtTWVtYmVyPTIxXT0iRW51bU1lbWJlciIsZVtlLlN0cnVjdD0yMl09IlN0cnVjdCIsZVtlLkV2ZW50PTIzXT0iRXZlbnQiLGVbZS5PcGVyYXRvcj0yNF09Ik9wZXJhdG9yIixlW2UuVHlwZVBhcmFtZXRlcj0yNV09IlR5cGVQYXJhbWV0ZXIifShMbnx8KExuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRlcHJlY2F0ZWQ9MV09IkRlcHJlY2F0ZWQifShUbnx8KFRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkhpZGRlbj0wXT0iSGlkZGVuIixlW2UuQmxpbms9MV09IkJsaW5rIixlW2UuU21vb3RoPTJdPSJTbW9vdGgiLGVbZS5QaGFzZT0zXT0iUGhhc2UiLGVbZS5FeHBhbmQ9NF09IkV4cGFuZCIsZVtlLlNvbGlkPTVdPSJTb2xpZCJ9KE9ufHwoT249e30pKSxmdW5jdGlvbihlKXtlW2UuTGluZT0xXT0iTGluZSIsZVtlLkJsb2NrPTJdPSJCbG9jayIsZVtlLlVuZGVybGluZT0zXT0iVW5kZXJsaW5lIixlW2UuTGluZVRoaW49NF09IkxpbmVUaGluIixlW2UuQmxvY2tPdXRsaW5lPTVdPSJCbG9ja091dGxpbmUiLGVbZS5VbmRlcmxpbmVUaGluPTZdPSJVbmRlcmxpbmVUaGluIn0oSW58fChJbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTBdPSJBbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTFdPSJOZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlPTJdPSJHcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyPTNdPSJHcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXIifShNbnx8KE1uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5TYW1lPTFdPSJTYW1lIixlW2UuSW5kZW50PTJdPSJJbmRlbnQiLGVbZS5EZWVwSW5kZW50PTNdPSJEZWVwSW5kZW50In0oUG58fChQbj17fSkpO2NsYXNzIFVue3N0YXRpYyBjaG9yZChlLHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybihlfCg2NTUzNSZ0KTw8MTY+Pj4wKT4+PjB9KGUsdCl9fWZ1bmN0aW9uIEJuKGUsdCxuLHIsaSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoMD09PXIpcmV0dXJuITA7Y29uc3Qgbz10LmNoYXJDb2RlQXQoci0xKTtpZigwIT09ZS5nZXQobykpcmV0dXJuITA7aWYoMTM9PT1vfHwxMD09PW8pcmV0dXJuITA7aWYoaT4wKXtjb25zdCBuPXQuY2hhckNvZGVBdChyKTtpZigwIT09ZS5nZXQobikpcmV0dXJuITB9cmV0dXJuITF9KGUsdCwwLHIsaSkmJmZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYocitpPT09bilyZXR1cm4hMDtjb25zdCBvPXQuY2hhckNvZGVBdChyK2kpO2lmKDAhPT1lLmdldChvKSlyZXR1cm4hMDtpZigxMz09PW98fDEwPT09bylyZXR1cm4hMDtpZihpPjApe2NvbnN0IG49dC5jaGFyQ29kZUF0KHIraS0xKTtpZigwIT09ZS5nZXQobikpcmV0dXJuITB9cmV0dXJuITF9KGUsdCxuLHIsaSl9VW4uQ3RybENtZD0yMDQ4LFVuLlNoaWZ0PTEwMjQsVW4uQWx0PTUxMixVbi5XaW5DdHJsPTI1NixmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KFJufHwoUm49e30pKSxmdW5jdGlvbihlKXtlW2UuSW5saW5lPTFdPSJJbmxpbmUiLGVbZS5HdXR0ZXI9Ml09Ikd1dHRlciJ9KFZufHwoVm49e30pKSxmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0oRm58fChGbj17fSkpO2NsYXNzIHFue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fd29yZFNlcGFyYXRvcnM9ZSx0aGlzLl9zZWFyY2hSZWdleD10LHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9cmVzZXQoZSl7dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4PWUsdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1uZXh0KGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG47ZG97aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCt0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9PT10KXJldHVybiBudWxsO2lmKG49dGhpcy5fc2VhcmNoUmVnZXguZXhlYyhlKSwhbilyZXR1cm4gbnVsbDtjb25zdCByPW4uaW5kZXgsaT1uWzBdLmxlbmd0aDtpZihyPT09dGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCYmaT09PXRoaXMuX3ByZXZNYXRjaExlbmd0aCl7aWYoMD09PWkpe1ooZSx0LHRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCk+NjU1MzU/dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0yOnRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9MTtjb250aW51ZX1yZXR1cm4gbnVsbH1pZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PXIsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPWksIXRoaXMuX3dvcmRTZXBhcmF0b3JzfHxCbih0aGlzLl93b3JkU2VwYXJhdG9ycyxlLHQscixpKSlyZXR1cm4gbn13aGlsZShuKTtyZXR1cm4gbnVsbH19Y2xhc3MgJG57c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhlLHQsbil7Y29uc3Qgcj1uP24uc3RhcnRMaW5lTnVtYmVyOjEsaT1uP24uZW5kTGluZU51bWJlcjplLmdldExpbmVDb3VudCgpLG89bmV3IFduKHQpLGE9by5nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCk7bGV0IHM7dmFyIGMsbDtzPSJhbGxOb25CYXNpY0FzY2lpIj09PWE/bmV3IFJlZ0V4cCgiW15cXHRcXG5cXHJcXHgyMC1cXHg3RV0iLCJnIik6bmV3IFJlZ0V4cCgiIisoYz1BcnJheS5mcm9tKGEpLGBbJHtsPWMubWFwKChlPT5TdHJpbmcuZnJvbUNvZGVQb2ludChlKSkpLmpvaW4oIiIpLGwucmVwbGFjZSgvW1xcXHtcfVwqXCtcP1x8XF5cJFwuXFtcXVwoXCldL2csIlxcJCYiKX1dYCksImciKTtjb25zdCB1PW5ldyBxbihudWxsLHMpLGg9W107bGV0IGYsZD0hMSxtPTAsZz0wLHA9MDtlOmZvcihsZXQgdD1yLG49aTt0PD1uO3QrKyl7Y29uc3Qgbj1lLmdldExpbmVDb250ZW50KHQpLHI9bi5sZW5ndGg7dS5yZXNldCgwKTtkb3tpZihmPXUubmV4dChuKSxmKXtsZXQgZT1mLmluZGV4LGk9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihlPjApe1gobi5jaGFyQ29kZUF0KGUtMSkpJiZlLS19aWYoaSsxPHIpe1gobi5jaGFyQ29kZUF0KGktMSkpJiZpKyt9Y29uc3QgYT1uLnN1YnN0cmluZyhlLGkpLHM9eXQoZSsxLGJ0LG4sMCksYz1vLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoYSxzP3Mud29yZDpudWxsKTtpZigwIT09Yyl7Mz09PWM/bSsrOjI9PT1jP2crKzoxPT09Yz9wKys6eigpO2NvbnN0IG49MWUzO2lmKGgubGVuZ3RoPj1uKXtkPSEwO2JyZWFrIGV9aC5wdXNoKG5ldyB0dCh0LGUrMSx0LGkrMSkpfX19d2hpbGUoZil9cmV0dXJue3JhbmdlczpoLGhhc01vcmU6ZCxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDptLGludmlzaWJsZUNoYXJhY3RlckNvdW50Omcsbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50OnB9fXN0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodFJlYXNvbihlLHQpe2NvbnN0IG49bmV3IFduKHQpO3N3aXRjaChuLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSxudWxsKSl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMjpyZXR1cm57a2luZDoxfTtjYXNlIDM6e2NvbnN0IHI9ZS5jb2RlUG9pbnRBdCgwKSxpPW4uYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRQcmltYXJ5Q29uZnVzYWJsZShyKSxvPVEuZ2V0TG9jYWxlcygpLmZpbHRlcigoZT0+IVEuZ2V0SW5zdGFuY2UobmV3IFNldChbLi4udC5hbGxvd2VkTG9jYWxlcyxlXSkpLmlzQW1iaWd1b3VzKHIpKSk7cmV0dXJue2tpbmQ6MCxjb25mdXNhYmxlV2l0aDpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSxub3RBbWJpZ3VvdXNJbkxvY2FsZXM6b319Y2FzZSAxOnJldHVybntraW5kOjJ9fX19Y2xhc3MgV257Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWUsdGhpcy5hbGxvd2VkQ29kZVBvaW50cz1uZXcgU2V0KGUuYWxsb3dlZENvZGVQb2ludHMpLHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycz1RLmdldEluc3RhbmNlKG5ldyBTZXQoZS5hbGxvd2VkTG9jYWxlcykpfWdldENhbmRpZGF0ZUNvZGVQb2ludHMoKXtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4iYWxsTm9uQmFzaWNBc2NpaSI7Y29uc3QgZT1uZXcgU2V0O2lmKHRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzKWZvcihjb25zdCB0IG9mIGVlLmNvZGVQb2ludHMpSG4oU3RyaW5nLmZyb21Db2RlUG9pbnQodCkpfHxlLmFkZCh0KTtpZih0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiB0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKSllLmFkZCh0KTtmb3IoY29uc3QgdCBvZiB0aGlzLmFsbG93ZWRDb2RlUG9pbnRzKWUuZGVsZXRlKHQpO3JldHVybiBlfXNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSx0KXtjb25zdCBuPWUuY29kZVBvaW50QXQoMCk7aWYodGhpcy5hbGxvd2VkQ29kZVBvaW50cy5oYXMobikpcmV0dXJuIDA7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuIDE7bGV0IHI9ITEsaT0hMTtpZih0KWZvcihjb25zdCBlIG9mIHQpe2NvbnN0IHQ9ZS5jb2RlUG9pbnRBdCgwKSxuPShvPWUsWS50ZXN0KG8pKTtyPXJ8fG4sbnx8dGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKHQpfHxlZS5pc0ludmlzaWJsZUNoYXJhY3Rlcih0KXx8KGk9ITApfXZhciBvO3JldHVybiFyJiZpPzA6dGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMmJiFIbihlKSYmZWUuaXNJbnZpc2libGVDaGFyYWN0ZXIobik/Mjp0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycyYmdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKG4pPzM6MH19ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIiAiPT09ZXx8IlxuIj09PWV8fCJcdCI9PT1lfXZhciB6bj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBhKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gcyhlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihhLHMpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX07Y2xhc3MgR24gZXh0ZW5kcyBwdHtnZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgZW9sKCl7cmV0dXJuIHRoaXMuX2VvbH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldFRleHQoKX1nZXRMaW5lc0NvbnRlbnQoKXtyZXR1cm4gdGhpcy5fbGluZXMuc2xpY2UoMCl9Z2V0TGluZUNvdW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLmxlbmd0aH1nZXRMaW5lQ29udGVudChlKXtyZXR1cm4gdGhpcy5fbGluZXNbZS0xXX1nZXRXb3JkQXRQb3NpdGlvbihlLHQpe2NvbnN0IG49eXQoZS5jb2x1bW4sZnVuY3Rpb24oZSl7bGV0IHQ9YnQ7aWYoZSYmZSBpbnN0YW5jZW9mIFJlZ0V4cClpZihlLmdsb2JhbCl0PWU7ZWxzZXtsZXQgbj0iZyI7ZS5pZ25vcmVDYXNlJiYobis9ImkiKSxlLm11bHRpbGluZSYmKG4rPSJtIiksZS51bmljb2RlJiYobis9InUiKSx0PW5ldyBSZWdFeHAoZS5zb3VyY2Usbil9cmV0dXJuIHQubGFzdEluZGV4PTAsdH0odCksdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLDApO3JldHVybiBuP25ldyB0dChlLmxpbmVOdW1iZXIsbi5zdGFydENvbHVtbixlLmxpbmVOdW1iZXIsbi5lbmRDb2x1bW4pOm51bGx9d29yZHMoZSl7Y29uc3QgdD10aGlzLl9saW5lcyxuPXRoaXMuX3dvcmRlbml6ZS5iaW5kKHRoaXMpO2xldCByPTAsaT0iIixvPTAsYT1bXTtyZXR1cm57KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKDs7KWlmKG88YS5sZW5ndGgpe2NvbnN0IGU9aS5zdWJzdHJpbmcoYVtvXS5zdGFydCxhW29dLmVuZCk7bys9MSx5aWVsZCBlfWVsc2V7aWYoIShyPHQubGVuZ3RoKSlicmVhaztpPXRbcl0sYT1uKGksZSksbz0wLHIrPTF9fX19Z2V0TGluZVdvcmRzKGUsdCl7Y29uc3Qgbj10aGlzLl9saW5lc1tlLTFdLHI9dGhpcy5fd29yZGVuaXplKG4sdCksaT1bXTtmb3IoY29uc3QgZSBvZiByKWkucHVzaCh7d29yZDpuLnN1YnN0cmluZyhlLnN0YXJ0LGUuZW5kKSxzdGFydENvbHVtbjplLnN0YXJ0KzEsZW5kQ29sdW1uOmUuZW5kKzF9KTtyZXR1cm4gaX1fd29yZGVuaXplKGUsdCl7Y29uc3Qgbj1bXTtsZXQgcjtmb3IodC5sYXN0SW5kZXg9MDsocj10LmV4ZWMoZSkpJiYwIT09clswXS5sZW5ndGg7KW4ucHVzaCh7c3RhcnQ6ci5pbmRleCxlbmQ6ci5pbmRleCtyWzBdLmxlbmd0aH0pO3JldHVybiBufWdldFZhbHVlSW5SYW5nZShlKXtpZigoZT10aGlzLl92YWxpZGF0ZVJhbmdlKGUpKS5zdGFydExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXIpcmV0dXJuIHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLnN0YXJ0Q29sdW1uLTEsZS5lbmRDb2x1bW4tMSk7Y29uc3QgdD10aGlzLl9lb2wsbj1lLnN0YXJ0TGluZU51bWJlci0xLHI9ZS5lbmRMaW5lTnVtYmVyLTEsaT1bXTtpLnB1c2godGhpcy5fbGluZXNbbl0uc3Vic3RyaW5nKGUuc3RhcnRDb2x1bW4tMSkpO2ZvcihsZXQgZT1uKzE7ZTxyO2UrKylpLnB1c2godGhpcy5fbGluZXNbZV0pO3JldHVybiBpLnB1c2godGhpcy5fbGluZXNbcl0uc3Vic3RyaW5nKDAsZS5lbmRDb2x1bW4tMSkpLGkuam9pbih0KX1vZmZzZXRBdChlKXtyZXR1cm4gZT10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKSx0aGlzLl9saW5lU3RhcnRzLmdldFByZWZpeFN1bShlLmxpbmVOdW1iZXItMikrKGUuY29sdW1uLTEpfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLmZsb29yKGUpLGU9TWF0aC5tYXgoMCxlKSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCk7Y29uc3QgdD10aGlzLl9saW5lU3RhcnRzLmdldEluZGV4T2YoZSksbj10aGlzLl9saW5lc1t0LmluZGV4XS5sZW5ndGg7cmV0dXJue2xpbmVOdW1iZXI6MSt0LmluZGV4LGNvbHVtbjoxK01hdGgubWluKHQucmVtYWluZGVyLG4pfX1fdmFsaWRhdGVSYW5nZShlKXtjb25zdCB0PXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5zdGFydExpbmVOdW1iZXIsY29sdW1uOmUuc3RhcnRDb2x1bW59KSxuPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5lbmRMaW5lTnVtYmVyLGNvbHVtbjplLmVuZENvbHVtbn0pO3JldHVybiB0LmxpbmVOdW1iZXIhPT1lLnN0YXJ0TGluZU51bWJlcnx8dC5jb2x1bW4hPT1lLnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXIhPT1lLmVuZExpbmVOdW1iZXJ8fG4uY29sdW1uIT09ZS5lbmRDb2x1bW4/e3N0YXJ0TGluZU51bWJlcjp0LmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5jb2x1bW4sZW5kTGluZU51bWJlcjpuLmxpbmVOdW1iZXIsZW5kQ29sdW1uOm4uY29sdW1ufTplfV92YWxpZGF0ZVBvc2l0aW9uKGUpe2lmKCFldC5pc0lQb3NpdGlvbihlKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb3NpdGlvbiIpO2xldHtsaW5lTnVtYmVyOnQsY29sdW1uOm59PWUscj0hMTtpZih0PDEpdD0xLG49MSxyPSEwO2Vsc2UgaWYodD50aGlzLl9saW5lcy5sZW5ndGgpdD10aGlzLl9saW5lcy5sZW5ndGgsbj10aGlzLl9saW5lc1t0LTFdLmxlbmd0aCsxLHI9ITA7ZWxzZXtjb25zdCBlPXRoaXMuX2xpbmVzW3QtMV0ubGVuZ3RoKzE7bjwxPyhuPTEscj0hMCk6bj5lJiYobj1lLHI9ITApfXJldHVybiByP3tsaW5lTnVtYmVyOnQsY29sdW1uOm59OmV9fWNsYXNzIEpue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faG9zdD1lLHRoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PXQsdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKX1fZ2V0TW9kZWwoZSl7cmV0dXJuIHRoaXMuX21vZGVsc1tlXX1fZ2V0TW9kZWxzKCl7Y29uc3QgZT1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKCh0PT5lLnB1c2godGhpcy5fbW9kZWxzW3RdKSkpLGV9YWNjZXB0TmV3TW9kZWwoZSl7dGhpcy5fbW9kZWxzW2UudXJsXT1uZXcgR24ocWUucGFyc2UoZS51cmwpLGUubGluZXMsZS5FT0wsZS52ZXJzaW9uSWQpfWFjY2VwdE1vZGVsQ2hhbmdlZChlLHQpe2lmKCF0aGlzLl9tb2RlbHNbZV0pcmV0dXJuO3RoaXMuX21vZGVsc1tlXS5vbkV2ZW50cyh0KX1hY2NlcHRSZW1vdmVkTW9kZWwoZSl7dGhpcy5fbW9kZWxzW2VdJiZkZWxldGUgdGhpcy5fbW9kZWxzW2VdfWNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhlLHQsbil7cmV0dXJuIHpuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbChlKTtyZXR1cm4gcj8kbi5jb21wdXRlVW5pY29kZUhpZ2hsaWdodHMocix0LG4pOntyYW5nZXM6W10saGFzTW9yZTohMSxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDowLGludmlzaWJsZUNoYXJhY3RlckNvdW50OjAsbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50OjB9fSkpfWNvbXB1dGVEaWZmKGUsdCxuLHIpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwoZSksbz10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gaSYmbz9Kbi5jb21wdXRlRGlmZihpLG8sbixyKTpudWxsfSkpfXN0YXRpYyBjb21wdXRlRGlmZihlLHQsbixyKXtjb25zdCBpPWUuZ2V0TGluZXNDb250ZW50KCksbz10LmdldExpbmVzQ29udGVudCgpLGE9bmV3IHN0KGksbyx7c2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzOiEwLHNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM6ITAsc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U6bixzaG91bGRNYWtlUHJldHR5RGlmZjohMCxtYXhDb21wdXRhdGlvblRpbWU6cn0pLmNvbXB1dGVEaWZmKCkscz0hKGEuY2hhbmdlcy5sZW5ndGg+MCkmJnRoaXMuX21vZGVsc0FyZUlkZW50aWNhbChlLHQpO3JldHVybntxdWl0RWFybHk6YS5xdWl0RWFybHksaWRlbnRpY2FsOnMsY2hhbmdlczphLmNoYW5nZXN9fXN0YXRpYyBfbW9kZWxzQXJlSWRlbnRpY2FsKGUsdCl7Y29uc3Qgbj1lLmdldExpbmVDb3VudCgpO2lmKG4hPT10LmdldExpbmVDb3VudCgpKXJldHVybiExO2ZvcihsZXQgcj0xO3I8PW47cisrKXtpZihlLmdldExpbmVDb250ZW50KHIpIT09dC5nZXRMaW5lQ29udGVudChyKSlyZXR1cm4hMX1yZXR1cm4hMH1jb21wdXRlTW9yZU1pbmltYWxFZGl0cyhlLHQpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49dGhpcy5fZ2V0TW9kZWwoZSk7aWYoIW4pcmV0dXJuIHQ7Y29uc3Qgcj1bXTtsZXQgaTt0PXQuc2xpY2UoMCkuc29ydCgoKGUsdCk9PntpZihlLnJhbmdlJiZ0LnJhbmdlKXJldHVybiB0dC5jb21wYXJlUmFuZ2VzVXNpbmdTdGFydHMoZS5yYW5nZSx0LnJhbmdlKTtyZXR1cm4oZS5yYW5nZT8wOjEpLSh0LnJhbmdlPzA6MSl9KSk7Zm9yKGxldHtyYW5nZTplLHRleHQ6byxlb2w6YX1vZiB0KXtpZigibnVtYmVyIj09dHlwZW9mIGEmJihpPWEpLHR0LmlzRW1wdHkoZSkmJiFvKWNvbnRpbnVlO2NvbnN0IHQ9bi5nZXRWYWx1ZUluUmFuZ2UoZSk7aWYobz1vLnJlcGxhY2UoL1xyXG58XG58XHIvZyxuLmVvbCksdD09PW8pY29udGludWU7aWYoTWF0aC5tYXgoby5sZW5ndGgsdC5sZW5ndGgpPkpuLl9kaWZmTGltaXQpe3IucHVzaCh7cmFuZ2U6ZSx0ZXh0Om99KTtjb250aW51ZX1jb25zdCBzPW1lKHQsbywhMSksYz1uLm9mZnNldEF0KHR0LmxpZnQoZSkuZ2V0U3RhcnRQb3NpdGlvbigpKTtmb3IoY29uc3QgZSBvZiBzKXtjb25zdCB0PW4ucG9zaXRpb25BdChjK2Uub3JpZ2luYWxTdGFydCksaT1uLnBvc2l0aW9uQXQoYytlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aCksYT17dGV4dDpvLnN1YnN0cihlLm1vZGlmaWVkU3RhcnQsZS5tb2RpZmllZExlbmd0aCkscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjp0LmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5jb2x1bW4sZW5kTGluZU51bWJlcjppLmxpbmVOdW1iZXIsZW5kQ29sdW1uOmkuY29sdW1ufX07bi5nZXRWYWx1ZUluUmFuZ2UoYS5yYW5nZSkhPT1hLnRleHQmJnIucHVzaChhKX19cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpJiZyLnB1c2goe2VvbDppLHRleHQ6IiIscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjowLHN0YXJ0Q29sdW1uOjAsZW5kTGluZU51bWJlcjowLGVuZENvbHVtbjowfX0pLHJ9KSl9Y29tcHV0ZUxpbmtzKGUpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9dGhpcy5fZ2V0TW9kZWwoZSk7cmV0dXJuIHQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldExpbmVDb3VudCYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0TGluZUNvbnRlbnQ/eHQuY29tcHV0ZUxpbmtzKGUpOltdfSh0KTpudWxsfSkpfXRleHR1YWxTdWdnZXN0KGUsdCxuLHIpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGk9bmV3IFYoITApLG89bmV3IFJlZ0V4cChuLHIpLGE9bmV3IFNldDtlOmZvcihjb25zdCBuIG9mIGUpe2NvbnN0IGU9dGhpcy5fZ2V0TW9kZWwobik7aWYoZSlmb3IoY29uc3QgbiBvZiBlLndvcmRzKG8pKWlmKG4hPT10JiZpc05hTihOdW1iZXIobikpJiYoYS5hZGQobiksYS5zaXplPkpuLl9zdWdnZXN0aW9uc0xpbWl0KSlicmVhayBlfXJldHVybnt3b3JkczpBcnJheS5mcm9tKGEpLGR1cmF0aW9uOmkuZWxhcHNlZCgpfX0pKX1jb21wdXRlV29yZFJhbmdlcyhlLHQsbixyKXtyZXR1cm4gem4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPXRoaXMuX2dldE1vZGVsKGUpO2lmKCFpKXJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO2NvbnN0IG89bmV3IFJlZ0V4cChuLHIpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IGU9dC5zdGFydExpbmVOdW1iZXI7ZTx0LmVuZExpbmVOdW1iZXI7ZSsrKXtjb25zdCB0PWkuZ2V0TGluZVdvcmRzKGUsbyk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoIWlzTmFOKE51bWJlcihuLndvcmQpKSljb250aW51ZTtsZXQgdD1hW24ud29yZF07dHx8KHQ9W10sYVtuLndvcmRdPXQpLHQucHVzaCh7c3RhcnRMaW5lTnVtYmVyOmUsc3RhcnRDb2x1bW46bi5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOmUsZW5kQ29sdW1uOm4uZW5kQ29sdW1ufSl9fXJldHVybiBhfSkpfW5hdmlnYXRlVmFsdWVTZXQoZSx0LG4scixpKXtyZXR1cm4gem4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBvPXRoaXMuX2dldE1vZGVsKGUpO2lmKCFvKXJldHVybiBudWxsO2NvbnN0IGE9bmV3IFJlZ0V4cChyLGkpO3Quc3RhcnRDb2x1bW49PT10LmVuZENvbHVtbiYmKHQ9e3N0YXJ0TGluZU51bWJlcjp0LnN0YXJ0TGluZU51bWJlcixzdGFydENvbHVtbjp0LnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6dC5lbmRMaW5lTnVtYmVyLGVuZENvbHVtbjp0LmVuZENvbHVtbisxfSk7Y29uc3Qgcz1vLmdldFZhbHVlSW5SYW5nZSh0KSxjPW8uZ2V0V29yZEF0UG9zaXRpb24oe2xpbmVOdW1iZXI6dC5zdGFydExpbmVOdW1iZXIsY29sdW1uOnQuc3RhcnRDb2x1bW59LGEpO2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9by5nZXRWYWx1ZUluUmFuZ2UoYyk7cmV0dXJuIE50LklOU1RBTkNFLm5hdmlnYXRlVmFsdWVTZXQodCxzLGMsbCxuKX0pKX1sb2FkRm9yZWlnbk1vZHVsZShlLHQsbil7Y29uc3Qgcj1mdW5jdGlvbihlLHQpe2NvbnN0IG49ZT0+ZnVuY3Rpb24oKXtjb25zdCBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gdChlLG4pfSxyPXt9O2Zvcihjb25zdCB0IG9mIGUpclt0XT1uKHQpO3JldHVybiByfShuLCgoZSx0KT0+dGhpcy5faG9zdC5maHIoZSx0KSkpLGk9e2hvc3Q6cixnZXRNaXJyb3JNb2RlbHM6KCk9PnRoaXMuX2dldE1vZGVscygpfTtyZXR1cm4gdGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnk/KHRoaXMuX2ZvcmVpZ25Nb2R1bGU9dGhpcy5fZm9yZWlnbk1vZHVsZUZhY3RvcnkoaSx0KSxQcm9taXNlLnJlc29sdmUoSCh0aGlzLl9mb3JlaWduTW9kdWxlKSkpOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiVW5leHBlY3RlZCB1c2FnZSIpKX1mbXIoZSx0KXtpZighdGhpcy5fZm9yZWlnbk1vZHVsZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZvcmVpZ25Nb2R1bGVbZV0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrZSkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZvcmVpZ25Nb2R1bGVbZV0uYXBwbHkodGhpcy5fZm9yZWlnbk1vZHVsZSx0KSl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX19Sm4uX2RpZmZMaW1pdD0xZTUsSm4uX3N1Z2dlc3Rpb25zTGltaXQ9MWU0LCJmdW5jdGlvbiI9PXR5cGVvZiBpbXBvcnRTY3JpcHRzJiYoTi5tb25hY289e2VkaXRvcjp2b2lkIDAsbGFuZ3VhZ2VzOnZvaWQgMCxDYW5jZWxsYXRpb25Ub2tlblNvdXJjZTpPdCxFbWl0dGVyOkIsS2V5Q29kZTpnbixLZXlNb2Q6VW4sUG9zaXRpb246ZXQsUmFuZ2U6dHQsU2VsZWN0aW9uOlV0LFNlbGVjdGlvbkRpcmVjdGlvbjpObixNYXJrZXJTZXZlcml0eTpwbixNYXJrZXJUYWc6Ym4sVXJpOnFlLFRva2VuOmpufSk7bGV0IFhuPSExO2Z1bmN0aW9uIFpuKGUpe2lmKFhuKXJldHVybjtYbj0hMDtjb25zdCB0PW5ldyBsZSgoZT0+e3NlbGYucG9zdE1lc3NhZ2UoZSl9KSwodD0+bmV3IEpuKHQsZSkpKTtzZWxmLm9ubWVzc2FnZT1lPT57dC5vbm1lc3NhZ2UoZS5kYXRhKX19Ci8qIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAqIFZlcnNpb246IDAuMzQuMChmMWFkOTUxZjI2YWZiM2JhNjQzMjdiNzBjMzA1NmNhYmMzODUxNDkyKQogICAgICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L21vbmFjby1lZGl0b3IvYmxvYi9tYWluL0xJQ0VOU0UudHh0CiAgICAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZnVuY3Rpb24gWW4oZSx0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIG49ZS5sZW5ndGgscj0wLGk9IiIsbz0wLGE9MTYscz0wLGM9MCxsPTAsdT0wLGg9MDtmdW5jdGlvbiBmKHQsbil7Zm9yKHZhciBpPTAsbz0wO2k8dHx8IW47KXt2YXIgYT1lLmNoYXJDb2RlQXQocik7aWYoYT49NDgmJmE8PTU3KW89MTYqbythLTQ4O2Vsc2UgaWYoYT49NjUmJmE8PTcwKW89MTYqbythLTY1KzEwO2Vsc2V7aWYoIShhPj05NyYmYTw9MTAyKSlicmVhaztvPTE2Km8rYS05NysxMH1yKyssaSsrfXJldHVybiBpPHQmJihvPS0xKSxvfWZ1bmN0aW9uIGQoKXtpZihpPSIiLGg9MCxvPXIsYz1zLHU9bCxyPj1uKXJldHVybiBvPW4sYT0xNzt2YXIgdD1lLmNoYXJDb2RlQXQocik7aWYoUW4odCkpe2Rve3IrKyxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLHQ9ZS5jaGFyQ29kZUF0KHIpfXdoaWxlKFFuKHQpKTtyZXR1cm4gYT0xNX1pZihlcih0KSlyZXR1cm4gcisrLGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCksMTM9PT10JiYxMD09PWUuY2hhckNvZGVBdChyKSYmKHIrKyxpKz0iXG4iKSxzKyssbD1yLGE9MTQ7c3dpdGNoKHQpe2Nhc2UgMTIzOnJldHVybiByKyssYT0xO2Nhc2UgMTI1OnJldHVybiByKyssYT0yO2Nhc2UgOTE6cmV0dXJuIHIrKyxhPTM7Y2FzZSA5MzpyZXR1cm4gcisrLGE9NDtjYXNlIDU4OnJldHVybiByKyssYT02O2Nhc2UgNDQ6cmV0dXJuIHIrKyxhPTU7Y2FzZSAzNDpyZXR1cm4gcisrLGk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9IiIsaT1yOzspe2lmKHI+PW4pe3QrPWUuc3Vic3RyaW5nKGksciksaD0yO2JyZWFrfXZhciBvPWUuY2hhckNvZGVBdChyKTtpZigzND09PW8pe3QrPWUuc3Vic3RyaW5nKGkscikscisrO2JyZWFrfWlmKDkyIT09byl7aWYobz49MCYmbzw9MzEpe2lmKGVyKG8pKXt0Kz1lLnN1YnN0cmluZyhpLHIpLGg9MjticmVha31oPTZ9cisrfWVsc2V7aWYodCs9ZS5zdWJzdHJpbmcoaSxyKSwrK3I+PW4pe2g9MjticmVha31zd2l0Y2goZS5jaGFyQ29kZUF0KHIrKykpe2Nhc2UgMzQ6dCs9JyInO2JyZWFrO2Nhc2UgOTI6dCs9IlxcIjticmVhaztjYXNlIDQ3OnQrPSIvIjticmVhaztjYXNlIDk4OnQrPSJcYiI7YnJlYWs7Y2FzZSAxMDI6dCs9IlxmIjticmVhaztjYXNlIDExMDp0Kz0iXG4iO2JyZWFrO2Nhc2UgMTE0OnQrPSJcciI7YnJlYWs7Y2FzZSAxMTY6dCs9Ilx0IjticmVhaztjYXNlIDExNzp2YXIgYT1mKDQsITApO2E+PTA/dCs9U3RyaW5nLmZyb21DaGFyQ29kZShhKTpoPTQ7YnJlYWs7ZGVmYXVsdDpoPTV9aT1yfX1yZXR1cm4gdH0oKSxhPTEwO2Nhc2UgNDc6dmFyIGQ9ci0xO2lmKDQ3PT09ZS5jaGFyQ29kZUF0KHIrMSkpe2ZvcihyKz0yO3I8biYmIWVyKGUuY2hhckNvZGVBdChyKSk7KXIrKztyZXR1cm4gaT1lLnN1YnN0cmluZyhkLHIpLGE9MTJ9aWYoNDI9PT1lLmNoYXJDb2RlQXQocisxKSl7cis9Mjtmb3IodmFyIGc9bi0xLHA9ITE7cjxnOyl7dmFyIGI9ZS5jaGFyQ29kZUF0KHIpO2lmKDQyPT09YiYmNDc9PT1lLmNoYXJDb2RlQXQocisxKSl7cis9MixwPSEwO2JyZWFrfXIrKyxlcihiKSYmKDEzPT09YiYmMTA9PT1lLmNoYXJDb2RlQXQocikmJnIrKyxzKyssbD1yKX1yZXR1cm4gcHx8KHIrKyxoPTEpLGk9ZS5zdWJzdHJpbmcoZCxyKSxhPTEzfXJldHVybiBpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLHIrKyxhPTE2O2Nhc2UgNDU6aWYoaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSwrK3I9PT1ufHwhdHIoZS5jaGFyQ29kZUF0KHIpKSlyZXR1cm4gYT0xNjtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OnJldHVybiBpKz1mdW5jdGlvbigpe3ZhciB0PXI7aWYoNDg9PT1lLmNoYXJDb2RlQXQocikpcisrO2Vsc2UgZm9yKHIrKztyPGUubGVuZ3RoJiZ0cihlLmNoYXJDb2RlQXQocikpOylyKys7aWYocjxlLmxlbmd0aCYmNDY9PT1lLmNoYXJDb2RlQXQocikpe2lmKCEoKytyPGUubGVuZ3RoJiZ0cihlLmNoYXJDb2RlQXQocikpKSlyZXR1cm4gaD0zLGUuc3Vic3RyaW5nKHQscik7Zm9yKHIrKztyPGUubGVuZ3RoJiZ0cihlLmNoYXJDb2RlQXQocikpOylyKyt9dmFyIG49cjtpZihyPGUubGVuZ3RoJiYoNjk9PT1lLmNoYXJDb2RlQXQocil8fDEwMT09PWUuY2hhckNvZGVBdChyKSkpaWYoKCsrcjxlLmxlbmd0aCYmNDM9PT1lLmNoYXJDb2RlQXQocil8fDQ1PT09ZS5jaGFyQ29kZUF0KHIpKSYmcisrLHI8ZS5sZW5ndGgmJnRyKGUuY2hhckNvZGVBdChyKSkpe2ZvcihyKys7cjxlLmxlbmd0aCYmdHIoZS5jaGFyQ29kZUF0KHIpKTspcisrO249cn1lbHNlIGg9MztyZXR1cm4gZS5zdWJzdHJpbmcodCxuKX0oKSxhPTExO2RlZmF1bHQ6Zm9yKDtyPG4mJm0odCk7KXIrKyx0PWUuY2hhckNvZGVBdChyKTtpZihvIT09cil7c3dpdGNoKGk9ZS5zdWJzdHJpbmcobyxyKSl7Y2FzZSJ0cnVlIjpyZXR1cm4gYT04O2Nhc2UiZmFsc2UiOnJldHVybiBhPTk7Y2FzZSJudWxsIjpyZXR1cm4gYT03fXJldHVybiBhPTE2fXJldHVybiBpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLHIrKyxhPTE2fX1mdW5jdGlvbiBtKGUpe2lmKFFuKGUpfHxlcihlKSlyZXR1cm4hMTtzd2l0Y2goZSl7Y2FzZSAxMjU6Y2FzZSA5MzpjYXNlIDEyMzpjYXNlIDkxOmNhc2UgMzQ6Y2FzZSA1ODpjYXNlIDQ0OmNhc2UgNDc6cmV0dXJuITF9cmV0dXJuITB9cmV0dXJue3NldFBvc2l0aW9uOmZ1bmN0aW9uKGUpe3I9ZSxpPSIiLG89MCxhPTE2LGg9MH0sZ2V0UG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gcn0sc2Nhbjp0P2Z1bmN0aW9uKCl7dmFyIGU7ZG97ZT1kKCl9d2hpbGUoZT49MTImJmU8PTE1KTtyZXR1cm4gZX06ZCxnZXRUb2tlbjpmdW5jdGlvbigpe3JldHVybiBhfSxnZXRUb2tlblZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGl9LGdldFRva2VuT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99LGdldFRva2VuTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHItb30sZ2V0VG9rZW5TdGFydExpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sZ2V0VG9rZW5TdGFydENoYXJhY3RlcjpmdW5jdGlvbigpe3JldHVybiBvLXV9LGdldFRva2VuRXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gaH19fWZ1bmN0aW9uIFFuKGUpe3JldHVybiAzMj09PWV8fDk9PT1lfHwxMT09PWV8fDEyPT09ZXx8MTYwPT09ZXx8NTc2MD09PWV8fGU+PTgxOTImJmU8PTgyMDN8fDgyMzk9PT1lfHw4Mjg3PT09ZXx8MTIyODg9PT1lfHw2NTI3OT09PWV9ZnVuY3Rpb24gZXIoZSl7cmV0dXJuIDEwPT09ZXx8MTM9PT1lfHw4MjMyPT09ZXx8ODIzMz09PWV9ZnVuY3Rpb24gdHIoZSl7cmV0dXJuIGU+PTQ4JiZlPD01N31mdW5jdGlvbiBucihlLHQsbil7dmFyIHIsaSxvLGEscztpZih0KXtmb3IoYT10Lm9mZnNldCxzPWErdC5sZW5ndGgsbz1hO28+MCYmIWlyKGUsby0xKTspby0tO2Zvcih2YXIgYz1zO2M8ZS5sZW5ndGgmJiFpcihlLGMpOyljKys7aT1lLnN1YnN0cmluZyhvLGMpLHI9ZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9MCxpPXQudGFiU2l6ZXx8NDtmb3IoO248ZS5sZW5ndGg7KXt2YXIgbz1lLmNoYXJBdChuKTtpZigiICI9PT1vKXIrKztlbHNle2lmKCJcdCIhPT1vKWJyZWFrO3IrPWl9bisrfXJldHVybiBNYXRoLmZsb29yKHIvaSl9KGksbil9ZWxzZSBpPWUscj0wLG89MCxhPTAscz1lLmxlbmd0aDt2YXIgbCx1PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXQuY2hhckF0KG4pO2lmKCJcciI9PT1yKXJldHVybiBuKzE8dC5sZW5ndGgmJiJcbiI9PT10LmNoYXJBdChuKzEpPyJcclxuIjoiXHIiO2lmKCJcbiI9PT1yKXJldHVybiJcbiJ9cmV0dXJuIGUmJmUuZW9sfHwiXG4ifShuLGUpLGg9ITEsZj0wO2w9bi5pbnNlcnRTcGFjZXM/cnIoIiAiLG4udGFiU2l6ZXx8NCk6Ilx0Ijt2YXIgZD1ZbihpLCExKSxtPSExO2Z1bmN0aW9uIGcoKXtyZXR1cm4gdStycihsLHIrZil9ZnVuY3Rpb24gcCgpe3ZhciBlPWQuc2NhbigpO2ZvcihoPSExOzE1PT09ZXx8MTQ9PT1lOyloPWh8fDE0PT09ZSxlPWQuc2NhbigpO3JldHVybiBtPTE2PT09ZXx8MCE9PWQuZ2V0VG9rZW5FcnJvcigpLGV9dmFyIGI9W107ZnVuY3Rpb24gdihuLHIsaSl7bXx8dCYmIShyPHMmJmk+YSl8fGUuc3Vic3RyaW5nKHIsaSk9PT1ufHxiLnB1c2goe29mZnNldDpyLGxlbmd0aDppLXIsY29udGVudDpufSl9dmFyIHk9cCgpO2lmKDE3IT09eSl7dmFyIEM9ZC5nZXRUb2tlbk9mZnNldCgpK287dihycihsLHIpLG8sQyl9Zm9yKDsxNyE9PXk7KXtmb3IodmFyIHc9ZC5nZXRUb2tlbk9mZnNldCgpK2QuZ2V0VG9rZW5MZW5ndGgoKStvLF89cCgpLFM9IiIsQT0hMTshaCYmKDEyPT09X3x8MTM9PT1fKTspe3YoIiAiLHcsZC5nZXRUb2tlbk9mZnNldCgpK28pLHc9ZC5nZXRUb2tlbk9mZnNldCgpK2QuZ2V0VG9rZW5MZW5ndGgoKStvLFM9KEE9MTI9PT1fKT9nKCk6IiIsXz1wKCl9aWYoMj09PV8pMSE9PXkmJihmLS0sUz1nKCkpO2Vsc2UgaWYoND09PV8pMyE9PXkmJihmLS0sUz1nKCkpO2Vsc2V7c3dpdGNoKHkpe2Nhc2UgMzpjYXNlIDE6ZisrLFM9ZygpO2JyZWFrO2Nhc2UgNTpjYXNlIDEyOlM9ZygpO2JyZWFrO2Nhc2UgMTM6aD9TPWcoKTpBfHwoUz0iICIpO2JyZWFrO2Nhc2UgNjpBfHwoUz0iICIpO2JyZWFrO2Nhc2UgMTA6aWYoNj09PV8pe0F8fChTPSIiKTticmVha31jYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDExOmNhc2UgMjpjYXNlIDQ6MTI9PT1ffHwxMz09PV8/QXx8KFM9IiAiKTo1IT09XyYmMTchPT1fJiYobT0hMCk7YnJlYWs7Y2FzZSAxNjptPSEwfSFofHwxMiE9PV8mJjEzIT09X3x8KFM9ZygpKX0xNz09PV8mJihTPW4uaW5zZXJ0RmluYWxOZXdsaW5lP3U6IiIpLHYoUyx3LGQuZ2V0VG9rZW5PZmZzZXQoKStvKSx5PV99cmV0dXJuIGJ9ZnVuY3Rpb24gcnIoZSx0KXtmb3IodmFyIG49IiIscj0wO3I8dDtyKyspbis9ZTtyZXR1cm4gbn1mdW5jdGlvbiBpcihlLHQpe3JldHVybi0xIT09IlxyXG4iLmluZGV4T2YoZS5jaGFyQXQodCkpfXZhciBvcjtzZWxmLm9ubWVzc2FnZT1lPT57WG58fFpuKG51bGwpfSwob3J8fChvcj17fSkpLkRFRkFVTFQ9e2FsbG93VHJhaWxpbmdDb21tYTohMX07dmFyIGFyLHNyLGNyLGxyLHVyLGhyLGZyLGRyLG1yLGdyLHByLGJyLHZyLHlyLENyLHdyLF9yLFNyLEFyLEVyLHhyLE5yLGtyLExyLFRyLE9yLElyLE1yLFByLFJyLFZyLEZyLERyLEtyLGpyLFVyLEJyLHFyLCRyLFdyLEhyLHpyLEdyLEpyLFhyLFpyLFlyLFFyLGVpLHRpPVluLG5pPWZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49b3IuREVGQVVMVCk7dmFyIHI9bnVsbCxpPVtdLG89W107ZnVuY3Rpb24gYShlKXtBcnJheS5pc0FycmF5KGkpP2kucHVzaChlKTpudWxsIT09ciYmKGlbcl09ZSl9cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT1uJiYobj1vci5ERUZBVUxUKTt2YXIgcj1ZbihlLCExKTtmdW5jdGlvbiBpKGUpe3JldHVybiBlP2Z1bmN0aW9uKCl7cmV0dXJuIGUoci5nZXRUb2tlbk9mZnNldCgpLHIuZ2V0VG9rZW5MZW5ndGgoKSxyLmdldFRva2VuU3RhcnRMaW5lKCksci5nZXRUb2tlblN0YXJ0Q2hhcmFjdGVyKCkpfTpmdW5jdGlvbigpe3JldHVybiEwfX1mdW5jdGlvbiBvKGUpe3JldHVybiBlP2Z1bmN0aW9uKHQpe3JldHVybiBlKHQsci5nZXRUb2tlbk9mZnNldCgpLHIuZ2V0VG9rZW5MZW5ndGgoKSxyLmdldFRva2VuU3RhcnRMaW5lKCksci5nZXRUb2tlblN0YXJ0Q2hhcmFjdGVyKCkpfTpmdW5jdGlvbigpe3JldHVybiEwfX12YXIgYT1pKHQub25PYmplY3RCZWdpbikscz1vKHQub25PYmplY3RQcm9wZXJ0eSksYz1pKHQub25PYmplY3RFbmQpLGw9aSh0Lm9uQXJyYXlCZWdpbiksdT1pKHQub25BcnJheUVuZCksaD1vKHQub25MaXRlcmFsVmFsdWUpLGY9byh0Lm9uU2VwYXJhdG9yKSxkPWkodC5vbkNvbW1lbnQpLG09byh0Lm9uRXJyb3IpLGc9biYmbi5kaXNhbGxvd0NvbW1lbnRzLHA9biYmbi5hbGxvd1RyYWlsaW5nQ29tbWE7ZnVuY3Rpb24gYigpe2Zvcig7Oyl7dmFyIGU9ci5zY2FuKCk7c3dpdGNoKHIuZ2V0VG9rZW5FcnJvcigpKXtjYXNlIDQ6digxNCk7YnJlYWs7Y2FzZSA1OnYoMTUpO2JyZWFrO2Nhc2UgMzp2KDEzKTticmVhaztjYXNlIDE6Z3x8digxMSk7YnJlYWs7Y2FzZSAyOnYoMTIpO2JyZWFrO2Nhc2UgNjp2KDE2KX1zd2l0Y2goZSl7Y2FzZSAxMjpjYXNlIDEzOmc/digxMCk6ZCgpO2JyZWFrO2Nhc2UgMTY6digxKTticmVhaztjYXNlIDE1OmNhc2UgMTQ6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gZX19fWZ1bmN0aW9uIHYoZSx0LG4pe2lmKHZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1uJiYobj1bXSksbShlKSx0Lmxlbmd0aCtuLmxlbmd0aD4wKWZvcih2YXIgaT1yLmdldFRva2VuKCk7MTchPT1pOyl7aWYoLTEhPT10LmluZGV4T2YoaSkpe2IoKTticmVha31pZigtMSE9PW4uaW5kZXhPZihpKSlicmVhaztpPWIoKX19ZnVuY3Rpb24geShlKXt2YXIgdD1yLmdldFRva2VuVmFsdWUoKTtyZXR1cm4gZT9oKHQpOnModCksYigpLCEwfWZ1bmN0aW9uIEMoKXtzd2l0Y2goci5nZXRUb2tlbigpKXtjYXNlIDExOnZhciBlPXIuZ2V0VG9rZW5WYWx1ZSgpLHQ9TnVtYmVyKGUpO2lzTmFOKHQpJiYodigyKSx0PTApLGgodCk7YnJlYWs7Y2FzZSA3OmgobnVsbCk7YnJlYWs7Y2FzZSA4OmgoITApO2JyZWFrO2Nhc2UgOTpoKCExKTticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiBiKCksITB9ZnVuY3Rpb24gdygpe3JldHVybiAxMCE9PXIuZ2V0VG9rZW4oKT8odigzLFtdLFsyLDVdKSwhMSk6KHkoITEpLDY9PT1yLmdldFRva2VuKCk/KGYoIjoiKSxiKCksQSgpfHx2KDQsW10sWzIsNV0pKTp2KDUsW10sWzIsNV0pLCEwKX1mdW5jdGlvbiBfKCl7YSgpLGIoKTtmb3IodmFyIGU9ITE7MiE9PXIuZ2V0VG9rZW4oKSYmMTchPT1yLmdldFRva2VuKCk7KXtpZig1PT09ci5nZXRUb2tlbigpKXtpZihlfHx2KDQsW10sW10pLGYoIiwiKSxiKCksMj09PXIuZ2V0VG9rZW4oKSYmcClicmVha31lbHNlIGUmJnYoNixbXSxbXSk7dygpfHx2KDQsW10sWzIsNV0pLGU9ITB9cmV0dXJuIGMoKSwyIT09ci5nZXRUb2tlbigpP3YoNyxbMl0sW10pOmIoKSwhMH1mdW5jdGlvbiBTKCl7bCgpLGIoKTtmb3IodmFyIGU9ITE7NCE9PXIuZ2V0VG9rZW4oKSYmMTchPT1yLmdldFRva2VuKCk7KXtpZig1PT09ci5nZXRUb2tlbigpKXtpZihlfHx2KDQsW10sW10pLGYoIiwiKSxiKCksND09PXIuZ2V0VG9rZW4oKSYmcClicmVha31lbHNlIGUmJnYoNixbXSxbXSk7QSgpfHx2KDQsW10sWzQsNV0pLGU9ITB9cmV0dXJuIHUoKSw0IT09ci5nZXRUb2tlbigpP3YoOCxbNF0sW10pOmIoKSwhMH1mdW5jdGlvbiBBKCl7c3dpdGNoKHIuZ2V0VG9rZW4oKSl7Y2FzZSAzOnJldHVybiBTKCk7Y2FzZSAxOnJldHVybiBfKCk7Y2FzZSAxMDpyZXR1cm4geSghMCk7ZGVmYXVsdDpyZXR1cm4gQygpfX1pZihiKCksMTc9PT1yLmdldFRva2VuKCkpcmV0dXJuISFuLmFsbG93RW1wdHlDb250ZW50fHwodig0LFtdLFtdKSwhMSk7aWYoIUEoKSlyZXR1cm4gdig0LFtdLFtdKSwhMTsxNyE9PXIuZ2V0VG9rZW4oKSYmdig5LFtdLFtdKX0oZSx7b25PYmplY3RCZWdpbjpmdW5jdGlvbigpe3ZhciBlPXt9O2EoZSksby5wdXNoKGkpLGk9ZSxyPW51bGx9LG9uT2JqZWN0UHJvcGVydHk6ZnVuY3Rpb24oZSl7cj1lfSxvbk9iamVjdEVuZDpmdW5jdGlvbigpe2k9by5wb3AoKX0sb25BcnJheUJlZ2luOmZ1bmN0aW9uKCl7dmFyIGU9W107YShlKSxvLnB1c2goaSksaT1lLHI9bnVsbH0sb25BcnJheUVuZDpmdW5jdGlvbigpe2k9by5wb3AoKX0sb25MaXRlcmFsVmFsdWU6YSxvbkVycm9yOmZ1bmN0aW9uKGUsbixyKXt0LnB1c2goe2Vycm9yOmUsb2Zmc2V0Om4sbGVuZ3RoOnJ9KX19LG4pLGlbMF19LHJpPWZ1bmN0aW9uIGUodCxuLHIpe2lmKHZvaWQgMD09PXImJihyPSExKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPSExKSx0Pj1lLm9mZnNldCYmdDxlLm9mZnNldCtlLmxlbmd0aHx8biYmdD09PWUub2Zmc2V0K2UubGVuZ3RofSh0LG4scikpe3ZhciBpPXQuY2hpbGRyZW47aWYoQXJyYXkuaXNBcnJheShpKSlmb3IodmFyIG89MDtvPGkubGVuZ3RoJiZpW29dLm9mZnNldDw9bjtvKyspe3ZhciBhPWUoaVtvXSxuLHIpO2lmKGEpcmV0dXJuIGF9cmV0dXJuIHR9fSxpaT1mdW5jdGlvbiBlKHQpe2lmKCF0LnBhcmVudHx8IXQucGFyZW50LmNoaWxkcmVuKXJldHVybltdO3ZhciBuPWUodC5wYXJlbnQpO2lmKCJwcm9wZXJ0eSI9PT10LnBhcmVudC50eXBlKXt2YXIgcj10LnBhcmVudC5jaGlsZHJlblswXS52YWx1ZTtuLnB1c2gocil9ZWxzZSBpZigiYXJyYXkiPT09dC5wYXJlbnQudHlwZSl7dmFyIGk9dC5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0KTstMSE9PWkmJm4ucHVzaChpKX1yZXR1cm4gbn0sb2k9ZnVuY3Rpb24gZSh0KXtzd2l0Y2godC50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4gdC5jaGlsZHJlbi5tYXAoZSk7Y2FzZSJvYmplY3QiOmZvcih2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9MCxpPXQuY2hpbGRyZW47cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl0sYT1vLmNoaWxkcmVuWzFdO2EmJihuW28uY2hpbGRyZW5bMF0udmFsdWVdPWUoYSkpfXJldHVybiBuO2Nhc2UibnVsbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOnJldHVybiB0LnZhbHVlO2RlZmF1bHQ6cmV0dXJufX07ZnVuY3Rpb24gYWkoZSx0KXtpZihlPT09dClyZXR1cm4hMDtpZihudWxsPT1lfHxudWxsPT10KXJldHVybiExO2lmKHR5cGVvZiBlIT10eXBlb2YgdClyZXR1cm4hMTtpZigib2JqZWN0IiE9dHlwZW9mIGUpcmV0dXJuITE7aWYoQXJyYXkuaXNBcnJheShlKSE9PUFycmF5LmlzQXJyYXkodCkpcmV0dXJuITE7dmFyIG4scjtpZihBcnJheS5pc0FycmF5KGUpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYoIWFpKGVbbl0sdFtuXSkpcmV0dXJuITF9ZWxzZXt2YXIgaT1bXTtmb3IociBpbiBlKWkucHVzaChyKTtpLnNvcnQoKTt2YXIgbz1bXTtmb3IociBpbiB0KW8ucHVzaChyKTtpZihvLnNvcnQoKSwhYWkoaSxvKSlyZXR1cm4hMTtmb3Iobj0wO248aS5sZW5ndGg7bisrKWlmKCFhaShlW2lbbl1dLHRbaVtuXV0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHNpKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX1mdW5jdGlvbiBjaShlKXtyZXR1cm4gdm9pZCAwIT09ZX1mdW5jdGlvbiBsaShlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlfWZ1bmN0aW9uIHVpKGUsdCl7dmFyIG49ZS5sZW5ndGgtdC5sZW5ndGg7cmV0dXJuIG4+MD9lLmxhc3RJbmRleE9mKHQpPT09bjowPT09biYmZT09PXR9ZnVuY3Rpb24gaGkoZSl7dmFyIHQ9IiI7KGZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoZVtuXSE9PXRbbl0pcmV0dXJuITE7cmV0dXJuITB9KShlLCIoP2kpIikmJihlPWUuc3Vic3RyaW5nKDQpLHQ9ImkiKTt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoZSx0KyJ1Iil9Y2F0Y2gobil7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCl9Y2F0Y2goZSl7cmV0dXJufX19KHNyPWFyfHwoYXI9e30pKS5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsc3IuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsKGxyPWNyfHwoY3I9e30pKS5NSU5fVkFMVUU9MCxsci5NQVhfVkFMVUU9MjE0NzQ4MzY0NywoaHI9dXJ8fCh1cj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09TnVtYmVyLk1BWF9WQUxVRSYmKGU9Y3IuTUFYX1ZBTFVFKSx0PT09TnVtYmVyLk1BWF9WQUxVRSYmKHQ9Y3IuTUFYX1ZBTFVFKSx7bGluZTplLGNoYXJhY3Rlcjp0fX0saHIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8ub2JqZWN0TGl0ZXJhbCh0KSYmaG8udWludGVnZXIodC5saW5lKSYmaG8udWludGVnZXIodC5jaGFyYWN0ZXIpfSwoZHI9ZnJ8fChmcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtpZihoby51aW50ZWdlcihlKSYmaG8udWludGVnZXIodCkmJmhvLnVpbnRlZ2VyKG4pJiZoby51aW50ZWdlcihyKSlyZXR1cm57c3RhcnQ6dXIuY3JlYXRlKGUsdCksZW5kOnVyLmNyZWF0ZShuLHIpfTtpZih1ci5pcyhlKSYmdXIuaXModCkpcmV0dXJue3N0YXJ0OmUsZW5kOnR9O3Rocm93IG5ldyBFcnJvcigiUmFuZ2UjY3JlYXRlIGNhbGxlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzWyIrZSsiLCAiK3QrIiwgIituKyIsICIrcisiXSIpfSxkci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5vYmplY3RMaXRlcmFsKHQpJiZ1ci5pcyh0LnN0YXJ0KSYmdXIuaXModC5lbmQpfSwoZ3I9bXJ8fChtcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSxyYW5nZTp0fX0sZ3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmZnIuaXModC5yYW5nZSkmJihoby5zdHJpbmcodC51cmkpfHxoby51bmRlZmluZWQodC51cmkpKX0sKGJyPXByfHwocHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJue3RhcmdldFVyaTplLHRhcmdldFJhbmdlOnQsdGFyZ2V0U2VsZWN0aW9uUmFuZ2U6bixvcmlnaW5TZWxlY3Rpb25SYW5nZTpyfX0sYnIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmZnIuaXModC50YXJnZXRSYW5nZSkmJmhvLnN0cmluZyh0LnRhcmdldFVyaSkmJihmci5pcyh0LnRhcmdldFNlbGVjdGlvblJhbmdlKXx8aG8udW5kZWZpbmVkKHQudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpKSYmKGZyLmlzKHQub3JpZ2luU2VsZWN0aW9uUmFuZ2UpfHxoby51bmRlZmluZWQodC5vcmlnaW5TZWxlY3Rpb25SYW5nZSkpfSwoeXI9dnJ8fCh2cj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm57cmVkOmUsZ3JlZW46dCxibHVlOm4sYWxwaGE6cn19LHlyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLm51bWJlclJhbmdlKHQucmVkLDAsMSkmJmhvLm51bWJlclJhbmdlKHQuZ3JlZW4sMCwxKSYmaG8ubnVtYmVyUmFuZ2UodC5ibHVlLDAsMSkmJmhvLm51bWJlclJhbmdlKHQuYWxwaGEsMCwxKX0sKHdyPUNyfHwoQ3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxjb2xvcjp0fX0sd3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gZnIuaXModC5yYW5nZSkmJnZyLmlzKHQuY29sb3IpfSwoU3I9X3J8fChfcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJue2xhYmVsOmUsdGV4dEVkaXQ6dCxhZGRpdGlvbmFsVGV4dEVkaXRzOm59fSxTci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5zdHJpbmcodC5sYWJlbCkmJihoby51bmRlZmluZWQodC50ZXh0RWRpdCl8fEtyLmlzKHQpKSYmKGhvLnVuZGVmaW5lZCh0LmFkZGl0aW9uYWxUZXh0RWRpdHMpfHxoby50eXBlZEFycmF5KHQuYWRkaXRpb25hbFRleHRFZGl0cyxLci5pcykpfSwoRXI9QXJ8fChBcj17fSkpLkNvbW1lbnQ9ImNvbW1lbnQiLEVyLkltcG9ydHM9ImltcG9ydHMiLEVyLlJlZ2lvbj0icmVnaW9uIiwoTnI9eHJ8fCh4cj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPXtzdGFydExpbmU6ZSxlbmRMaW5lOnR9O3JldHVybiBoby5kZWZpbmVkKG4pJiYoby5zdGFydENoYXJhY3Rlcj1uKSxoby5kZWZpbmVkKHIpJiYoby5lbmRDaGFyYWN0ZXI9ciksaG8uZGVmaW5lZChpKSYmKG8ua2luZD1pKSxvfSxOci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby51aW50ZWdlcih0LnN0YXJ0TGluZSkmJmhvLnVpbnRlZ2VyKHQuc3RhcnRMaW5lKSYmKGhvLnVuZGVmaW5lZCh0LnN0YXJ0Q2hhcmFjdGVyKXx8aG8udWludGVnZXIodC5zdGFydENoYXJhY3RlcikpJiYoaG8udW5kZWZpbmVkKHQuZW5kQ2hhcmFjdGVyKXx8aG8udWludGVnZXIodC5lbmRDaGFyYWN0ZXIpKSYmKGhvLnVuZGVmaW5lZCh0LmtpbmQpfHxoby5zdHJpbmcodC5raW5kKSl9LChMcj1rcnx8KGtyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2xvY2F0aW9uOmUsbWVzc2FnZTp0fX0sTHIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmbXIuaXModC5sb2NhdGlvbikmJmhvLnN0cmluZyh0Lm1lc3NhZ2UpfSwoT3I9VHJ8fChUcj17fSkpLkVycm9yPTEsT3IuV2FybmluZz0yLE9yLkluZm9ybWF0aW9uPTMsT3IuSGludD00LChNcj1Jcnx8KElyPXt9KSkuVW5uZWNlc3Nhcnk9MSxNci5EZXByZWNhdGVkPTIsKFByfHwoUHI9e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBudWxsIT10JiZoby5zdHJpbmcodC5ocmVmKX0sKFZyPVJyfHwoUnI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPXtyYW5nZTplLG1lc3NhZ2U6dH07cmV0dXJuIGhvLmRlZmluZWQobikmJihhLnNldmVyaXR5PW4pLGhvLmRlZmluZWQocikmJihhLmNvZGU9ciksaG8uZGVmaW5lZChpKSYmKGEuc291cmNlPWkpLGhvLmRlZmluZWQobykmJihhLnJlbGF0ZWRJbmZvcm1hdGlvbj1vKSxhfSxWci5pcz1mdW5jdGlvbihlKXt2YXIgdCxuPWU7cmV0dXJuIGhvLmRlZmluZWQobikmJmZyLmlzKG4ucmFuZ2UpJiZoby5zdHJpbmcobi5tZXNzYWdlKSYmKGhvLm51bWJlcihuLnNldmVyaXR5KXx8aG8udW5kZWZpbmVkKG4uc2V2ZXJpdHkpKSYmKGhvLmludGVnZXIobi5jb2RlKXx8aG8uc3RyaW5nKG4uY29kZSl8fGhvLnVuZGVmaW5lZChuLmNvZGUpKSYmKGhvLnVuZGVmaW5lZChuLmNvZGVEZXNjcmlwdGlvbil8fGhvLnN0cmluZyhudWxsPT09KHQ9bi5jb2RlRGVzY3JpcHRpb24pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmhyZWYpKSYmKGhvLnN0cmluZyhuLnNvdXJjZSl8fGhvLnVuZGVmaW5lZChuLnNvdXJjZSkpJiYoaG8udW5kZWZpbmVkKG4ucmVsYXRlZEluZm9ybWF0aW9uKXx8aG8udHlwZWRBcnJheShuLnJlbGF0ZWRJbmZvcm1hdGlvbixrci5pcykpfSwoRHI9RnJ8fChGcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxyPTI7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyluW3ItMl09YXJndW1lbnRzW3JdO3ZhciBpPXt0aXRsZTplLGNvbW1hbmQ6dH07cmV0dXJuIGhvLmRlZmluZWQobikmJm4ubGVuZ3RoPjAmJihpLmFyZ3VtZW50cz1uKSxpfSxEci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZoby5zdHJpbmcodC50aXRsZSkmJmhvLnN0cmluZyh0LmNvbW1hbmQpfSwoanI9S3J8fChLcj17fSkpLnJlcGxhY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OnR9fSxqci5pbnNlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmUsZW5kOmV9LG5ld1RleHQ6dH19LGpyLmRlbD1mdW5jdGlvbihlKXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OiIifX0sanIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8ub2JqZWN0TGl0ZXJhbCh0KSYmaG8uc3RyaW5nKHQubmV3VGV4dCkmJmZyLmlzKHQucmFuZ2UpfSwoQnI9VXJ8fChVcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e2xhYmVsOmV9O3JldHVybiB2b2lkIDAhPT10JiYoci5uZWVkc0NvbmZpcm1hdGlvbj10KSx2b2lkIDAhPT1uJiYoci5kZXNjcmlwdGlvbj1uKSxyfSxCci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB2b2lkIDAhPT10JiZoby5vYmplY3RMaXRlcmFsKHQpJiZoby5zdHJpbmcodC5sYWJlbCkmJihoby5ib29sZWFuKHQubmVlZHNDb25maXJtYXRpb24pfHx2b2lkIDA9PT10Lm5lZWRzQ29uZmlybWF0aW9uKSYmKGhvLnN0cmluZyh0LmRlc2NyaXB0aW9uKXx8dm9pZCAwPT09dC5kZXNjcmlwdGlvbil9LChxcnx8KHFyPXt9KSkuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSwoV3I9JHJ8fCgkcj17fSkpLnJlcGxhY2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTplLG5ld1RleHQ6dCxhbm5vdGF0aW9uSWQ6bn19LFdyLmluc2VydD1mdW5jdGlvbihlLHQsbil7cmV0dXJue3JhbmdlOntzdGFydDplLGVuZDplfSxuZXdUZXh0OnQsYW5ub3RhdGlvbklkOm59fSxXci5kZWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OiIiLGFubm90YXRpb25JZDp0fX0sV3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gS3IuaXModCkmJihVci5pcyh0LmFubm90YXRpb25JZCl8fHFyLmlzKHQuYW5ub3RhdGlvbklkKSl9LCh6cj1Icnx8KEhyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3RleHREb2N1bWVudDplLGVkaXRzOnR9fSx6ci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZwaS5pcyh0LnRleHREb2N1bWVudCkmJkFycmF5LmlzQXJyYXkodC5lZGl0cyl9LChKcj1Hcnx8KEdyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17a2luZDoiY3JlYXRlIix1cmk6ZX07cmV0dXJuIHZvaWQgMD09PXR8fHZvaWQgMD09PXQub3ZlcndyaXRlJiZ2b2lkIDA9PT10Lmlnbm9yZUlmRXhpc3RzfHwoci5vcHRpb25zPXQpLHZvaWQgMCE9PW4mJihyLmFubm90YXRpb25JZD1uKSxyfSxKci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYiY3JlYXRlIj09PXQua2luZCYmaG8uc3RyaW5nKHQudXJpKSYmKHZvaWQgMD09PXQub3B0aW9uc3x8KHZvaWQgMD09PXQub3B0aW9ucy5vdmVyd3JpdGV8fGhvLmJvb2xlYW4odC5vcHRpb25zLm92ZXJ3cml0ZSkpJiYodm9pZCAwPT09dC5vcHRpb25zLmlnbm9yZUlmRXhpc3RzfHxoby5ib29sZWFuKHQub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHZvaWQgMD09PXQuYW5ub3RhdGlvbklkfHxxci5pcyh0LmFubm90YXRpb25JZCkpfSwoWnI9WHJ8fChYcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT17a2luZDoicmVuYW1lIixvbGRVcmk6ZSxuZXdVcmk6dH07cmV0dXJuIHZvaWQgMD09PW58fHZvaWQgMD09PW4ub3ZlcndyaXRlJiZ2b2lkIDA9PT1uLmlnbm9yZUlmRXhpc3RzfHwoaS5vcHRpb25zPW4pLHZvaWQgMCE9PXImJihpLmFubm90YXRpb25JZD1yKSxpfSxaci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYicmVuYW1lIj09PXQua2luZCYmaG8uc3RyaW5nKHQub2xkVXJpKSYmaG8uc3RyaW5nKHQubmV3VXJpKSYmKHZvaWQgMD09PXQub3B0aW9uc3x8KHZvaWQgMD09PXQub3B0aW9ucy5vdmVyd3JpdGV8fGhvLmJvb2xlYW4odC5vcHRpb25zLm92ZXJ3cml0ZSkpJiYodm9pZCAwPT09dC5vcHRpb25zLmlnbm9yZUlmRXhpc3RzfHxoby5ib29sZWFuKHQub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHZvaWQgMD09PXQuYW5ub3RhdGlvbklkfHxxci5pcyh0LmFubm90YXRpb25JZCkpfSwoUXI9WXJ8fChZcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e2tpbmQ6ImRlbGV0ZSIsdXJpOmV9O3JldHVybiB2b2lkIDA9PT10fHx2b2lkIDA9PT10LnJlY3Vyc2l2ZSYmdm9pZCAwPT09dC5pZ25vcmVJZk5vdEV4aXN0c3x8KHIub3B0aW9ucz10KSx2b2lkIDAhPT1uJiYoci5hbm5vdGF0aW9uSWQ9bikscn0sUXIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmImRlbGV0ZSI9PT10LmtpbmQmJmhvLnN0cmluZyh0LnVyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMucmVjdXJzaXZlfHxoby5ib29sZWFuKHQub3B0aW9ucy5yZWN1cnNpdmUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0c3x8aG8uYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8cXIuaXModC5hbm5vdGF0aW9uSWQpKX0sKGVpfHwoZWk9e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYodm9pZCAwIT09dC5jaGFuZ2VzfHx2b2lkIDAhPT10LmRvY3VtZW50Q2hhbmdlcykmJih2b2lkIDA9PT10LmRvY3VtZW50Q2hhbmdlc3x8dC5kb2N1bWVudENoYW5nZXMuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBoby5zdHJpbmcoZS5raW5kKT9Hci5pcyhlKXx8WHIuaXMoZSl8fFlyLmlzKGUpOkhyLmlzKGUpfSkpKX07dmFyIGZpLGRpLG1pLGdpLHBpLGJpLHZpLHlpLENpLHdpLF9pLFNpLEFpLEVpLHhpLE5pLGtpLExpLFRpLE9pLElpLE1pLFBpLFJpLFZpLEZpLERpLEtpLGppLFVpLEJpLHFpLCRpLFdpLEhpLHppLEdpLEppLFhpLFppLFlpLFFpLGVvLHRvLG5vLHJvLGlvLG9vLGFvLHNvLGNvLGxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuZWRpdHM9ZSx0aGlzLmNoYW5nZUFubm90YXRpb25zPXR9cmV0dXJuIGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZih2b2lkIDA9PT1uP3I9S3IuaW5zZXJ0KGUsdCk6cXIuaXMobik/KGk9bixyPSRyLmluc2VydChlLHQsbikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLGk9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2Uobikscj0kci5pbnNlcnQoZSx0LGkpKSx0aGlzLmVkaXRzLnB1c2gociksdm9pZCAwIT09aSlyZXR1cm4gaX0sZS5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZih2b2lkIDA9PT1uP3I9S3IucmVwbGFjZShlLHQpOnFyLmlzKG4pPyhpPW4scj0kci5yZXBsYWNlKGUsdCxuKSk6KHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucyksaT10aGlzLmNoYW5nZUFubm90YXRpb25zLm1hbmFnZShuKSxyPSRyLnJlcGxhY2UoZSx0LGkpKSx0aGlzLmVkaXRzLnB1c2gociksdm9pZCAwIT09aSlyZXR1cm4gaX0sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZih2b2lkIDA9PT10P249S3IuZGVsKGUpOnFyLmlzKHQpPyhyPXQsbj0kci5kZWwoZSx0KSk6KHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucykscj10aGlzLmNoYW5nZUFubm90YXRpb25zLm1hbmFnZSh0KSxuPSRyLmRlbChlLHIpKSx0aGlzLmVkaXRzLnB1c2gobiksdm9pZCAwIT09cilyZXR1cm4gcn0sZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuZWRpdHMucHVzaChlKX0sZS5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdHN9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5lZGl0cy5zcGxpY2UoMCx0aGlzLmVkaXRzLmxlbmd0aCl9LGUucHJvdG90eXBlLmFzc2VydENoYW5nZUFubm90YXRpb25zPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJUZXh0IGVkaXQgY2hhbmdlIGlzIG5vdCBjb25maWd1cmVkIHRvIG1hbmFnZSBjaGFuZ2UgYW5ub3RhdGlvbnMuIil9LGV9KCksdW89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuX2Fubm90YXRpb25zPXZvaWQgMD09PWU/T2JqZWN0LmNyZWF0ZShudWxsKTplLHRoaXMuX2NvdW50ZXI9MCx0aGlzLl9zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NpemV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubWFuYWdlPWZ1bmN0aW9uKGUsdCl7dmFyIG47aWYocXIuaXMoZSk/bj1lOihuPXRoaXMubmV4dElkKCksdD1lKSx2b2lkIDAhPT10aGlzLl9hbm5vdGF0aW9uc1tuXSl0aHJvdyBuZXcgRXJyb3IoIklkICIrbisiIGlzIGFscmVhZHkgaW4gdXNlLiIpO2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IEVycm9yKCJObyBhbm5vdGF0aW9uIHByb3ZpZGVkIGZvciBpZCAiK24pO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uc1tuXT10LHRoaXMuX3NpemUrKyxufSxlLnByb3RvdHlwZS5uZXh0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY291bnRlcisrLHRoaXMuX2NvdW50ZXIudG9TdHJpbmcoKX0sZX0oKTshZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PXRoaXM7dGhpcy5fdGV4dEVkaXRDaGFuZ2VzPU9iamVjdC5jcmVhdGUobnVsbCksdm9pZCAwIT09ZT8odGhpcy5fd29ya3NwYWNlRWRpdD1lLGUuZG9jdW1lbnRDaGFuZ2VzPyh0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucz1uZXcgdW8oZS5jaGFuZ2VBbm5vdGF0aW9ucyksZS5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSxlLmRvY3VtZW50Q2hhbmdlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihIci5pcyhlKSl7dmFyIG49bmV3IGxvKGUuZWRpdHMsdC5fY2hhbmdlQW5ub3RhdGlvbnMpO3QuX3RleHRFZGl0Q2hhbmdlc1tlLnRleHREb2N1bWVudC51cmldPW59fSkpKTplLmNoYW5nZXMmJk9iamVjdC5rZXlzKGUuY2hhbmdlcykuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9bmV3IGxvKGUuY2hhbmdlc1tuXSk7dC5fdGV4dEVkaXRDaGFuZ2VzW25dPXJ9KSkpOnRoaXMuX3dvcmtzcGFjZUVkaXQ9e319T2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJlZGl0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMCE9PXRoaXMuX2NoYW5nZUFubm90YXRpb25zJiYoMD09PXRoaXMuX2NoYW5nZUFubm90YXRpb25zLnNpemU/dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz12b2lkIDA6dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSksdGhpcy5fd29ya3NwYWNlRWRpdH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXRUZXh0RWRpdENoYW5nZT1mdW5jdGlvbihlKXtpZihwaS5pcyhlKSl7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgdD17dXJpOmUudXJpLHZlcnNpb246ZS52ZXJzaW9ufTtpZighKHI9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3QudXJpXSkpe3ZhciBuPXt0ZXh0RG9jdW1lbnQ6dCxlZGl0czppPVtdfTt0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKG4pLHI9bmV3IGxvKGksdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0LnVyaV09cn1yZXR1cm4gcn1pZih0aGlzLmluaXRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIG5vcm1hbCB0ZXh0IGVkaXQgY2hhbmdlcy4iKTt2YXIgcjtpZighKHI9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW2VdKSl7dmFyIGk9W107dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzW2VdPWkscj1uZXcgbG8oaSksdGhpcy5fdGV4dEVkaXRDaGFuZ2VzW2VdPXJ9cmV0dXJuIHJ9LGUucHJvdG90eXBlLmluaXREb2N1bWVudENoYW5nZXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyYmdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzJiYodGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IHVvLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzPVtdLHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCkpfSxlLnByb3RvdHlwZS5pbml0Q2hhbmdlcz1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzJiZ2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMmJih0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSl9LGUucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHIsaSxvO2lmKFVyLmlzKHQpfHxxci5pcyh0KT9yPXQ6bj10LHZvaWQgMD09PXI/aT1Hci5jcmVhdGUoZSxuKToobz1xci5pcyhyKT9yOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShyKSxpPUdyLmNyZWF0ZShlLG4sbykpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2goaSksdm9pZCAwIT09bylyZXR1cm4gb30sZS5wcm90b3R5cGUucmVuYW1lRmlsZT1mdW5jdGlvbihlLHQsbixyKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBpLG8sYTtpZihVci5pcyhuKXx8cXIuaXMobik/aT1uOnI9bix2b2lkIDA9PT1pP289WHIuY3JlYXRlKGUsdCxyKTooYT1xci5pcyhpKT9pOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShpKSxvPVhyLmNyZWF0ZShlLHQscixhKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChvKSx2b2lkIDAhPT1hKXJldHVybiBhfSxlLnByb3RvdHlwZS5kZWxldGVGaWxlPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciByLGksbztpZihVci5pcyh0KXx8cXIuaXModCk/cj10Om49dCx2b2lkIDA9PT1yP2k9WXIuY3JlYXRlKGUsbik6KG89cXIuaXMocik/cjp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksaT1Zci5jcmVhdGUoZSxuLG8pKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKGkpLHZvaWQgMCE9PW8pcmV0dXJuIG99fSgpLChkaT1maXx8KGZpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybnt1cmk6ZX19LGRpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnN0cmluZyh0LnVyaSl9LChnaT1taXx8KG1pPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3VyaTplLHZlcnNpb246dH19LGdpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnN0cmluZyh0LnVyaSkmJmhvLmludGVnZXIodC52ZXJzaW9uKX0sKGJpPXBpfHwocGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dXJpOmUsdmVyc2lvbjp0fX0sYmkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmaG8uc3RyaW5nKHQudXJpKSYmKG51bGw9PT10LnZlcnNpb258fGhvLmludGVnZXIodC52ZXJzaW9uKSl9LCh5aT12aXx8KHZpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybnt1cmk6ZSxsYW5ndWFnZUlkOnQsdmVyc2lvbjpuLHRleHQ6cn19LHlpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnN0cmluZyh0LnVyaSkmJmhvLnN0cmluZyh0Lmxhbmd1YWdlSWQpJiZoby5pbnRlZ2VyKHQudmVyc2lvbikmJmhvLnN0cmluZyh0LnRleHQpfSwod2k9Q2l8fChDaT17fSkpLlBsYWluVGV4dD0icGxhaW50ZXh0Iix3aS5NYXJrZG93bj0ibWFya2Rvd24iLGZ1bmN0aW9uKGUpe2UuaXM9ZnVuY3Rpb24odCl7dmFyIG49dDtyZXR1cm4gbj09PWUuUGxhaW5UZXh0fHxuPT09ZS5NYXJrZG93bn19KENpfHwoQ2k9e30pKSwoX2l8fChfaT17fSkpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLm9iamVjdExpdGVyYWwoZSkmJkNpLmlzKHQua2luZCkmJmhvLnN0cmluZyh0LnZhbHVlKX0sKEFpPVNpfHwoU2k9e30pKS5UZXh0PTEsQWkuTWV0aG9kPTIsQWkuRnVuY3Rpb249MyxBaS5Db25zdHJ1Y3Rvcj00LEFpLkZpZWxkPTUsQWkuVmFyaWFibGU9NixBaS5DbGFzcz03LEFpLkludGVyZmFjZT04LEFpLk1vZHVsZT05LEFpLlByb3BlcnR5PTEwLEFpLlVuaXQ9MTEsQWkuVmFsdWU9MTIsQWkuRW51bT0xMyxBaS5LZXl3b3JkPTE0LEFpLlNuaXBwZXQ9MTUsQWkuQ29sb3I9MTYsQWkuRmlsZT0xNyxBaS5SZWZlcmVuY2U9MTgsQWkuRm9sZGVyPTE5LEFpLkVudW1NZW1iZXI9MjAsQWkuQ29uc3RhbnQ9MjEsQWkuU3RydWN0PTIyLEFpLkV2ZW50PTIzLEFpLk9wZXJhdG9yPTI0LEFpLlR5cGVQYXJhbWV0ZXI9MjUsKHhpPUVpfHwoRWk9e30pKS5QbGFpblRleHQ9MSx4aS5TbmlwcGV0PTIsKE5pfHwoTmk9e30pKS5EZXByZWNhdGVkPTEsKExpPWtpfHwoa2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntuZXdUZXh0OmUsaW5zZXJ0OnQscmVwbGFjZTpufX0sTGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmaG8uc3RyaW5nKHQubmV3VGV4dCkmJmZyLmlzKHQuaW5zZXJ0KSYmZnIuaXModC5yZXBsYWNlKX0sKE9pPVRpfHwoVGk9e30pKS5hc0lzPTEsT2kuYWRqdXN0SW5kZW50YXRpb249MiwoSWl8fChJaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm57bGFiZWw6ZX19LChNaXx8KE1pPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2l0ZW1zOmV8fFtdLGlzSW5jb21wbGV0ZTohIXR9fSwoUmk9UGl8fChQaT17fSkpLmZyb21QbGFpblRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfSxSaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5zdHJpbmcodCl8fGhvLm9iamVjdExpdGVyYWwodCkmJmhvLnN0cmluZyh0Lmxhbmd1YWdlKSYmaG8uc3RyaW5nKHQudmFsdWUpfSwoVml8fChWaT17fSkpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuISF0JiZoby5vYmplY3RMaXRlcmFsKHQpJiYoX2kuaXModC5jb250ZW50cyl8fFBpLmlzKHQuY29udGVudHMpfHxoby50eXBlZEFycmF5KHQuY29udGVudHMsUGkuaXMpKSYmKHZvaWQgMD09PWUucmFuZ2V8fGZyLmlzKGUucmFuZ2UpKX0sKEZpfHwoRmk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD97bGFiZWw6ZSxkb2N1bWVudGF0aW9uOnR9OntsYWJlbDplfX0sKERpfHwoRGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT17bGFiZWw6ZX07cmV0dXJuIGhvLmRlZmluZWQodCkmJihpLmRvY3VtZW50YXRpb249dCksaG8uZGVmaW5lZChuKT9pLnBhcmFtZXRlcnM9bjppLnBhcmFtZXRlcnM9W10saX0sKGppPUtpfHwoS2k9e30pKS5UZXh0PTEsamkuUmVhZD0yLGppLldyaXRlPTMsKFVpfHwoVWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17cmFuZ2U6ZX07cmV0dXJuIGhvLm51bWJlcih0KSYmKG4ua2luZD10KSxufSwocWk9Qml8fChCaT17fSkpLkZpbGU9MSxxaS5Nb2R1bGU9MixxaS5OYW1lc3BhY2U9MyxxaS5QYWNrYWdlPTQscWkuQ2xhc3M9NSxxaS5NZXRob2Q9NixxaS5Qcm9wZXJ0eT03LHFpLkZpZWxkPTgscWkuQ29uc3RydWN0b3I9OSxxaS5FbnVtPTEwLHFpLkludGVyZmFjZT0xMSxxaS5GdW5jdGlvbj0xMixxaS5WYXJpYWJsZT0xMyxxaS5Db25zdGFudD0xNCxxaS5TdHJpbmc9MTUscWkuTnVtYmVyPTE2LHFpLkJvb2xlYW49MTcscWkuQXJyYXk9MTgscWkuT2JqZWN0PTE5LHFpLktleT0yMCxxaS5OdWxsPTIxLHFpLkVudW1NZW1iZXI9MjIscWkuU3RydWN0PTIzLHFpLkV2ZW50PTI0LHFpLk9wZXJhdG9yPTI1LHFpLlR5cGVQYXJhbWV0ZXI9MjYsKCRpfHwoJGk9e30pKS5EZXByZWNhdGVkPTEsKFdpfHwoV2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz17bmFtZTplLGtpbmQ6dCxsb2NhdGlvbjp7dXJpOnIscmFuZ2U6bn19O3JldHVybiBpJiYoby5jb250YWluZXJOYW1lPWkpLG99LCh6aT1IaXx8KEhpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT17bmFtZTplLGRldGFpbDp0LGtpbmQ6bixyYW5nZTpyLHNlbGVjdGlvblJhbmdlOml9O3JldHVybiB2b2lkIDAhPT1vJiYoYS5jaGlsZHJlbj1vKSxhfSx6aS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiZoby5zdHJpbmcodC5uYW1lKSYmaG8ubnVtYmVyKHQua2luZCkmJmZyLmlzKHQucmFuZ2UpJiZmci5pcyh0LnNlbGVjdGlvblJhbmdlKSYmKHZvaWQgMD09PXQuZGV0YWlsfHxoby5zdHJpbmcodC5kZXRhaWwpKSYmKHZvaWQgMD09PXQuZGVwcmVjYXRlZHx8aG8uYm9vbGVhbih0LmRlcHJlY2F0ZWQpKSYmKHZvaWQgMD09PXQuY2hpbGRyZW58fEFycmF5LmlzQXJyYXkodC5jaGlsZHJlbikpJiYodm9pZCAwPT09dC50YWdzfHxBcnJheS5pc0FycmF5KHQudGFncykpfSwoSmk9R2l8fChHaT17fSkpLkVtcHR5PSIiLEppLlF1aWNrRml4PSJxdWlja2ZpeCIsSmkuUmVmYWN0b3I9InJlZmFjdG9yIixKaS5SZWZhY3RvckV4dHJhY3Q9InJlZmFjdG9yLmV4dHJhY3QiLEppLlJlZmFjdG9ySW5saW5lPSJyZWZhY3Rvci5pbmxpbmUiLEppLlJlZmFjdG9yUmV3cml0ZT0icmVmYWN0b3IucmV3cml0ZSIsSmkuU291cmNlPSJzb3VyY2UiLEppLlNvdXJjZU9yZ2FuaXplSW1wb3J0cz0ic291cmNlLm9yZ2FuaXplSW1wb3J0cyIsSmkuU291cmNlRml4QWxsPSJzb3VyY2UuZml4QWxsIiwoWmk9WGl8fChYaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXtkaWFnbm9zdGljczplfTtyZXR1cm4gbnVsbCE9dCYmKG4ub25seT10KSxufSxaaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZoby50eXBlZEFycmF5KHQuZGlhZ25vc3RpY3MsUnIuaXMpJiYodm9pZCAwPT09dC5vbmx5fHxoby50eXBlZEFycmF5KHQub25seSxoby5zdHJpbmcpKX0sKFFpPVlpfHwoWWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXt0aXRsZTplfSxpPSEwO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oaT0hMSxyLmtpbmQ9dCk6RnIuaXModCk/ci5jb21tYW5kPXQ6ci5lZGl0PXQsaSYmdm9pZCAwIT09biYmKHIua2luZD1uKSxyfSxRaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiZoby5zdHJpbmcodC50aXRsZSkmJih2b2lkIDA9PT10LmRpYWdub3N0aWNzfHxoby50eXBlZEFycmF5KHQuZGlhZ25vc3RpY3MsUnIuaXMpKSYmKHZvaWQgMD09PXQua2luZHx8aG8uc3RyaW5nKHQua2luZCkpJiYodm9pZCAwIT09dC5lZGl0fHx2b2lkIDAhPT10LmNvbW1hbmQpJiYodm9pZCAwPT09dC5jb21tYW5kfHxGci5pcyh0LmNvbW1hbmQpKSYmKHZvaWQgMD09PXQuaXNQcmVmZXJyZWR8fGhvLmJvb2xlYW4odC5pc1ByZWZlcnJlZCkpJiYodm9pZCAwPT09dC5lZGl0fHxlaS5pcyh0LmVkaXQpKX0sKHRvPWVvfHwoZW89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17cmFuZ2U6ZX07cmV0dXJuIGhvLmRlZmluZWQodCkmJihuLmRhdGE9dCksbn0sdG8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmZnIuaXModC5yYW5nZSkmJihoby51bmRlZmluZWQodC5jb21tYW5kKXx8RnIuaXModC5jb21tYW5kKSl9LChybz1ub3x8KG5vPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3RhYlNpemU6ZSxpbnNlcnRTcGFjZXM6dH19LHJvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnVpbnRlZ2VyKHQudGFiU2l6ZSkmJmhvLmJvb2xlYW4odC5pbnNlcnRTcGFjZXMpfSwob289aW98fChpbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJue3JhbmdlOmUsdGFyZ2V0OnQsZGF0YTpufX0sb28uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmZnIuaXModC5yYW5nZSkmJihoby51bmRlZmluZWQodC50YXJnZXQpfHxoby5zdHJpbmcodC50YXJnZXQpKX0sKHNvPWFvfHwoYW89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxwYXJlbnQ6dH19LHNvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHZvaWQgMCE9PXQmJmZyLmlzKHQucmFuZ2UpJiYodm9pZCAwPT09dC5wYXJlbnR8fHNvLmlzKHQucGFyZW50KSl9LGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTt2YXIgcj1lLmxlbmd0aC8yfDAsaT1lLnNsaWNlKDAsciksbz1lLnNsaWNlKHIpO3QoaSxuKSx0KG8sbik7Zm9yKHZhciBhPTAscz0wLGM9MDthPGkubGVuZ3RoJiZzPG8ubGVuZ3RoOyl7dmFyIGw9bihpW2FdLG9bc10pO2VbYysrXT1sPD0wP2lbYSsrXTpvW3MrK119Zm9yKDthPGkubGVuZ3RoOyllW2MrK109aVthKytdO2Zvcig7czxvLmxlbmd0aDspZVtjKytdPW9bcysrXTtyZXR1cm4gZX1lLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3IGdvKGUsdCxuLHIpfSxlLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuISEoaG8uZGVmaW5lZCh0KSYmaG8uc3RyaW5nKHQudXJpKSYmKGhvLnVuZGVmaW5lZCh0Lmxhbmd1YWdlSWQpfHxoby5zdHJpbmcodC5sYW5ndWFnZUlkKSkmJmhvLnVpbnRlZ2VyKHQubGluZUNvdW50KSYmaG8uZnVuYyh0LmdldFRleHQpJiZoby5mdW5jKHQucG9zaXRpb25BdCkmJmhvLmZ1bmModC5vZmZzZXRBdCkpfSxlLmFwcGx5RWRpdHM9ZnVuY3Rpb24oZSxuKXtmb3IodmFyIHI9ZS5nZXRUZXh0KCksaT10KG4sKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5yYW5nZS5zdGFydC5saW5lLXQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gMD09PW4/ZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXItdC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6bn0pKSxvPXIubGVuZ3RoLGE9aS5sZW5ndGgtMTthPj0wO2EtLSl7dmFyIHM9aVthXSxjPWUub2Zmc2V0QXQocy5yYW5nZS5zdGFydCksbD1lLm9mZnNldEF0KHMucmFuZ2UuZW5kKTtpZighKGw8PW8pKXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO3I9ci5zdWJzdHJpbmcoMCxjKStzLm5ld1RleHQrci5zdWJzdHJpbmcobCxyLmxlbmd0aCksbz1jfXJldHVybiByfX0oY298fChjbz17fSkpO3ZhciBobyxmbyxtbyxnbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PXIsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInVyaSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl91cml9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYW5ndWFnZUlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2ZXJzaW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZ2V0VGV4dD1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD10aGlzLm9mZnNldEF0KGUuc3RhcnQpLG49dGhpcy5vZmZzZXRBdChlLmVuZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHQsbil9cmV0dXJuIHRoaXMuX2NvbnRlbnR9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRlbnQ9ZS50ZXh0LHRoaXMuX3ZlcnNpb249dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9LGUucHJvdG90eXBlLmdldExpbmVPZmZzZXRzPWZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5fbGluZU9mZnNldHMpe2Zvcih2YXIgZT1bXSx0PXRoaXMuX2NvbnRlbnQsbj0hMCxyPTA7cjx0Lmxlbmd0aDtyKyspe24mJihlLnB1c2gociksbj0hMSk7dmFyIGk9dC5jaGFyQXQocik7bj0iXHIiPT09aXx8IlxuIj09PWksIlxyIj09PWkmJnIrMTx0Lmxlbmd0aCYmIlxuIj09PXQuY2hhckF0KHIrMSkmJnIrK31uJiZ0Lmxlbmd0aD4wJiZlLnB1c2godC5sZW5ndGgpLHRoaXMuX2xpbmVPZmZzZXRzPWV9cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzfSxlLnByb3RvdHlwZS5wb3NpdGlvbkF0PWZ1bmN0aW9uKGUpe2U9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7dmFyIHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpLG49MCxyPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybiB1ci5jcmVhdGUoMCxlKTtmb3IoO248cjspe3ZhciBpPU1hdGguZmxvb3IoKG4rcikvMik7dFtpXT5lP3I9aTpuPWkrMX12YXIgbz1uLTE7cmV0dXJuIHVyLmNyZWF0ZShvLGUtdFtvXSl9LGUucHJvdG90eXBlLm9mZnNldEF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDt2YXIgbj10W2UubGluZV0scj1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixyKSxuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsaW5lQ291bnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlfSgpO2ZvPWhvfHwoaG89e30pLG1vPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsZm8uZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZX0sZm8udW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfSxmby5ib29sZWFuPWZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZXx8ITE9PT1lfSxmby5zdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1tby5jYWxsKGUpfSxmby5udW1iZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1tby5jYWxsKGUpfSxmby5udW1iZXJSYW5nZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1tby5jYWxsKGUpJiZ0PD1lJiZlPD1ufSxmby5pbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09bW8uY2FsbChlKSYmLTIxNDc0ODM2NDg8PWUmJmU8PTIxNDc0ODM2NDd9LGZvLnVpbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09bW8uY2FsbChlKSYmMDw9ZSYmZTw9MjE0NzQ4MzY0N30sZm8uZnVuYz1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09bW8uY2FsbChlKX0sZm8ub2JqZWN0TGl0ZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX0sZm8udHlwZWRBcnJheT1mdW5jdGlvbihlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KHQpfTt2YXIgcG8sYm8sdm8seW8sQ28sd289Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PXIsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KGUpe2lmKGUpe2NvbnN0IHQ9dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxuPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyh0LG4pfXJldHVybiB0aGlzLl9jb250ZW50fXVwZGF0ZShlLHQpe2ZvcihsZXQgdCBvZiBlKWlmKHdvLmlzSW5jcmVtZW50YWwodCkpe2NvbnN0IGU9QW8odC5yYW5nZSksbj10aGlzLm9mZnNldEF0KGUuc3RhcnQpLHI9dGhpcy5vZmZzZXRBdChlLmVuZCk7dGhpcy5fY29udGVudD10aGlzLl9jb250ZW50LnN1YnN0cmluZygwLG4pK3QudGV4dCt0aGlzLl9jb250ZW50LnN1YnN0cmluZyhyLHRoaXMuX2NvbnRlbnQubGVuZ3RoKTtjb25zdCBpPU1hdGgubWF4KGUuc3RhcnQubGluZSwwKSxvPU1hdGgubWF4KGUuZW5kLmxpbmUsMCk7bGV0IGE9dGhpcy5fbGluZU9mZnNldHM7Y29uc3Qgcz1Tbyh0LnRleHQsITEsbik7aWYoby1pPT09cy5sZW5ndGgpZm9yKGxldCBlPTAsdD1zLmxlbmd0aDtlPHQ7ZSsrKWFbZStpKzFdPXNbZV07ZWxzZSBzLmxlbmd0aDwxZTQ/YS5zcGxpY2UoaSsxLG8taSwuLi5zKTp0aGlzLl9saW5lT2Zmc2V0cz1hPWEuc2xpY2UoMCxpKzEpLmNvbmNhdChzLGEuc2xpY2UobysxKSk7Y29uc3QgYz10LnRleHQubGVuZ3RoLShyLW4pO2lmKDAhPT1jKWZvcihsZXQgZT1pKzErcy5sZW5ndGgsdD1hLmxlbmd0aDtlPHQ7ZSsrKWFbZV09YVtlXStjfWVsc2V7aWYoIXdvLmlzRnVsbCh0KSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2hhbmdlIGV2ZW50IHJlY2VpdmVkIik7dGhpcy5fY29udGVudD10LnRleHQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfXRoaXMuX3ZlcnNpb249dH1nZXRMaW5lT2Zmc2V0cygpe3JldHVybiB2b2lkIDA9PT10aGlzLl9saW5lT2Zmc2V0cyYmKHRoaXMuX2xpbmVPZmZzZXRzPVNvKHRoaXMuX2NvbnRlbnQsITApKSx0aGlzLl9saW5lT2Zmc2V0c31wb3NpdGlvbkF0KGUpe2U9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7bGV0IHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpLG49MCxyPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybntsaW5lOjAsY2hhcmFjdGVyOmV9O2Zvcig7bjxyOyl7bGV0IGk9TWF0aC5mbG9vcigobityKS8yKTt0W2ldPmU/cj1pOm49aSsxfWxldCBpPW4tMTtyZXR1cm57bGluZTppLGNoYXJhY3RlcjplLXRbaV19fW9mZnNldEF0KGUpe2xldCB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDtsZXQgbj10W2UubGluZV0scj1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixyKSxuKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9c3RhdGljIGlzSW5jcmVtZW50YWwoZSl7bGV0IHQ9ZTtyZXR1cm4gbnVsbCE9dCYmInN0cmluZyI9PXR5cGVvZiB0LnRleHQmJnZvaWQgMCE9PXQucmFuZ2UmJih2b2lkIDA9PT10LnJhbmdlTGVuZ3RofHwibnVtYmVyIj09dHlwZW9mIHQucmFuZ2VMZW5ndGgpfXN0YXRpYyBpc0Z1bGwoZSl7bGV0IHQ9ZTtyZXR1cm4gbnVsbCE9dCYmInN0cmluZyI9PXR5cGVvZiB0LnRleHQmJnZvaWQgMD09PXQucmFuZ2UmJnZvaWQgMD09PXQucmFuZ2VMZW5ndGh9fTtmdW5jdGlvbiBfbyhlLHQpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IG49ZS5sZW5ndGgvMnwwLHI9ZS5zbGljZSgwLG4pLGk9ZS5zbGljZShuKTtfbyhyLHQpLF9vKGksdCk7bGV0IG89MCxhPTAscz0wO2Zvcig7bzxyLmxlbmd0aCYmYTxpLmxlbmd0aDspe2xldCBuPXQocltvXSxpW2FdKTtlW3MrK109bjw9MD9yW28rK106aVthKytdfWZvcig7bzxyLmxlbmd0aDspZVtzKytdPXJbbysrXTtmb3IoO2E8aS5sZW5ndGg7KWVbcysrXT1pW2ErK107cmV0dXJuIGV9ZnVuY3Rpb24gU28oZSx0LG49MCl7Y29uc3Qgcj10P1tuXTpbXTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IGk9ZS5jaGFyQ29kZUF0KHQpOzEzIT09aSYmMTAhPT1pfHwoMTM9PT1pJiZ0KzE8ZS5sZW5ndGgmJjEwPT09ZS5jaGFyQ29kZUF0KHQrMSkmJnQrKyxyLnB1c2gobit0KzEpKX1yZXR1cm4gcn1mdW5jdGlvbiBBbyhlKXtjb25zdCB0PWUuc3RhcnQsbj1lLmVuZDtyZXR1cm4gdC5saW5lPm4ubGluZXx8dC5saW5lPT09bi5saW5lJiZ0LmNoYXJhY3Rlcj5uLmNoYXJhY3Rlcj97c3RhcnQ6bixlbmQ6dH06ZX1mdW5jdGlvbiBFbyhlKXtjb25zdCB0PUFvKGUucmFuZ2UpO3JldHVybiB0IT09ZS5yYW5nZT97bmV3VGV4dDplLm5ld1RleHQscmFuZ2U6dH06ZX1mdW5jdGlvbiB4byhlLHQsLi4ubil7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7bGV0IG47cmV0dXJuIG49MD09PXQubGVuZ3RoP2U6ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoKGUsbik9PntsZXQgcj1uWzBdO3JldHVybiB2b2lkIDAhPT10W3JdP3Rbcl06ZX0pKSxufSh0LG4pfWZ1bmN0aW9uIE5vKGUpe3JldHVybiB4b30oYm89cG98fChwbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3IHdvKGUsdCxuLHIpfSxiby51cGRhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKGUgaW5zdGFuY2VvZiB3bylyZXR1cm4gZS51cGRhdGUodCxuKSxlO3Rocm93IG5ldyBFcnJvcigiVGV4dERvY3VtZW50LnVwZGF0ZTogZG9jdW1lbnQgbXVzdCBiZSBjcmVhdGVkIGJ5IFRleHREb2N1bWVudC5jcmVhdGUiKX0sYm8uYXBwbHlFZGl0cz1mdW5jdGlvbihlLHQpe2xldCBuPWUuZ2V0VGV4dCgpLHI9X28odC5tYXAoRW8pLCgoZSx0KT0+e2xldCBuPWUucmFuZ2Uuc3RhcnQubGluZS10LnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIDA9PT1uP2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOm59KSksaT0wO2NvbnN0IG89W107Zm9yKGNvbnN0IHQgb2Ygcil7bGV0IHI9ZS5vZmZzZXRBdCh0LnJhbmdlLnN0YXJ0KTtpZihyPGkpdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7cj5pJiZvLnB1c2gobi5zdWJzdHJpbmcoaSxyKSksdC5uZXdUZXh0Lmxlbmd0aCYmby5wdXNoKHQubmV3VGV4dCksaT1lLm9mZnNldEF0KHQucmFuZ2UuZW5kKX1yZXR1cm4gby5wdXNoKG4uc3Vic3RyKGkpKSxvLmpvaW4oIiIpfSwoeW89dm98fCh2bz17fSkpW3lvLlVuZGVmaW5lZD0wXT0iVW5kZWZpbmVkIix5b1t5by5FbnVtVmFsdWVNaXNtYXRjaD0xXT0iRW51bVZhbHVlTWlzbWF0Y2giLHlvW3lvLkRlcHJlY2F0ZWQ9Ml09IkRlcHJlY2F0ZWQiLHlvW3lvLlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQ9MjU3XT0iVW5leHBlY3RlZEVuZE9mQ29tbWVudCIseW9beW8uVW5leHBlY3RlZEVuZE9mU3RyaW5nPTI1OF09IlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIseW9beW8uVW5leHBlY3RlZEVuZE9mTnVtYmVyPTI1OV09IlVuZXhwZWN0ZWRFbmRPZk51bWJlciIseW9beW8uSW52YWxpZFVuaWNvZGU9MjYwXT0iSW52YWxpZFVuaWNvZGUiLHlvW3lvLkludmFsaWRFc2NhcGVDaGFyYWN0ZXI9MjYxXT0iSW52YWxpZEVzY2FwZUNoYXJhY3RlciIseW9beW8uSW52YWxpZENoYXJhY3Rlcj0yNjJdPSJJbnZhbGlkQ2hhcmFjdGVyIix5b1t5by5Qcm9wZXJ0eUV4cGVjdGVkPTUxM109IlByb3BlcnR5RXhwZWN0ZWQiLHlvW3lvLkNvbW1hRXhwZWN0ZWQ9NTE0XT0iQ29tbWFFeHBlY3RlZCIseW9beW8uQ29sb25FeHBlY3RlZD01MTVdPSJDb2xvbkV4cGVjdGVkIix5b1t5by5WYWx1ZUV4cGVjdGVkPTUxNl09IlZhbHVlRXhwZWN0ZWQiLHlvW3lvLkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkPTUxN109IkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkIix5b1t5by5Db21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkPTUxOF09IkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQiLHlvW3lvLlRyYWlsaW5nQ29tbWE9NTE5XT0iVHJhaWxpbmdDb21tYSIseW9beW8uRHVwbGljYXRlS2V5PTUyMF09IkR1cGxpY2F0ZUtleSIseW9beW8uQ29tbWVudE5vdFBlcm1pdHRlZD01MjFdPSJDb21tZW50Tm90UGVybWl0dGVkIix5b1t5by5TY2hlbWFSZXNvbHZlRXJyb3I9NzY4XT0iU2NoZW1hUmVzb2x2ZUVycm9yIiwoQ298fChDbz17fSkpLkxBVEVTVD17dGV4dERvY3VtZW50Ontjb21wbGV0aW9uOntjb21wbGV0aW9uSXRlbTp7ZG9jdW1lbnRhdGlvbkZvcm1hdDpbQ2kuTWFya2Rvd24sQ2kuUGxhaW5UZXh0XSxjb21taXRDaGFyYWN0ZXJzU3VwcG9ydDohMH19fX07dmFyIGtvLExvLFRvLE9vPShrbz1mdW5jdGlvbihlLHQpe3JldHVybihrbz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHQpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9a28oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9KSxJbz1ObygpLE1vPXsiY29sb3ItaGV4Ijp7ZXJyb3JNZXNzYWdlOklvKCJjb2xvckhleEZvcm1hdFdhcm5pbmciLCJJbnZhbGlkIGNvbG9yIGZvcm1hdC4gVXNlICNSR0IsICNSR0JBLCAjUlJHR0JCIG9yICNSUkdHQkJBQS4iKSxwYXR0ZXJuOi9eIyhbMC05QS1GYS1mXXszLDR9fChbMC05QS1GYS1mXXsyfSl7Myw0fSkkL30sImRhdGUtdGltZSI6e2Vycm9yTWVzc2FnZTpJbygiZGF0ZVRpbWVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFJGQzMzMzkgZGF0ZS10aW1lLiIpLHBhdHRlcm46L14oXGR7NH0pLSgwWzEtOV18MVswLTJdKS0oMFsxLTldfFsxMl1bMC05XXwzWzAxXSlUKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKTooWzAtNV1bMC05XXw2MCkoXC5bMC05XSspPyhafChcK3wtKShbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSkpJC9pfSxkYXRlOntlcnJvck1lc3NhZ2U6SW8oImRhdGVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFJGQzMzMzkgZGF0ZS4iKSxwYXR0ZXJuOi9eKFxkezR9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdWzAtOV18M1swMV0pJC9pfSx0aW1lOntlcnJvck1lc3NhZ2U6SW8oInRpbWVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFJGQzMzMzkgdGltZS4iKSxwYXR0ZXJuOi9eKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKTooWzAtNV1bMC05XXw2MCkoXC5bMC05XSspPyhafChcK3wtKShbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSkpJC9pfSxlbWFpbDp7ZXJyb3JNZXNzYWdlOklvKCJlbWFpbEZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIGUtbWFpbCBhZGRyZXNzLiIpLHBhdHRlcm46L14oKFtePD4oKVxbXF1cXC4sOzpcc0AiXSsoXC5bXjw+KClcW1xdXFwuLDs6XHNAIl0rKSopfCgiLisiKSlAKChcW1swLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31dKXwoKFthLXpBLVowLTktXStcLikrW2EtekEtWl17Mix9KSkkL30saG9zdG5hbWU6e2Vycm9yTWVzc2FnZTpJbygiaG9zdG5hbWVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIGhvc3RuYW1lLiIpLHBhdHRlcm46L14oPz0uezEsMjUzfVwuPyQpW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KD86XC5bYS16MC05XSg/OlstMC05YS16XXswLDYxfVswLTlhLXpdKT8pKlwuPyQvaX0saXB2NDp7ZXJyb3JNZXNzYWdlOklvKCJpcHY0Rm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYW4gSVB2NCBhZGRyZXNzLiIpLHBhdHRlcm46L14oPzooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKVwuKXszfSg/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpJC99LGlwdjY6e2Vycm9yTWVzc2FnZTpJbygiaXB2NkZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIElQdjYgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKCgoWzAtOWEtZl17MSw0fTopezd9KFswLTlhLWZdezEsNH18OikpfCgoWzAtOWEtZl17MSw0fTopezZ9KDpbMC05YS1mXXsxLDR9fCgoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05YS1mXXsxLDR9Oil7NX0oKCg6WzAtOWEtZl17MSw0fSl7MSwyfSl8OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05YS1mXXsxLDR9Oil7NH0oKCg6WzAtOWEtZl17MSw0fSl7MSwzfSl8KCg6WzAtOWEtZl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezN9KCgoOlswLTlhLWZdezEsNH0pezEsNH0pfCgoOlswLTlhLWZdezEsNH0pezAsMn06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7Mn0oKCg6WzAtOWEtZl17MSw0fSl7MSw1fSl8KCg6WzAtOWEtZl17MSw0fSl7MCwzfTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXsxfSgoKDpbMC05YS1mXXsxLDR9KXsxLDZ9KXwoKDpbMC05YS1mXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCg6KCgoOlswLTlhLWZdezEsNH0pezEsN30pfCgoOlswLTlhLWZdezEsNH0pezAsNX06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSkpJC9pfX0sUG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2b2lkIDA9PT1uJiYobj0wKSx0aGlzLm9mZnNldD10LHRoaXMubGVuZ3RoPW4sdGhpcy5wYXJlbnQ9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInR5cGU6ICIrdGhpcy50eXBlKyIgKCIrdGhpcy5vZmZzZXQrIi8iK3RoaXMubGVuZ3RoKyIpIisodGhpcy5wYXJlbnQ/IiBwYXJlbnQ6IHsiK3RoaXMucGFyZW50LnRvU3RyaW5nKCkrIn0iOiIiKX0sZX0oKSxSbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJudWxsIixyLnZhbHVlPW51bGwscn1yZXR1cm4gT28odCxlKSx0fShQbyksVm89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4scil7dmFyIGk9ZS5jYWxsKHRoaXMsdCxyKXx8dGhpcztyZXR1cm4gaS50eXBlPSJib29sZWFuIixpLnZhbHVlPW4saX1yZXR1cm4gT28odCxlKSx0fShQbyksRm89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIudHlwZT0iYXJyYXkiLHIuaXRlbXM9W10scn1yZXR1cm4gT28odCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlbXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdH0oUG8pLERvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9Im51bWJlciIsci5pc0ludGVnZXI9ITAsci52YWx1ZT1OdW1iZXIuTmFOLHJ9cmV0dXJuIE9vKHQsZSksdH0oUG8pLEtvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQsbixyKXx8dGhpcztyZXR1cm4gaS50eXBlPSJzdHJpbmciLGkudmFsdWU9IiIsaX1yZXR1cm4gT28odCxlKSx0fShQbyksam89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4scil7dmFyIGk9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gaS50eXBlPSJwcm9wZXJ0eSIsaS5jb2xvbk9mZnNldD0tMSxpLmtleU5vZGU9cixpfXJldHVybiBPbyh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZU5vZGU/W3RoaXMua2V5Tm9kZSx0aGlzLnZhbHVlTm9kZV06W3RoaXMua2V5Tm9kZV19LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdH0oUG8pLFVvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9Im9iamVjdCIsci5wcm9wZXJ0aWVzPVtdLHJ9cmV0dXJuIE9vKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BlcnRpZXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdH0oUG8pO2Z1bmN0aW9uIEJvKGUpe3JldHVybiBsaShlKT9lP3t9Ontub3Q6e319OmV9KFRvPUxvfHwoTG89e30pKVtUby5LZXk9MF09IktleSIsVG9bVG8uRW51bT0xXT0iRW51bSI7dmFyIHFvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PWUmJihlPS0xKSx0aGlzLmZvY3VzT2Zmc2V0PWUsdGhpcy5leGNsdWRlPXQsdGhpcy5zY2hlbWFzPVtdfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5zY2hlbWFzLnB1c2goZSl9LGUucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKGUpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuc2NoZW1hcyxlLnNjaGVtYXMpfSxlLnByb3RvdHlwZS5pbmNsdWRlPWZ1bmN0aW9uKGUpe3JldHVybigtMT09PXRoaXMuZm9jdXNPZmZzZXR8fEdvKGUsdGhpcy5mb2N1c09mZnNldCkpJiZlIT09dGhpcy5leGNsdWRlfSxlLnByb3RvdHlwZS5uZXdTdWI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUoLTEsdGhpcy5leGNsdWRlKX0sZX0oKSwkbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2NoZW1hcyIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt9LGUucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKGUpe30sZS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbihlKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUubmV3U3ViPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUuaW5zdGFuY2U9bmV3IGUsZX0oKSxXbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnByb2JsZW1zPVtdLHRoaXMucHJvcGVydGllc01hdGNoZXM9MCx0aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM9MCx0aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXM9MCx0aGlzLmVudW1WYWx1ZU1hdGNoPSExLHRoaXMuZW51bVZhbHVlcz12b2lkIDB9cmV0dXJuIGUucHJvdG90eXBlLmhhc1Byb2JsZW1zPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnByb2JsZW1zLmxlbmd0aH0sZS5wcm90b3R5cGUubWVyZ2VBbGw9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1lO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO3RoaXMubWVyZ2Uocil9fSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXt0aGlzLnByb2JsZW1zPXRoaXMucHJvYmxlbXMuY29uY2F0KGUucHJvYmxlbXMpfSxlLnByb3RvdHlwZS5tZXJnZUVudW1WYWx1ZXM9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZW51bVZhbHVlTWF0Y2gmJiFlLmVudW1WYWx1ZU1hdGNoJiZ0aGlzLmVudW1WYWx1ZXMmJmUuZW51bVZhbHVlcyl7dGhpcy5lbnVtVmFsdWVzPXRoaXMuZW51bVZhbHVlcy5jb25jYXQoZS5lbnVtVmFsdWVzKTtmb3IodmFyIHQ9MCxuPXRoaXMucHJvYmxlbXM7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07ci5jb2RlPT09dm8uRW51bVZhbHVlTWlzbWF0Y2gmJihyLm1lc3NhZ2U9SW8oImVudW1XYXJuaW5nIiwiVmFsdWUgaXMgbm90IGFjY2VwdGVkLiBWYWxpZCB2YWx1ZXM6IHswfS4iLHRoaXMuZW51bVZhbHVlcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0pKS5qb2luKCIsICIpKSl9fX0sZS5wcm90b3R5cGUubWVyZ2VQcm9wZXJ0eU1hdGNoPWZ1bmN0aW9uKGUpe3RoaXMubWVyZ2UoZSksdGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcysrLChlLmVudW1WYWx1ZU1hdGNofHwhZS5oYXNQcm9ibGVtcygpJiZlLnByb3BlcnRpZXNNYXRjaGVzKSYmdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyssZS5lbnVtVmFsdWVNYXRjaCYmZS5lbnVtVmFsdWVzJiYxPT09ZS5lbnVtVmFsdWVzLmxlbmd0aCYmdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzKyt9LGUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oYXNQcm9ibGVtcygpO3JldHVybiB0IT09ZS5oYXNQcm9ibGVtcygpP3Q/LTE6MTp0aGlzLmVudW1WYWx1ZU1hdGNoIT09ZS5lbnVtVmFsdWVNYXRjaD9lLmVudW1WYWx1ZU1hdGNoPy0xOjE6dGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzIT09ZS5wcmltYXJ5VmFsdWVNYXRjaGVzP3RoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcy1lLnByaW1hcnlWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzIT09ZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzP3RoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcy1lLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcy1lLnByb3BlcnRpZXNNYXRjaGVzfSxlfSgpO2Z1bmN0aW9uIEhvKGUpe3JldHVybiBvaShlKX1mdW5jdGlvbiB6byhlKXtyZXR1cm4gaWkoZSl9ZnVuY3Rpb24gR28oZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0hMSksdD49ZS5vZmZzZXQmJnQ8ZS5vZmZzZXQrZS5sZW5ndGh8fG4mJnQ9PT1lLm9mZnNldCtlLmxlbmd0aH12YXIgSm89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49W10pLHRoaXMucm9vdD1lLHRoaXMuc3ludGF4RXJyb3JzPXQsdGhpcy5jb21tZW50cz1ufXJldHVybiBlLnByb3RvdHlwZS5nZXROb2RlRnJvbU9mZnNldD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PSExKSx0aGlzLnJvb3QpcmV0dXJuIHJpKHRoaXMucm9vdCxlLHQpfSxlLnByb3RvdHlwZS52aXNpdD1mdW5jdGlvbihlKXtpZih0aGlzLnJvb3Qpe3ZhciB0PWZ1bmN0aW9uKG4pe3ZhciByPWUobiksaT1uLmNoaWxkcmVuO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aCYmcjtvKyspcj10KGlbb10pO3JldHVybiByfTt0KHRoaXMucm9vdCl9fSxlLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihlLHQsbil7aWYodm9pZCAwPT09biYmKG49VHIuV2FybmluZyksdGhpcy5yb290JiZ0KXt2YXIgcj1uZXcgV287cmV0dXJuIFhvKHRoaXMucm9vdCx0LHIsJG8uaW5zdGFuY2UpLHIucHJvYmxlbXMubWFwKChmdW5jdGlvbih0KXt2YXIgcixpPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5sb2NhdGlvbi5vZmZzZXQpLGUucG9zaXRpb25BdCh0LmxvY2F0aW9uLm9mZnNldCt0LmxvY2F0aW9uLmxlbmd0aCkpO3JldHVybiBSci5jcmVhdGUoaSx0Lm1lc3NhZ2UsbnVsbCE9PShyPXQuc2V2ZXJpdHkpJiZ2b2lkIDAhPT1yP3I6bix0LmNvZGUpfSkpfX0sZS5wcm90b3R5cGUuZ2V0TWF0Y2hpbmdTY2hlbWFzPWZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT10JiYodD0tMSk7dmFyIHI9bmV3IHFvKHQsbik7cmV0dXJuIHRoaXMucm9vdCYmZSYmWG8odGhpcy5yb290LGUsbmV3IFdvLHIpLHIuc2NoZW1hc30sZX0oKTtmdW5jdGlvbiBYbyhlLHQsbixyKXtpZihlJiZyLmluY2x1ZGUoZSkpe3ZhciBpPWU7c3dpdGNoKGkudHlwZSl7Y2FzZSJvYmplY3QiOiFmdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKSxvPVtdLGE9MCxzPWUucHJvcGVydGllczthPHMubGVuZ3RoO2ErKyl7aVtLPShwPXNbYV0pLmtleU5vZGUudmFsdWVdPXAudmFsdWVOb2RlLG8ucHVzaChLKX1pZihBcnJheS5pc0FycmF5KHQucmVxdWlyZWQpKWZvcih2YXIgYz0wLGw9dC5yZXF1aXJlZDtjPGwubGVuZ3RoO2MrKyl7aWYoIWlbUz1sW2NdXSl7dmFyIHU9ZS5wYXJlbnQmJiJwcm9wZXJ0eSI9PT1lLnBhcmVudC50eXBlJiZlLnBhcmVudC5rZXlOb2RlLGg9dT97b2Zmc2V0OnUub2Zmc2V0LGxlbmd0aDp1Lmxlbmd0aH06e29mZnNldDplLm9mZnNldCxsZW5ndGg6MX07bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjpoLG1lc3NhZ2U6SW8oIk1pc3NpbmdSZXF1aXJlZFByb3BXYXJuaW5nIiwnTWlzc2luZyBwcm9wZXJ0eSAiezB9Ii4nLFMpfSl9fXZhciBmPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1vLmluZGV4T2YoZSk7dD49MDspby5zcGxpY2UodCwxKSx0PW8uaW5kZXhPZihlKX07aWYodC5wcm9wZXJ0aWVzKWZvcih2YXIgZD0wLG09T2JqZWN0LmtleXModC5wcm9wZXJ0aWVzKTtkPG0ubGVuZ3RoO2QrKyl7ZihTPW1bZF0pO3ZhciBnPXQucHJvcGVydGllc1tTXTtpZihMPWlbU10paWYobGkoZykpaWYoZyluLnByb3BlcnRpZXNNYXRjaGVzKyssbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKys7ZWxzZXt2YXIgcD1MLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6cC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8SW8oIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsUyl9KX1lbHNlIFhvKEwsZyx4PW5ldyBXbyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaCh4KX1pZih0LnBhdHRlcm5Qcm9wZXJ0aWVzKWZvcih2YXIgYj0wLHY9T2JqZWN0LmtleXModC5wYXR0ZXJuUHJvcGVydGllcyk7Yjx2Lmxlbmd0aDtiKyspZm9yKHZhciB5PXZbYl0sQz1oaSh5KSx3PTAsXz1vLnNsaWNlKDApO3c8Xy5sZW5ndGg7dysrKXt2YXIgUz1fW3ddO2lmKG51bGw9PUM/dm9pZCAwOkMudGVzdChTKSlpZihmKFMpLEw9aVtTXSlpZihsaShnPXQucGF0dGVyblByb3BlcnRpZXNbeV0pKWlmKGcpbi5wcm9wZXJ0aWVzTWF0Y2hlcysrLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2V7cD1MLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6cC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8SW8oIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsUyl9KX1lbHNlIFhvKEwsZyx4PW5ldyBXbyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaCh4KX1pZigib2JqZWN0Ij09dHlwZW9mIHQuYWRkaXRpb25hbFByb3BlcnRpZXMpZm9yKHZhciBBPTAsRT1vO0E8RS5sZW5ndGg7QSsrKXtpZihMPWlbUz1FW0FdXSl7dmFyIHg9bmV3IFdvO1hvKEwsdC5hZGRpdGlvbmFsUHJvcGVydGllcyx4LHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHgpfX1lbHNlIGlmKCExPT09dC5hZGRpdGlvbmFsUHJvcGVydGllcyYmby5sZW5ndGg+MClmb3IodmFyIE49MCxrPW87TjxrLmxlbmd0aDtOKyspe3ZhciBMO2lmKEw9aVtTPWtbTl1dKXtwPUwucGFyZW50O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpwLmtleU5vZGUub2Zmc2V0LGxlbmd0aDpwLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygiRGlzYWxsb3dlZEV4dHJhUHJvcFdhcm5pbmciLCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIixTKX0pfX1zaSh0Lm1heFByb3BlcnRpZXMpJiZlLnByb3BlcnRpZXMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiTWF4UHJvcFdhcm5pbmciLCJPYmplY3QgaGFzIG1vcmUgcHJvcGVydGllcyB0aGFuIGxpbWl0IG9mIHswfS4iLHQubWF4UHJvcGVydGllcyl9KTtzaSh0Lm1pblByb3BlcnRpZXMpJiZlLnByb3BlcnRpZXMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiTWluUHJvcFdhcm5pbmciLCJPYmplY3QgaGFzIGZld2VyIHByb3BlcnRpZXMgdGhhbiB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIHswfSIsdC5taW5Qcm9wZXJ0aWVzKX0pO2lmKHQuZGVwZW5kZW5jaWVzKWZvcih2YXIgVD0wLE89T2JqZWN0LmtleXModC5kZXBlbmRlbmNpZXMpO1Q8Ty5sZW5ndGg7VCsrKXtpZihpW0s9T1tUXV0pe3ZhciBJPXQuZGVwZW5kZW5jaWVzW0tdO2lmKEFycmF5LmlzQXJyYXkoSSkpZm9yKHZhciBNPTAsUD1JO008UC5sZW5ndGg7TSsrKXt2YXIgUj1QW01dO2lbUl0/bi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKys6bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiUmVxdWlyZWREZXBlbmRlbnRQcm9wV2FybmluZyIsIk9iamVjdCBpcyBtaXNzaW5nIHByb3BlcnR5IHswfSByZXF1aXJlZCBieSBwcm9wZXJ0eSB7MX0uIixSLEspfSl9ZWxzZSBpZihnPUJvKEkpKVhvKGUsZyx4PW5ldyBXbyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaCh4KX19dmFyIFY9Qm8odC5wcm9wZXJ0eU5hbWVzKTtpZihWKWZvcih2YXIgRj0wLEQ9ZS5wcm9wZXJ0aWVzO0Y8RC5sZW5ndGg7RisrKXt2YXIgSzsoSz1EW0ZdLmtleU5vZGUpJiZYbyhLLFYsbiwkby5pbnN0YW5jZSl9fShpLHQsbixyKTticmVhaztjYXNlImFycmF5IjohZnVuY3Rpb24oZSx0LG4scil7aWYoQXJyYXkuaXNBcnJheSh0Lml0ZW1zKSl7Zm9yKHZhciBpPXQuaXRlbXMsbz0wO288aS5sZW5ndGg7bysrKXt2YXIgYT1CbyhpW29dKSxzPW5ldyBXbzsoZj1lLml0ZW1zW29dKT8oWG8oZixhLHMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2gocykpOmUuaXRlbXMubGVuZ3RoPj1pLmxlbmd0aCYmbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyt9aWYoZS5pdGVtcy5sZW5ndGg+aS5sZW5ndGgpaWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxJdGVtcylmb3IodmFyIGM9aS5sZW5ndGg7YzxlLml0ZW1zLmxlbmd0aDtjKyspe3M9bmV3IFdvO1hvKGUuaXRlbXNbY10sdC5hZGRpdGlvbmFsSXRlbXMscyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaChzKX1lbHNlITE9PT10LmFkZGl0aW9uYWxJdGVtcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiYWRkaXRpb25hbEl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcyBhY2NvcmRpbmcgdG8gc2NoZW1hLiBFeHBlY3RlZCB7MH0gb3IgZmV3ZXIuIixpLmxlbmd0aCl9KX1lbHNle3ZhciBsPUJvKHQuaXRlbXMpO2lmKGwpZm9yKHZhciB1PTAsaD1lLml0ZW1zO3U8aC5sZW5ndGg7dSsrKXt2YXIgZjtYbyhmPWhbdV0sbCxzPW5ldyBXbyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaChzKX19dmFyIGQ9Qm8odC5jb250YWlucyk7aWYoZCl7ZS5pdGVtcy5zb21lKChmdW5jdGlvbihlKXt2YXIgdD1uZXcgV287cmV0dXJuIFhvKGUsZCx0LCRvLmluc3RhbmNlKSwhdC5oYXNQcm9ibGVtcygpfSkpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygicmVxdWlyZWRJdGVtTWlzc2luZ1dhcm5pbmciLCJBcnJheSBkb2VzIG5vdCBjb250YWluIHJlcXVpcmVkIGl0ZW0uIil9KX1zaSh0Lm1pbkl0ZW1zKSYmZS5pdGVtcy5sZW5ndGg8dC5taW5JdGVtcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWluSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBmZXcgaXRlbXMuIEV4cGVjdGVkIHswfSBvciBtb3JlLiIsdC5taW5JdGVtcyl9KTtzaSh0Lm1heEl0ZW1zKSYmZS5pdGVtcy5sZW5ndGg+dC5tYXhJdGVtcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWF4SXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBtYW55IGl0ZW1zLiBFeHBlY3RlZCB7MH0gb3IgZmV3ZXIuIix0Lm1heEl0ZW1zKX0pO2lmKCEwPT09dC51bmlxdWVJdGVtcyl7dmFyIG09SG8oZSk7bS5zb21lKChmdW5jdGlvbihlLHQpe3JldHVybiB0IT09bS5sYXN0SW5kZXhPZihlKX0pKSYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygidW5pcXVlSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIGR1cGxpY2F0ZSBpdGVtcy4iKX0pfX0oaSx0LG4scik7YnJlYWs7Y2FzZSJzdHJpbmciOiFmdW5jdGlvbihlLHQsbixyKXtzaSh0Lm1pbkxlbmd0aCkmJmUudmFsdWUubGVuZ3RoPHQubWluTGVuZ3RoJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtaW5MZW5ndGhXYXJuaW5nIiwiU3RyaW5nIGlzIHNob3J0ZXIgdGhhbiB0aGUgbWluaW11bSBsZW5ndGggb2YgezB9LiIsdC5taW5MZW5ndGgpfSk7c2kodC5tYXhMZW5ndGgpJiZlLnZhbHVlLmxlbmd0aD50Lm1heExlbmd0aCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWF4TGVuZ3RoV2FybmluZyIsIlN0cmluZyBpcyBsb25nZXIgdGhhbiB0aGUgbWF4aW11bSBsZW5ndGggb2YgezB9LiIsdC5tYXhMZW5ndGgpfSk7aWYobz10LnBhdHRlcm4sInN0cmluZyI9PXR5cGVvZiBvKXt2YXIgaT1oaSh0LnBhdHRlcm4pOyhudWxsPT1pP3ZvaWQgMDppLnRlc3QoZS52YWx1ZSkpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQucGF0dGVybkVycm9yTWVzc2FnZXx8dC5lcnJvck1lc3NhZ2V8fElvKCJwYXR0ZXJuV2FybmluZyIsJ1N0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0dGVybiBvZiAiezB9Ii4nLHQucGF0dGVybil9KX12YXIgbztpZih0LmZvcm1hdClzd2l0Y2godC5mb3JtYXQpe2Nhc2UidXJpIjpjYXNlInVyaS1yZWZlcmVuY2UiOnZhciBhPXZvaWQgMDtpZihlLnZhbHVlKXt2YXIgcz0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/Ly5leGVjKGUudmFsdWUpO3M/c1syXXx8InVyaSIhPT10LmZvcm1hdHx8KGE9SW8oInVyaVNjaGVtZU1pc3NpbmciLCJVUkkgd2l0aCBhIHNjaGVtZSBpcyBleHBlY3RlZC4iKSk6YT1JbygidXJpTWlzc2luZyIsIlVSSSBpcyBleHBlY3RlZC4iKX1lbHNlIGE9SW8oInVyaUVtcHR5IiwiVVJJIGV4cGVjdGVkLiIpO2EmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8SW8oInVyaUZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGEgVVJJOiB7MH0iLGEpfSk7YnJlYWs7Y2FzZSJjb2xvci1oZXgiOmNhc2UiZGF0ZS10aW1lIjpjYXNlImRhdGUiOmNhc2UidGltZSI6Y2FzZSJlbWFpbCI6Y2FzZSJob3N0bmFtZSI6Y2FzZSJpcHY0IjpjYXNlImlwdjYiOnZhciBjPU1vW3QuZm9ybWF0XTtlLnZhbHVlJiZjLnBhdHRlcm4uZXhlYyhlLnZhbHVlKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LnBhdHRlcm5FcnJvck1lc3NhZ2V8fHQuZXJyb3JNZXNzYWdlfHxjLmVycm9yTWVzc2FnZX0pfX0oaSx0LG4pO2JyZWFrO2Nhc2UibnVtYmVyIjohZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS52YWx1ZTtmdW5jdGlvbiBvKGUpe3ZhciB0LG49L14oLT9cZCspKD86XC4oXGQrKSk/KD86ZShbLStdXGQrKSk/JC8uZXhlYyhlLnRvU3RyaW5nKCkpO3JldHVybiBuJiZ7dmFsdWU6TnVtYmVyKG5bMV0rKG5bMl18fCIiKSksbXVsdGlwbGllcjooKG51bGw9PT0odD1uWzJdKXx8dm9pZCAwPT09dD92b2lkIDA6dC5sZW5ndGgpfHwwKS0ocGFyc2VJbnQoblszXSl8fDApfX1pZihzaSh0Lm11bHRpcGxlT2YpKXt2YXIgYT0tMTtpZihOdW1iZXIuaXNJbnRlZ2VyKHQubXVsdGlwbGVPZikpYT1pJXQubXVsdGlwbGVPZjtlbHNle3ZhciBzPW8odC5tdWx0aXBsZU9mKSxjPW8oaSk7aWYocyYmYyl7dmFyIGw9TWF0aC5wb3coMTAsTWF0aC5hYnMoYy5tdWx0aXBsaWVyLXMubXVsdGlwbGllcikpO2MubXVsdGlwbGllcjxzLm11bHRpcGxpZXI/Yy52YWx1ZSo9bDpzLnZhbHVlKj1sLGE9Yy52YWx1ZSVzLnZhbHVlfX0wIT09YSYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibXVsdGlwbGVPZldhcm5pbmciLCJWYWx1ZSBpcyBub3QgZGl2aXNpYmxlIGJ5IHswfS4iLHQubXVsdGlwbGVPZil9KX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHNpKHQpP3Q6bGkodCkmJnQ/ZTp2b2lkIDB9ZnVuY3Rpb24gaChlLHQpe2lmKCFsaSh0KXx8IXQpcmV0dXJuIGV9dmFyIGY9dSh0Lm1pbmltdW0sdC5leGNsdXNpdmVNaW5pbXVtKTtzaShmKSYmaTw9ZiYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiZXhjbHVzaXZlTWluaW11bVdhcm5pbmciLCJWYWx1ZSBpcyBiZWxvdyB0aGUgZXhjbHVzaXZlIG1pbmltdW0gb2YgezB9LiIsZil9KTt2YXIgZD11KHQubWF4aW11bSx0LmV4Y2x1c2l2ZU1heGltdW0pO3NpKGQpJiZpPj1kJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJleGNsdXNpdmVNYXhpbXVtV2FybmluZyIsIlZhbHVlIGlzIGFib3ZlIHRoZSBleGNsdXNpdmUgbWF4aW11bSBvZiB7MH0uIixkKX0pO3ZhciBtPWgodC5taW5pbXVtLHQuZXhjbHVzaXZlTWluaW11bSk7c2kobSkmJmk8bSYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWluaW11bVdhcm5pbmciLCJWYWx1ZSBpcyBiZWxvdyB0aGUgbWluaW11bSBvZiB7MH0uIixtKX0pO3ZhciBnPWgodC5tYXhpbXVtLHQuZXhjbHVzaXZlTWF4aW11bSk7c2koZykmJmk+ZyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWF4aW11bVdhcm5pbmciLCJWYWx1ZSBpcyBhYm92ZSB0aGUgbWF4aW11bSBvZiB7MH0uIixnKX0pfShpLHQsbik7YnJlYWs7Y2FzZSJwcm9wZXJ0eSI6cmV0dXJuIFhvKGkudmFsdWVOb2RlLHQsbixyKX0hZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBpLnR5cGU9PT1lfHwiaW50ZWdlciI9PT1lJiYibnVtYmVyIj09PWkudHlwZSYmaS5pc0ludGVnZXJ9QXJyYXkuaXNBcnJheSh0LnR5cGUpP3QudHlwZS5zb21lKGUpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygidHlwZUFycmF5TWlzbWF0Y2hXYXJuaW5nIiwiSW5jb3JyZWN0IHR5cGUuIEV4cGVjdGVkIG9uZSBvZiB7MH0uIix0LnR5cGUuam9pbigiLCAiKSl9KTp0LnR5cGUmJihlKHQudHlwZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fElvKCJ0eXBlTWlzbWF0Y2hXYXJuaW5nIiwnSW5jb3JyZWN0IHR5cGUuIEV4cGVjdGVkICJ7MH0iLicsdC50eXBlKX0pKTtpZihBcnJheS5pc0FycmF5KHQuYWxsT2YpKWZvcih2YXIgbz0wLGE9dC5hbGxPZjtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtYbyhpLEJvKHMpLG4scil9dmFyIGM9Qm8odC5ub3QpO2lmKGMpe3ZhciBsPW5ldyBXbyx1PXIubmV3U3ViKCk7WG8oaSxjLGwsdSksbC5oYXNQcm9ibGVtcygpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOklvKCJub3RTY2hlbWFXYXJuaW5nIiwiTWF0Y2hlcyBhIHNjaGVtYSB0aGF0IGlzIG5vdCBhbGxvd2VkLiIpfSk7Zm9yKHZhciBoPTAsZj11LnNjaGVtYXM7aDxmLmxlbmd0aDtoKyspe3ZhciBkPWZbaF07ZC5pbnZlcnRlZD0hZC5pbnZlcnRlZCxyLmFkZChkKX19dmFyIG09ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89W10sYT12b2lkIDAscz0wLGM9ZTtzPGMubGVuZ3RoO3MrKyl7dmFyIGw9Qm8oY1tzXSksdT1uZXcgV28saD1yLm5ld1N1YigpO2lmKFhvKGksbCx1LGgpLHUuaGFzUHJvYmxlbXMoKXx8by5wdXNoKGwpLGEpaWYodHx8dS5oYXNQcm9ibGVtcygpfHxhLnZhbGlkYXRpb25SZXN1bHQuaGFzUHJvYmxlbXMoKSl7dmFyIGY9dS5jb21wYXJlKGEudmFsaWRhdGlvblJlc3VsdCk7Zj4wP2E9e3NjaGVtYTpsLHZhbGlkYXRpb25SZXN1bHQ6dSxtYXRjaGluZ1NjaGVtYXM6aH06MD09PWYmJihhLm1hdGNoaW5nU2NoZW1hcy5tZXJnZShoKSxhLnZhbGlkYXRpb25SZXN1bHQubWVyZ2VFbnVtVmFsdWVzKHUpKX1lbHNlIGEubWF0Y2hpbmdTY2hlbWFzLm1lcmdlKGgpLGEudmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzTWF0Y2hlcys9dS5wcm9wZXJ0aWVzTWF0Y2hlcyxhLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9dS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzO2Vsc2UgYT17c2NoZW1hOmwsdmFsaWRhdGlvblJlc3VsdDp1LG1hdGNoaW5nU2NoZW1hczpofX1yZXR1cm4gby5sZW5ndGg+MSYmdCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDoxfSxtZXNzYWdlOklvKCJvbmVPZldhcm5pbmciLCJNYXRjaGVzIG11bHRpcGxlIHNjaGVtYXMgd2hlbiBvbmx5IG9uZSBtdXN0IHZhbGlkYXRlLiIpfSksYSYmKG4ubWVyZ2UoYS52YWxpZGF0aW9uUmVzdWx0KSxuLnByb3BlcnRpZXNNYXRjaGVzKz1hLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc01hdGNoZXMsbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz1hLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyxyLm1lcmdlKGEubWF0Y2hpbmdTY2hlbWFzKSksby5sZW5ndGh9O0FycmF5LmlzQXJyYXkodC5hbnlPZikmJm0odC5hbnlPZiwhMSk7QXJyYXkuaXNBcnJheSh0Lm9uZU9mKSYmbSh0Lm9uZU9mLCEwKTt2YXIgZz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgV28sbz1yLm5ld1N1YigpO1hvKGksQm8oZSksdCxvKSxuLm1lcmdlKHQpLG4ucHJvcGVydGllc01hdGNoZXMrPXQucHJvcGVydGllc01hdGNoZXMsbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz10LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMsci5tZXJnZShvKX0scD1Cbyh0LmlmKTtwJiYoYj1wLHY9Qm8odC50aGVuKSx5PUJvKHQuZWxzZSksQz1CbyhiKSx3PW5ldyBXbyxfPXIubmV3U3ViKCksWG8oaSxDLHcsXyksci5tZXJnZShfKSx3Lmhhc1Byb2JsZW1zKCk/eSYmZyh5KTp2JiZnKHYpKTt2YXIgYix2LHksQyx3LF87aWYoQXJyYXkuaXNBcnJheSh0LmVudW0pKXtmb3IodmFyIFM9SG8oaSksQT0hMSxFPTAseD10LmVudW07RTx4Lmxlbmd0aDtFKyspe3ZhciBOPXhbRV07aWYoYWkoUyxOKSl7QT0hMDticmVha319bi5lbnVtVmFsdWVzPXQuZW51bSxuLmVudW1WYWx1ZU1hdGNoPUEsQXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sY29kZTp2by5FbnVtVmFsdWVNaXNtYXRjaCxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygiZW51bVdhcm5pbmciLCJWYWx1ZSBpcyBub3QgYWNjZXB0ZWQuIFZhbGlkIHZhbHVlczogezB9LiIsdC5lbnVtLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSkpLmpvaW4oIiwgIikpfSl9aWYoY2kodC5jb25zdCkpe2FpKFM9SG8oaSksdC5jb25zdCk/bi5lbnVtVmFsdWVNYXRjaD0hMDoobi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sY29kZTp2by5FbnVtVmFsdWVNaXNtYXRjaCxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygiY29uc3RXYXJuaW5nIiwiVmFsdWUgbXVzdCBiZSB7MH0uIixKU09OLnN0cmluZ2lmeSh0LmNvbnN0KSl9KSxuLmVudW1WYWx1ZU1hdGNoPSExKSxuLmVudW1WYWx1ZXM9W3QuY29uc3RdfXQuZGVwcmVjYXRpb25NZXNzYWdlJiZpLnBhcmVudCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmkucGFyZW50Lm9mZnNldCxsZW5ndGg6aS5wYXJlbnQubGVuZ3RofSxzZXZlcml0eTpUci5XYXJuaW5nLG1lc3NhZ2U6dC5kZXByZWNhdGlvbk1lc3NhZ2UsY29kZTp2by5EZXByZWNhdGVkfSl9KCksci5hZGQoe25vZGU6aSxzY2hlbWE6dH0pfX1mdW5jdGlvbiBabyhlLHQpe3ZhciBuPVtdLHI9LTEsaT1lLmdldFRleHQoKSxvPXRpKGksITEpLGE9dCYmdC5jb2xsZWN0Q29tbWVudHM/W106dm9pZCAwO2Z1bmN0aW9uIHMoKXtmb3IoOzspe3ZhciB0PW8uc2NhbigpO3N3aXRjaCh1KCksdCl7Y2FzZSAxMjpjYXNlIDEzOkFycmF5LmlzQXJyYXkoYSkmJmEucHVzaChmci5jcmVhdGUoZS5wb3NpdGlvbkF0KG8uZ2V0VG9rZW5PZmZzZXQoKSksZS5wb3NpdGlvbkF0KG8uZ2V0VG9rZW5PZmZzZXQoKStvLmdldFRva2VuTGVuZ3RoKCkpKSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIHR9fX1mdW5jdGlvbiBjKHQsaSxvLGEscyl7aWYodm9pZCAwPT09cyYmKHM9VHIuRXJyb3IpLDA9PT1uLmxlbmd0aHx8byE9PXIpe3ZhciBjPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQobyksZS5wb3NpdGlvbkF0KGEpKTtuLnB1c2goUnIuY3JlYXRlKGMsdCxzLGksZS5sYW5ndWFnZUlkKSkscj1vfX1mdW5jdGlvbiBsKGUsdCxuLHIsYSl7dm9pZCAwPT09biYmKG49dm9pZCAwKSx2b2lkIDA9PT1yJiYocj1bXSksdm9pZCAwPT09YSYmKGE9W10pO3ZhciBsPW8uZ2V0VG9rZW5PZmZzZXQoKSx1PW8uZ2V0VG9rZW5PZmZzZXQoKStvLmdldFRva2VuTGVuZ3RoKCk7aWYobD09PXUmJmw+MCl7Zm9yKGwtLTtsPjAmJi9ccy8udGVzdChpLmNoYXJBdChsKSk7KWwtLTt1PWwrMX1pZihjKGUsdCxsLHUpLG4mJmgobiwhMSksci5sZW5ndGgrYS5sZW5ndGg+MClmb3IodmFyIGY9by5nZXRUb2tlbigpOzE3IT09Zjspe2lmKC0xIT09ci5pbmRleE9mKGYpKXtzKCk7YnJlYWt9aWYoLTEhPT1hLmluZGV4T2YoZikpYnJlYWs7Zj1zKCl9cmV0dXJuIG59ZnVuY3Rpb24gdSgpe3N3aXRjaChvLmdldFRva2VuRXJyb3IoKSl7Y2FzZSA0OnJldHVybiBsKElvKCJJbnZhbGlkVW5pY29kZSIsIkludmFsaWQgdW5pY29kZSBzZXF1ZW5jZSBpbiBzdHJpbmcuIiksdm8uSW52YWxpZFVuaWNvZGUpLCEwO2Nhc2UgNTpyZXR1cm4gbChJbygiSW52YWxpZEVzY2FwZUNoYXJhY3RlciIsIkludmFsaWQgZXNjYXBlIGNoYXJhY3RlciBpbiBzdHJpbmcuIiksdm8uSW52YWxpZEVzY2FwZUNoYXJhY3RlciksITA7Y2FzZSAzOnJldHVybiBsKElvKCJVbmV4cGVjdGVkRW5kT2ZOdW1iZXIiLCJVbmV4cGVjdGVkIGVuZCBvZiBudW1iZXIuIiksdm8uVW5leHBlY3RlZEVuZE9mTnVtYmVyKSwhMDtjYXNlIDE6cmV0dXJuIGwoSW8oIlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLCJVbmV4cGVjdGVkIGVuZCBvZiBjb21tZW50LiIpLHZvLlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQpLCEwO2Nhc2UgMjpyZXR1cm4gbChJbygiVW5leHBlY3RlZEVuZE9mU3RyaW5nIiwiVW5leHBlY3RlZCBlbmQgb2Ygc3RyaW5nLiIpLHZvLlVuZXhwZWN0ZWRFbmRPZlN0cmluZyksITA7Y2FzZSA2OnJldHVybiBsKElvKCJJbnZhbGlkQ2hhcmFjdGVyIiwiSW52YWxpZCBjaGFyYWN0ZXJzIGluIHN0cmluZy4gQ29udHJvbCBjaGFyYWN0ZXJzIG11c3QgYmUgZXNjYXBlZC4iKSx2by5JbnZhbGlkQ2hhcmFjdGVyKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGUubGVuZ3RoPW8uZ2V0VG9rZW5PZmZzZXQoKStvLmdldFRva2VuTGVuZ3RoKCktZS5vZmZzZXQsdCYmcygpLGV9dmFyIGY9bmV3IEtvKHZvaWQgMCwwLDApO2Z1bmN0aW9uIGQodCxuKXt2YXIgcj1uZXcgam8odCxvLmdldFRva2VuT2Zmc2V0KCksZiksaT1tKHIpO2lmKCFpKXtpZigxNiE9PW8uZ2V0VG9rZW4oKSlyZXR1cm47bChJbygiRG91YmxlUXVvdGVzRXhwZWN0ZWQiLCJQcm9wZXJ0eSBrZXlzIG11c3QgYmUgZG91YmxlcXVvdGVkIiksdm8uVW5kZWZpbmVkKTt2YXIgYT1uZXcgS28ocixvLmdldFRva2VuT2Zmc2V0KCksby5nZXRUb2tlbkxlbmd0aCgpKTthLnZhbHVlPW8uZ2V0VG9rZW5WYWx1ZSgpLGk9YSxzKCl9ci5rZXlOb2RlPWk7dmFyIHU9bltpLnZhbHVlXTtpZih1PyhjKElvKCJEdXBsaWNhdGVLZXlXYXJuaW5nIiwiRHVwbGljYXRlIG9iamVjdCBrZXkiKSx2by5EdXBsaWNhdGVLZXksci5rZXlOb2RlLm9mZnNldCxyLmtleU5vZGUub2Zmc2V0K3Iua2V5Tm9kZS5sZW5ndGgsVHIuV2FybmluZyksIm9iamVjdCI9PXR5cGVvZiB1JiZjKElvKCJEdXBsaWNhdGVLZXlXYXJuaW5nIiwiRHVwbGljYXRlIG9iamVjdCBrZXkiKSx2by5EdXBsaWNhdGVLZXksdS5rZXlOb2RlLm9mZnNldCx1LmtleU5vZGUub2Zmc2V0K3Uua2V5Tm9kZS5sZW5ndGgsVHIuV2FybmluZyksbltpLnZhbHVlXT0hMCk6bltpLnZhbHVlXT1yLDY9PT1vLmdldFRva2VuKCkpci5jb2xvbk9mZnNldD1vLmdldFRva2VuT2Zmc2V0KCkscygpO2Vsc2UgaWYobChJbygiQ29sb25FeHBlY3RlZCIsIkNvbG9uIGV4cGVjdGVkIiksdm8uQ29sb25FeHBlY3RlZCksMTA9PT1vLmdldFRva2VuKCkmJmUucG9zaXRpb25BdChpLm9mZnNldCtpLmxlbmd0aCkubGluZTxlLnBvc2l0aW9uQXQoby5nZXRUb2tlbk9mZnNldCgpKS5saW5lKXJldHVybiByLmxlbmd0aD1pLmxlbmd0aCxyO3ZhciBoPWcocik7cmV0dXJuIGg/KHIudmFsdWVOb2RlPWgsci5sZW5ndGg9aC5vZmZzZXQraC5sZW5ndGgtci5vZmZzZXQscik6bChJbygiVmFsdWVFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksdm8uVmFsdWVFeHBlY3RlZCxyLFtdLFsyLDVdKX1mdW5jdGlvbiBtKGUpe2lmKDEwPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgS28oZSxvLmdldFRva2VuT2Zmc2V0KCkpO3JldHVybiB0LnZhbHVlPW8uZ2V0VG9rZW5WYWx1ZSgpLGgodCwhMCl9fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKDM9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyBGbyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSk7cygpO2Zvcih2YXIgbj0hMTs0IT09by5nZXRUb2tlbigpJiYxNyE9PW8uZ2V0VG9rZW4oKTspe2lmKDU9PT1vLmdldFRva2VuKCkpe258fGwoSW8oIlZhbHVlRXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLHZvLlZhbHVlRXhwZWN0ZWQpO3ZhciByPW8uZ2V0VG9rZW5PZmZzZXQoKTtpZihzKCksND09PW8uZ2V0VG9rZW4oKSl7biYmYyhJbygiVHJhaWxpbmdDb21tYSIsIlRyYWlsaW5nIGNvbW1hIiksdm8uVHJhaWxpbmdDb21tYSxyLHIrMSk7Y29udGludWV9fWVsc2UgbiYmbChJbygiRXhwZWN0ZWRDb21tYSIsIkV4cGVjdGVkIGNvbW1hIiksdm8uQ29tbWFFeHBlY3RlZCk7dmFyIGk9Zyh0KTtpP3QuaXRlbXMucHVzaChpKTpsKElvKCJQcm9wZXJ0eUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSx2by5WYWx1ZUV4cGVjdGVkLHZvaWQgMCxbXSxbNCw1XSksbj0hMH1yZXR1cm4gNCE9PW8uZ2V0VG9rZW4oKT9sKElvKCJFeHBlY3RlZENsb3NlQnJhY2tldCIsIkV4cGVjdGVkIGNvbW1hIG9yIGNsb3NpbmcgYnJhY2tldCIpLHZvLkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkLHQpOmgodCwhMCl9fShlKXx8ZnVuY3Rpb24oZSl7aWYoMT09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IFVvKGUsby5nZXRUb2tlbk9mZnNldCgpKSxuPU9iamVjdC5jcmVhdGUobnVsbCk7cygpO2Zvcih2YXIgcj0hMTsyIT09by5nZXRUb2tlbigpJiYxNyE9PW8uZ2V0VG9rZW4oKTspe2lmKDU9PT1vLmdldFRva2VuKCkpe3J8fGwoSW8oIlByb3BlcnR5RXhwZWN0ZWQiLCJQcm9wZXJ0eSBleHBlY3RlZCIpLHZvLlByb3BlcnR5RXhwZWN0ZWQpO3ZhciBpPW8uZ2V0VG9rZW5PZmZzZXQoKTtpZihzKCksMj09PW8uZ2V0VG9rZW4oKSl7ciYmYyhJbygiVHJhaWxpbmdDb21tYSIsIlRyYWlsaW5nIGNvbW1hIiksdm8uVHJhaWxpbmdDb21tYSxpLGkrMSk7Y29udGludWV9fWVsc2UgciYmbChJbygiRXhwZWN0ZWRDb21tYSIsIkV4cGVjdGVkIGNvbW1hIiksdm8uQ29tbWFFeHBlY3RlZCk7dmFyIGE9ZCh0LG4pO2E/dC5wcm9wZXJ0aWVzLnB1c2goYSk6bChJbygiUHJvcGVydHlFeHBlY3RlZCIsIlByb3BlcnR5IGV4cGVjdGVkIiksdm8uUHJvcGVydHlFeHBlY3RlZCx2b2lkIDAsW10sWzIsNV0pLHI9ITB9cmV0dXJuIDIhPT1vLmdldFRva2VuKCk/bChJbygiRXhwZWN0ZWRDbG9zZUJyYWNlIiwiRXhwZWN0ZWQgY29tbWEgb3IgY2xvc2luZyBicmFjZSIpLHZvLkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQsdCk6aCh0LCEwKX19KGUpfHxtKGUpfHxmdW5jdGlvbihlKXtpZigxMT09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IERvKGUsby5nZXRUb2tlbk9mZnNldCgpKTtpZigwPT09by5nZXRUb2tlbkVycm9yKCkpe3ZhciBuPW8uZ2V0VG9rZW5WYWx1ZSgpO3RyeXt2YXIgcj1KU09OLnBhcnNlKG4pO2lmKCFzaShyKSlyZXR1cm4gbChJbygiSW52YWxpZE51bWJlckZvcm1hdCIsIkludmFsaWQgbnVtYmVyIGZvcm1hdC4iKSx2by5VbmRlZmluZWQsdCk7dC52YWx1ZT1yfWNhdGNoKGUpe3JldHVybiBsKElvKCJJbnZhbGlkTnVtYmVyRm9ybWF0IiwiSW52YWxpZCBudW1iZXIgZm9ybWF0LiIpLHZvLlVuZGVmaW5lZCx0KX10LmlzSW50ZWdlcj0tMT09PW4uaW5kZXhPZigiLiIpfXJldHVybiBoKHQsITApfX0oZSl8fGZ1bmN0aW9uKGUpe3N3aXRjaChvLmdldFRva2VuKCkpe2Nhc2UgNzpyZXR1cm4gaChuZXcgUm8oZSxvLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtjYXNlIDg6cmV0dXJuIGgobmV3IFZvKGUsITAsby5nZXRUb2tlbk9mZnNldCgpKSwhMCk7Y2FzZSA5OnJldHVybiBoKG5ldyBWbyhlLCExLG8uZ2V0VG9rZW5PZmZzZXQoKSksITApO2RlZmF1bHQ6cmV0dXJufX0oZSl9dmFyIHA9dm9pZCAwO3JldHVybiAxNyE9PXMoKSYmKChwPWcocCkpPzE3IT09by5nZXRUb2tlbigpJiZsKElvKCJFbmQgb2YgZmlsZSBleHBlY3RlZCIsIkVuZCBvZiBmaWxlIGV4cGVjdGVkLiIpLHZvLlVuZGVmaW5lZCk6bChJbygiSW52YWxpZCBzeW1ib2wiLCJFeHBlY3RlZCBhIEpTT04gb2JqZWN0LCBhcnJheSBvciBsaXRlcmFsLiIpLHZvLlVuZGVmaW5lZCkpLG5ldyBKbyhwLG4sYSl9ZnVuY3Rpb24gWW8oZSx0LG4pe2lmKG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpe3ZhciByPXQrIlx0IjtpZihBcnJheS5pc0FycmF5KGUpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIltdIjtmb3IodmFyIGk9IltcbiIsbz0wO288ZS5sZW5ndGg7bysrKWkrPXIrWW8oZVtvXSxyLG4pLG88ZS5sZW5ndGgtMSYmKGkrPSIsIiksaSs9IlxuIjtyZXR1cm4gaSs9dCsiXSJ9dmFyIGE9T2JqZWN0LmtleXMoZSk7aWYoMD09PWEubGVuZ3RoKXJldHVybiJ7fSI7Zm9yKGk9IntcbiIsbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO2krPXIrSlNPTi5zdHJpbmdpZnkocykrIjogIitZbyhlW3NdLHIsbiksbzxhLmxlbmd0aC0xJiYoaSs9IiwiKSxpKz0iXG4ifXJldHVybiBpKz10KyJ9In1yZXR1cm4gbihlKX12YXIgUW89Tm8oKSxlYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPVByb21pc2UpLHZvaWQgMD09PXImJihyPXt9KSx0aGlzLnNjaGVtYVNlcnZpY2U9ZSx0aGlzLmNvbnRyaWJ1dGlvbnM9dCx0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcj1uLHRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzPXJ9cmV0dXJuIGUucHJvdG90eXBlLmRvUmVzb2x2ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb250cmlidXRpb25zLmxlbmd0aC0xO3Q+PTA7dC0tKXt2YXIgbj10aGlzLmNvbnRyaWJ1dGlvbnNbdF0ucmVzb2x2ZUNvbXBsZXRpb247aWYobil7dmFyIHI9bihlKTtpZihyKXJldHVybiByfX1yZXR1cm4gdGhpcy5wcm9taXNlQ29uc3RydWN0b3IucmVzb2x2ZShlKX0sZS5wcm90b3R5cGUuZG9Db21wbGV0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxpPXtpdGVtczpbXSxpc0luY29tcGxldGU6ITF9LG89ZS5nZXRUZXh0KCksYT1lLm9mZnNldEF0KHQpLHM9bi5nZXROb2RlRnJvbU9mZnNldChhLCEwKTtpZih0aGlzLmlzSW5Db21tZW50KGUscz9zLm9mZnNldDowLGEpKXJldHVybiBQcm9taXNlLnJlc29sdmUoaSk7aWYocyYmYT09PXMub2Zmc2V0K3MubGVuZ3RoJiZhPjApe3ZhciBjPW9bYS0xXTsoIm9iamVjdCI9PT1zLnR5cGUmJiJ9Ij09PWN8fCJhcnJheSI9PT1zLnR5cGUmJiJdIj09PWMpJiYocz1zLnBhcmVudCl9dmFyIGwsdT10aGlzLmdldEN1cnJlbnRXb3JkKGUsYSk7aWYoIXN8fCJzdHJpbmciIT09cy50eXBlJiYibnVtYmVyIiE9PXMudHlwZSYmImJvb2xlYW4iIT09cy50eXBlJiYibnVsbCIhPT1zLnR5cGUpe3ZhciBoPWEtdS5sZW5ndGg7aD4wJiYnIic9PT1vW2gtMV0mJmgtLSxsPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQoaCksdCl9ZWxzZSBsPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQocy5vZmZzZXQpLGUucG9zaXRpb25BdChzLm9mZnNldCtzLmxlbmd0aCkpO3ZhciBmPXt9LGQ9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD1lLmxhYmVsLG49Zlt0XTtpZihuKW4uZG9jdW1lbnRhdGlvbnx8KG4uZG9jdW1lbnRhdGlvbj1lLmRvY3VtZW50YXRpb24pLG4uZGV0YWlsfHwobi5kZXRhaWw9ZS5kZXRhaWwpO2Vsc2V7aWYoKHQ9dC5yZXBsYWNlKC9bXG5dL2csIuKGtSIpKS5sZW5ndGg+NjApe3ZhciByPXQuc3Vic3RyKDAsNTcpLnRyaW0oKSsiLi4uIjtmW3JdfHwodD1yKX1sJiZ2b2lkIDAhPT1lLmluc2VydFRleHQmJihlLnRleHRFZGl0PUtyLnJlcGxhY2UobCxlLmluc2VydFRleHQpKSxlLmxhYmVsPXQsZlt0XT1lLGkuaXRlbXMucHVzaChlKX19LHNldEFzSW5jb21wbGV0ZTpmdW5jdGlvbigpe2kuaXNJbmNvbXBsZXRlPSEwfSxlcnJvcjpmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpfSxsb2c6ZnVuY3Rpb24oZSl7Y29uc29sZS5sb2coZSl9LGdldE51bWJlck9mUHJvcG9zYWxzOmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXRlbXMubGVuZ3RofX07cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSxuKS50aGVuKChmdW5jdGlvbih0KXt2YXIgYz1bXSxoPSEwLG09IiIsZz12b2lkIDA7aWYocyYmInN0cmluZyI9PT1zLnR5cGUpe3ZhciBwPXMucGFyZW50O3AmJiJwcm9wZXJ0eSI9PT1wLnR5cGUmJnAua2V5Tm9kZT09PXMmJihoPSFwLnZhbHVlTm9kZSxnPXAsbT1vLnN1YnN0cihzLm9mZnNldCsxLHMubGVuZ3RoLTIpLHAmJihzPXAucGFyZW50KSl9aWYocyYmIm9iamVjdCI9PT1zLnR5cGUpe2lmKHMub2Zmc2V0PT09YSlyZXR1cm4gaTtzLnByb3BlcnRpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZyYmZz09PWV8fChmW2Uua2V5Tm9kZS52YWx1ZV09SWkuY3JlYXRlKCJfXyIpKX0pKTt2YXIgYj0iIjtoJiYoYj1yLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoZSxlLm9mZnNldEF0KGwuZW5kKSkpLHQ/ci5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zKHQsbixzLGgsYixkKTpyLmdldFNjaGVtYUxlc3NQcm9wZXJ0eUNvbXBsZXRpb25zKG4scyxtLGQpO3ZhciB2PXpvKHMpO3IuY29udHJpYnV0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10LmNvbGxlY3RQcm9wZXJ0eUNvbXBsZXRpb25zKGUudXJpLHYsdSxoLCIiPT09YixkKTtuJiZjLnB1c2gobil9KSksIXQmJnUubGVuZ3RoPjAmJiciJyE9PW8uY2hhckF0KGEtdS5sZW5ndGgtMSkmJihkLmFkZCh7a2luZDpTaS5Qcm9wZXJ0eSxsYWJlbDpyLmdldExhYmVsRm9yVmFsdWUodSksaW5zZXJ0VGV4dDpyLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eSh1LHZvaWQgMCwhMSxiKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLGQuc2V0QXNJbmNvbXBsZXRlKCkpfXZhciB5PXt9O3JldHVybiB0P3IuZ2V0VmFsdWVDb21wbGV0aW9ucyh0LG4scyxhLGUsZCx5KTpyLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zKG4scyxhLGUsZCksci5jb250cmlidXRpb25zLmxlbmd0aD4wJiZyLmdldENvbnRyaWJ1dGVkVmFsdWVDb21wbGV0aW9ucyhuLHMsYSxlLGQsYyksci5wcm9taXNlQ29uc3RydWN0b3IuYWxsKGMpLnRoZW4oKGZ1bmN0aW9uKCl7aWYoMD09PWQuZ2V0TnVtYmVyT2ZQcm9wb3NhbHMoKSl7dmFyIHQ9YTshc3x8InN0cmluZyIhPT1zLnR5cGUmJiJudW1iZXIiIT09cy50eXBlJiYiYm9vbGVhbiIhPT1zLnR5cGUmJiJudWxsIiE9PXMudHlwZXx8KHQ9cy5vZmZzZXQrcy5sZW5ndGgpO3ZhciBuPXIuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihlLHQpO3IuYWRkRmlsbGVyVmFsdWVDb21wbGV0aW9ucyh5LG4sZCl9cmV0dXJuIGl9KSl9KSl9LGUucHJvdG90eXBlLmdldFByb3BlcnR5Q29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPXRoaXM7dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEsbi5vZmZzZXQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUubm9kZT09PW4mJiFlLmludmVydGVkKXt2YXIgdD1lLnNjaGVtYS5wcm9wZXJ0aWVzO3QmJk9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07aWYoIm9iamVjdCI9PXR5cGVvZiBuJiYhbi5kZXByZWNhdGlvbk1lc3NhZ2UmJiFuLmRvTm90U3VnZ2VzdCl7dmFyIHM9e2tpbmQ6U2kuUHJvcGVydHksbGFiZWw6ZSxpbnNlcnRUZXh0OmEuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGUsbixyLGkpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxmaWx0ZXJUZXh0OmEuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGUpLGRvY3VtZW50YXRpb246YS5mcm9tTWFya3VwKG4ubWFya2Rvd25EZXNjcmlwdGlvbil8fG4uZGVzY3JpcHRpb258fCIifTt2b2lkIDAhPT1uLnN1Z2dlc3RTb3J0VGV4dCYmKHMuc29ydFRleHQ9bi5zdWdnZXN0U29ydFRleHQpLHMuaW5zZXJ0VGV4dCYmdWkocy5pbnNlcnRUZXh0LCIkMSIuY29uY2F0KGkpKSYmKHMuY29tbWFuZD17dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifSksby5hZGQocyl9fSkpO3ZhciBzPWUuc2NoZW1hLnByb3BlcnR5TmFtZXM7aWYoIm9iamVjdCI9PXR5cGVvZiBzJiYhcy5kZXByZWNhdGlvbk1lc3NhZ2UmJiFzLmRvTm90U3VnZ2VzdCl7dmFyIGM9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD12b2lkIDApO3ZhciBuPXtraW5kOlNpLlByb3BlcnR5LGxhYmVsOmUsaW5zZXJ0VGV4dDphLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eShlLHZvaWQgMCxyLGkpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxmaWx0ZXJUZXh0OmEuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGUpLGRvY3VtZW50YXRpb246dHx8YS5mcm9tTWFya3VwKHMubWFya2Rvd25EZXNjcmlwdGlvbil8fHMuZGVzY3JpcHRpb258fCIifTt2b2lkIDAhPT1zLnN1Z2dlc3RTb3J0VGV4dCYmKG4uc29ydFRleHQ9cy5zdWdnZXN0U29ydFRleHQpLG4uaW5zZXJ0VGV4dCYmdWkobi5pbnNlcnRUZXh0LCIkMSIuY29uY2F0KGkpKSYmKG4uY29tbWFuZD17dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifSksby5hZGQobil9O2lmKHMuZW51bSlmb3IodmFyIGw9MDtsPHMuZW51bS5sZW5ndGg7bCsrKXt2YXIgdT12b2lkIDA7cy5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMmJmw8cy5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMubGVuZ3RoP3U9YS5mcm9tTWFya3VwKHMubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW2xdKTpzLmVudW1EZXNjcmlwdGlvbnMmJmw8cy5lbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmKHU9cy5lbnVtRGVzY3JpcHRpb25zW2xdKSxjKHMuZW51bVtsXSx1KX1zLmNvbnN0JiZjKHMuY29uc3QpfX19KSl9LGUucHJvdG90eXBlLmdldFNjaGVtYUxlc3NQcm9wZXJ0eUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMsbz1mdW5jdGlvbihlKXtlLnByb3BlcnRpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXlOb2RlLnZhbHVlO3IuYWRkKHtraW5kOlNpLlByb3BlcnR5LGxhYmVsOnQsaW5zZXJ0VGV4dDppLmdldEluc2VydFRleHRGb3JWYWx1ZSh0LCIiKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZmlsdGVyVGV4dDppLmdldEZpbHRlclRleHRGb3JWYWx1ZSh0KSxkb2N1bWVudGF0aW9uOiIifSl9KSl9O2lmKHQucGFyZW50KWlmKCJwcm9wZXJ0eSI9PT10LnBhcmVudC50eXBlKXt2YXIgYT10LnBhcmVudC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoKGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUhPT10LnBhcmVudCYmZS5rZXlOb2RlLnZhbHVlPT09YSYmZS52YWx1ZU5vZGUmJiJvYmplY3QiPT09ZS52YWx1ZU5vZGUudHlwZSYmbyhlLnZhbHVlTm9kZSksITB9KSl9ZWxzZSJhcnJheSI9PT10LnBhcmVudC50eXBlJiZ0LnBhcmVudC5pdGVtcy5mb3JFYWNoKChmdW5jdGlvbihlKXsib2JqZWN0Ij09PWUudHlwZSYmZSE9PXQmJm8oZSl9KSk7ZWxzZSJvYmplY3QiPT09dC50eXBlJiZyLmFkZCh7a2luZDpTaS5Qcm9wZXJ0eSxsYWJlbDoiJHNjaGVtYSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eSgiJHNjaGVtYSIsdm9pZCAwLCEwLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIixmaWx0ZXJUZXh0OnRoaXMuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKCIkc2NoZW1hIil9KX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hTGVzc1ZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz10aGlzLGE9bjtpZighdHx8InN0cmluZyIhPT10LnR5cGUmJiJudW1iZXIiIT09dC50eXBlJiYiYm9vbGVhbiIhPT10LnR5cGUmJiJudWxsIiE9PXQudHlwZXx8KGE9dC5vZmZzZXQrdC5sZW5ndGgsdD10LnBhcmVudCksIXQpcmV0dXJuIGkuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm9iamVjdCIpLGxhYmVsOiJFbXB0eSBvYmplY3QiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoe30sIiIpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSksdm9pZCBpLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJhcnJheSIpLGxhYmVsOiJFbXB0eSBhcnJheSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShbXSwiIiksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KTt2YXIgcz10aGlzLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIocixhKSxjPWZ1bmN0aW9uKGUpe2UucGFyZW50JiYhR28oZS5wYXJlbnQsbiwhMCkmJmkuYWRkKHtraW5kOm8uZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDpvLmdldExhYmVsVGV4dEZvck1hdGNoaW5nTm9kZShlLHIpLGluc2VydFRleHQ6by5nZXRJbnNlcnRUZXh0Rm9yTWF0Y2hpbmdOb2RlKGUscixzKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLCJib29sZWFuIj09PWUudHlwZSYmby5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCFlLnZhbHVlLHMsaSl9O2lmKCJwcm9wZXJ0eSI9PT10LnR5cGUmJm4+KHQuY29sb25PZmZzZXR8fDApKXt2YXIgbD10LnZhbHVlTm9kZTtpZihsJiYobj5sLm9mZnNldCtsLmxlbmd0aHx8Im9iamVjdCI9PT1sLnR5cGV8fCJhcnJheSI9PT1sLnR5cGUpKXJldHVybjt2YXIgdT10LmtleU5vZGUudmFsdWU7ZS52aXNpdCgoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZS5rZXlOb2RlLnZhbHVlPT09dSYmZS52YWx1ZU5vZGUmJmMoZS52YWx1ZU5vZGUpLCEwfSkpLCIkc2NoZW1hIj09PXUmJnQucGFyZW50JiYhdC5wYXJlbnQucGFyZW50JiZ0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKHMsaSl9aWYoImFycmF5Ij09PXQudHlwZSlpZih0LnBhcmVudCYmInByb3BlcnR5Ij09PXQucGFyZW50LnR5cGUpe3ZhciBoPXQucGFyZW50LmtleU5vZGUudmFsdWU7ZS52aXNpdCgoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZS5rZXlOb2RlLnZhbHVlPT09aCYmZS52YWx1ZU5vZGUmJiJhcnJheSI9PT1lLnZhbHVlTm9kZS50eXBlJiZlLnZhbHVlTm9kZS5pdGVtcy5mb3JFYWNoKGMpLCEwfSkpfWVsc2UgdC5pdGVtcy5mb3JFYWNoKGMpfSxlLnByb3RvdHlwZS5nZXRWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPXIsYz12b2lkIDAsbD12b2lkIDA7aWYoIW58fCJzdHJpbmciIT09bi50eXBlJiYibnVtYmVyIiE9PW4udHlwZSYmImJvb2xlYW4iIT09bi50eXBlJiYibnVsbCIhPT1uLnR5cGV8fChzPW4ub2Zmc2V0K24ubGVuZ3RoLGw9bixuPW4ucGFyZW50KSxuKXtpZigicHJvcGVydHkiPT09bi50eXBlJiZyPihuLmNvbG9uT2Zmc2V0fHwwKSl7dmFyIHU9bi52YWx1ZU5vZGU7aWYodSYmcj51Lm9mZnNldCt1Lmxlbmd0aClyZXR1cm47Yz1uLmtleU5vZGUudmFsdWUsbj1uLnBhcmVudH1pZihuJiYodm9pZCAwIT09Y3x8ImFycmF5Ij09PW4udHlwZSkpe2Zvcih2YXIgaD10aGlzLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoaSxzKSxmPTAsZD10LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxuLm9mZnNldCxsKTtmPGQubGVuZ3RoO2YrKyl7dmFyIG09ZFtmXTtpZihtLm5vZGU9PT1uJiYhbS5pbnZlcnRlZCYmbS5zY2hlbWEpe2lmKCJhcnJheSI9PT1uLnR5cGUmJm0uc2NoZW1hLml0ZW1zKWlmKEFycmF5LmlzQXJyYXkobS5zY2hlbWEuaXRlbXMpKXt2YXIgZz10aGlzLmZpbmRJdGVtQXRPZmZzZXQobixpLHIpO2c8bS5zY2hlbWEuaXRlbXMubGVuZ3RoJiZ0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMobS5zY2hlbWEuaXRlbXNbZ10saCxvLGEpfWVsc2UgdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKG0uc2NoZW1hLml0ZW1zLGgsbyxhKTtpZih2b2lkIDAhPT1jKXt2YXIgcD0hMTtpZihtLnNjaGVtYS5wcm9wZXJ0aWVzKSh3PW0uc2NoZW1hLnByb3BlcnRpZXNbY10pJiYocD0hMCx0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnModyxoLG8sYSkpO2lmKG0uc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzJiYhcClmb3IodmFyIGI9MCx2PU9iamVjdC5rZXlzKG0uc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKTtiPHYubGVuZ3RoO2IrKyl7dmFyIHk9dltiXSxDPWhpKHkpO2lmKG51bGw9PUM/dm9pZCAwOkMudGVzdChjKSl7cD0hMDt2YXIgdz1tLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllc1t5XTt0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnModyxoLG8sYSl9fWlmKG0uc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzJiYhcCl7dz1tLnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllczt0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnModyxoLG8sYSl9fX19IiRzY2hlbWEiIT09Y3x8bi5wYXJlbnR8fHRoaXMuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnMoaCxvKSxhLmJvb2xlYW4mJih0aGlzLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb24oITAsaCxvKSx0aGlzLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb24oITEsaCxvKSksYS5udWxsJiZ0aGlzLmFkZE51bGxWYWx1ZUNvbXBsZXRpb24oaCxvKX19ZWxzZSB0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZS5zY2hlbWEsIiIsbyxhKX0sZS5wcm90b3R5cGUuZ2V0Q29udHJpYnV0ZWRWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXtpZih0KXtpZigic3RyaW5nIiE9PXQudHlwZSYmIm51bWJlciIhPT10LnR5cGUmJiJib29sZWFuIiE9PXQudHlwZSYmIm51bGwiIT09dC50eXBlfHwodD10LnBhcmVudCksdCYmInByb3BlcnR5Ij09PXQudHlwZSYmbj4odC5jb2xvbk9mZnNldHx8MCkpe3ZhciBhPXQua2V5Tm9kZS52YWx1ZSxzPXQudmFsdWVOb2RlO2lmKCghc3x8bjw9cy5vZmZzZXQrcy5sZW5ndGgpJiZ0LnBhcmVudCl7dmFyIGM9em8odC5wYXJlbnQpO3RoaXMuY29udHJpYnV0aW9ucy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmNvbGxlY3RWYWx1ZUNvbXBsZXRpb25zKHIudXJpLGMsYSxpKTt0JiZvLnB1c2godCl9KSl9fX1lbHNlIHRoaXMuY29udHJpYnV0aW9ucy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmNvbGxlY3REZWZhdWx0Q29tcGxldGlvbnMoci51cmksaSk7dCYmby5wdXNoKHQpfSkpfSxlLnByb3RvdHlwZS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXM7Im9iamVjdCI9PXR5cGVvZiBlJiYodGhpcy5hZGRFbnVtVmFsdWVDb21wbGV0aW9ucyhlLHQsbiksdGhpcy5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucyhlLHQsbiksdGhpcy5jb2xsZWN0VHlwZXMoZSxyKSxBcnJheS5pc0FycmF5KGUuYWxsT2YpJiZlLmFsbE9mLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LG4scil9KSksQXJyYXkuaXNBcnJheShlLmFueU9mKSYmZS5hbnlPZi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIpfSkpLEFycmF5LmlzQXJyYXkoZS5vbmVPZikmJmUub25lT2YuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQsbixyKX0pKSl9LGUucHJvdG90eXBlLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXM7dm9pZCAwPT09ciYmKHI9MCk7dmFyIG89ITE7aWYoY2koZS5kZWZhdWx0KSl7Zm9yKHZhciBhPWUudHlwZSxzPWUuZGVmYXVsdCxjPXI7Yz4wO2MtLSlzPVtzXSxhPSJhcnJheSI7bi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChhKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUocyksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShzLHQpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkZXRhaWw6UW8oImpzb24uc3VnZ2VzdC5kZWZhdWx0IiwiRGVmYXVsdCB2YWx1ZSIpfSksbz0hMH1BcnJheS5pc0FycmF5KGUuZXhhbXBsZXMpJiZlLmV4YW1wbGVzLmZvckVhY2goKGZ1bmN0aW9uKGEpe2Zvcih2YXIgcz1lLnR5cGUsYz1hLGw9cjtsPjA7bC0tKWM9W2NdLHM9ImFycmF5IjtuLmFkZCh7a2luZDppLmdldFN1Z2dlc3Rpb25LaW5kKHMpLGxhYmVsOmkuZ2V0TGFiZWxGb3JWYWx1ZShjKSxpbnNlcnRUZXh0OmkuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGMsdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0fSksbz0hMH0pKSxBcnJheS5pc0FycmF5KGUuZGVmYXVsdFNuaXBwZXRzKSYmZS5kZWZhdWx0U25pcHBldHMuZm9yRWFjaCgoZnVuY3Rpb24oYSl7dmFyIHMsYyxsPWUudHlwZSx1PWEuYm9keSxoPWEubGFiZWw7aWYoY2kodSkpe2UudHlwZTtmb3IodmFyIGY9cjtmPjA7Zi0tKXU9W3VdO3M9aS5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKHUsdCksYz1pLmdldEZpbHRlclRleHRGb3JTbmlwcGV0VmFsdWUodSksaD1ofHxpLmdldExhYmVsRm9yU25pcHBldFZhbHVlKHUpfWVsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBhLmJvZHlUZXh0KXJldHVybjt2YXIgZD0iIixtPSIiLGc9IiI7Zm9yKGY9cjtmPjA7Zi0tKWQ9ZCtnKyJbXG4iLG09bSsiXG4iK2crIl0iLGcrPSJcdCIsbD0iYXJyYXkiO3M9ZCtnK2EuYm9keVRleHQuc3BsaXQoIlxuIikuam9pbigiXG4iK2cpK20rdCxoPWh8fHMsYz1zLnJlcGxhY2UoL1tcbl0vZywiIil9bi5hZGQoe2tpbmQ6aS5nZXRTdWdnZXN0aW9uS2luZChsKSxsYWJlbDpoLGRvY3VtZW50YXRpb246aS5mcm9tTWFya3VwKGEubWFya2Rvd25EZXNjcmlwdGlvbil8fGEuZGVzY3JpcHRpb24saW5zZXJ0VGV4dDpzLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxmaWx0ZXJUZXh0OmN9KSxvPSEwfSkpLCFvJiYib2JqZWN0Ij09dHlwZW9mIGUuaXRlbXMmJiFBcnJheS5pc0FycmF5KGUuaXRlbXMpJiZyPDUmJnRoaXMuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnMoZS5pdGVtcyx0LG4scisxKX0sZS5wcm90b3R5cGUuYWRkRW51bVZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4pe2lmKGNpKGUuY29uc3QpJiZuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKGUuY29uc3QpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZS5jb25zdCx0KSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjp0aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8ZS5kZXNjcmlwdGlvbn0pLEFycmF5LmlzQXJyYXkoZS5lbnVtKSlmb3IodmFyIHI9MCxpPWUuZW51bS5sZW5ndGg7cjxpO3IrKyl7dmFyIG89ZS5lbnVtW3JdLGE9dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25EZXNjcmlwdGlvbil8fGUuZGVzY3JpcHRpb247ZS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMmJnI8ZS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiZ0aGlzLmRvZXNTdXBwb3J0TWFya2Rvd24oKT9hPXRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1tyXSk6ZS5lbnVtRGVzY3JpcHRpb25zJiZyPGUuZW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJihhPWUuZW51bURlc2NyaXB0aW9uc1tyXSksbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShvKSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKG8sdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRvY3VtZW50YXRpb246YX0pfX0sZS5wcm90b3R5cGUuY29sbGVjdFR5cGVzPWZ1bmN0aW9uKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkoZS5lbnVtKSYmIWNpKGUuY29uc3QpKXt2YXIgbj1lLnR5cGU7QXJyYXkuaXNBcnJheShuKT9uLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdPSEwfSkpOm4mJih0W25dPSEwKX19LGUucHJvdG90eXBlLmFkZEZpbGxlclZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4pe2Uub2JqZWN0JiZuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJvYmplY3QiKSxsYWJlbDoie30iLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHt9LHQpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkZXRhaWw6UW8oImRlZmF1bHRzLm9iamVjdCIsIk5ldyBvYmplY3QiKSxkb2N1bWVudGF0aW9uOiIifSksZS5hcnJheSYmbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYXJyYXkiKSxsYWJlbDoiW10iLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKFtdLHQpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkZXRhaWw6UW8oImRlZmF1bHRzLmFycmF5IiwiTmV3IGFycmF5IiksZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uPWZ1bmN0aW9uKGUsdCxuKXtuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJib29sZWFuIiksbGFiZWw6ZT8idHJ1ZSI6ImZhbHNlIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0sZS5wcm90b3R5cGUuYWRkTnVsbFZhbHVlQ29tcGxldGlvbj1mdW5jdGlvbihlLHQpe3QuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm51bGwiKSxsYWJlbDoibnVsbCIsaW5zZXJ0VGV4dDoibnVsbCIrZSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10aGlzLnNjaGVtYVNlcnZpY2UuZ2V0UmVnaXN0ZXJlZFNjaGVtYUlkcygoZnVuY3Rpb24oZSl7cmV0dXJuImh0dHAiPT09ZXx8Imh0dHBzIj09PWV9KSk7ci5mb3JFYWNoKChmdW5jdGlvbihyKXtyZXR1cm4gdC5hZGQoe2tpbmQ6U2kuTW9kdWxlLGxhYmVsOm4uZ2V0TGFiZWxGb3JWYWx1ZShyKSxmaWx0ZXJUZXh0Om4uZ2V0RmlsdGVyVGV4dEZvclZhbHVlKHIpLGluc2VydFRleHQ6bi5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUocixlKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSkpfSxlLnByb3RvdHlwZS5nZXRMYWJlbEZvclZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0sZS5wcm90b3R5cGUuZ2V0RmlsdGVyVGV4dEZvclZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0sZS5wcm90b3R5cGUuZ2V0RmlsdGVyVGV4dEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXCRce1xkKzooW159XSspXH18XCRcZCsvZywiJDEiKX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL1wkXHtcZCs6KFtefV0rKVx9fFwkXGQrL2csIiQxIil9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JQbGFpblRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcXCRcfV0vZywiXFwkJiIpfSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yVmFsdWU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1KU09OLnN0cmluZ2lmeShlLG51bGwsIlx0Iik7cmV0dXJuInt9Ij09PW4/InskMX0iK3Q6IltdIj09PW4/IlskMV0iK3Q6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KG4rdCl9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gWW8oZSwiIiwoZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYiXiI9PT1lWzBdP2Uuc3Vic3RyKDEpOkpTT04uc3RyaW5naWZ5KGUpfSkpK3R9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gbnVsbD09PWU/IiR7MTpudWxsfSIrdDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpO2Nhc2Uic3RyaW5nIjp2YXIgbj1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gbj1uLnN1YnN0cigxLG4ubGVuZ3RoLTIpLCciJHsxOicrKG49dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KG4pKSsnfSInK3Q7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIiR7MToiK0pTT04uc3RyaW5naWZ5KGUpKyJ9Iit0fXJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpfSxlLnByb3RvdHlwZS5nZXRTdWdnZXN0aW9uS2luZD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgdD1lO2U9dC5sZW5ndGg+MD90WzBdOnZvaWQgMH1pZighZSlyZXR1cm4gU2kuVmFsdWU7c3dpdGNoKGUpe2Nhc2Uic3RyaW5nIjpkZWZhdWx0OnJldHVybiBTaS5WYWx1ZTtjYXNlIm9iamVjdCI6cmV0dXJuIFNpLk1vZHVsZTtjYXNlInByb3BlcnR5IjpyZXR1cm4gU2kuUHJvcGVydHl9fSxlLnByb3RvdHlwZS5nZXRMYWJlbFRleHRGb3JNYXRjaGluZ05vZGU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZS50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4iW10iO2Nhc2Uib2JqZWN0IjpyZXR1cm4ie30iO2RlZmF1bHQ6cmV0dXJuIHQuZ2V0VGV4dCgpLnN1YnN0cihlLm9mZnNldCxlLmxlbmd0aCl9fSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKGUsdCxuKXtzd2l0Y2goZS50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoW10sbik7Y2FzZSJvYmplY3QiOnJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSxuKTtkZWZhdWx0OnZhciByPXQuZ2V0VGV4dCgpLnN1YnN0cihlLm9mZnNldCxlLmxlbmd0aCkrbjtyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KHIpfX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsIiIpO2lmKCFuKXJldHVybiBpO3ZhciBvLGE9aSsiOiAiLHM9MDtpZih0KXtpZihBcnJheS5pc0FycmF5KHQuZGVmYXVsdFNuaXBwZXRzKSl7aWYoMT09PXQuZGVmYXVsdFNuaXBwZXRzLmxlbmd0aCl7dmFyIGM9dC5kZWZhdWx0U25pcHBldHNbMF0uYm9keTtjaShjKSYmKG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKGMsIiIpKX1zKz10LmRlZmF1bHRTbmlwcGV0cy5sZW5ndGh9aWYodC5lbnVtJiYob3x8MSE9PXQuZW51bS5sZW5ndGh8fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmVudW1bMF0sIiIpKSxzKz10LmVudW0ubGVuZ3RoKSxjaSh0LmRlZmF1bHQpJiYob3x8KG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZGVmYXVsdCwiIikpLHMrKyksQXJyYXkuaXNBcnJheSh0LmV4YW1wbGVzKSYmdC5leGFtcGxlcy5sZW5ndGgmJihvfHwobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5leGFtcGxlc1swXSwiIikpLHMrPXQuZXhhbXBsZXMubGVuZ3RoKSwwPT09cyl7dmFyIGw9QXJyYXkuaXNBcnJheSh0LnR5cGUpP3QudHlwZVswXTp0LnR5cGU7c3dpdGNoKGx8fCh0LnByb3BlcnRpZXM/bD0ib2JqZWN0Ijp0Lml0ZW1zJiYobD0iYXJyYXkiKSksbCl7Y2FzZSJib29sZWFuIjpvPSIkMSI7YnJlYWs7Y2FzZSJzdHJpbmciOm89JyIkMSInO2JyZWFrO2Nhc2Uib2JqZWN0IjpvPSJ7JDF9IjticmVhaztjYXNlImFycmF5IjpvPSJbJDFdIjticmVhaztjYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjpvPSIkezE6MH0iO2JyZWFrO2Nhc2UibnVsbCI6bz0iJHsxOm51bGx9IjticmVhaztkZWZhdWx0OnJldHVybiBpfX19cmV0dXJuKCFvfHxzPjEpJiYobz0iJDEiKSxhK28rcn0sZS5wcm90b3R5cGUuZ2V0Q3VycmVudFdvcmQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dC0xLHI9ZS5nZXRUZXh0KCk7bj49MCYmLTE9PT0nIFx0XG5cclx2Ijp7WyxdfScuaW5kZXhPZihyLmNoYXJBdChuKSk7KW4tLTtyZXR1cm4gci5zdWJzdHJpbmcobisxLHQpfSxlLnByb3RvdHlwZS5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGkoZS5nZXRUZXh0KCksITApO3N3aXRjaChuLnNldFBvc2l0aW9uKHQpLG4uc2NhbigpKXtjYXNlIDU6Y2FzZSAyOmNhc2UgNDpjYXNlIDE3OnJldHVybiIiO2RlZmF1bHQ6cmV0dXJuIiwifX0sZS5wcm90b3R5cGUuZmluZEl0ZW1BdE9mZnNldD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXRpKHQuZ2V0VGV4dCgpLCEwKSxpPWUuaXRlbXMsbz1pLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgYT1pW29dO2lmKG4+YS5vZmZzZXQrYS5sZW5ndGgpcmV0dXJuIHIuc2V0UG9zaXRpb24oYS5vZmZzZXQrYS5sZW5ndGgpLDU9PT1yLnNjYW4oKSYmbj49ci5nZXRUb2tlbk9mZnNldCgpK3IuZ2V0VG9rZW5MZW5ndGgoKT9vKzE6bztpZihuPj1hLm9mZnNldClyZXR1cm4gb31yZXR1cm4gMH0sZS5wcm90b3R5cGUuaXNJbkNvbW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRpKGUuZ2V0VGV4dCgpLCExKTtyLnNldFBvc2l0aW9uKHQpO2Zvcih2YXIgaT1yLnNjYW4oKTsxNyE9PWkmJnIuZ2V0VG9rZW5PZmZzZXQoKStyLmdldFRva2VuTGVuZ3RoKCk8bjspaT1yLnNjYW4oKTtyZXR1cm4oMTI9PT1pfHwxMz09PWkpJiZyLmdldFRva2VuT2Zmc2V0KCk8PW59LGUucHJvdG90eXBlLmZyb21NYXJrdXA9ZnVuY3Rpb24oZSl7aWYoZSYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCkpcmV0dXJue2tpbmQ6Q2kuTWFya2Rvd24sdmFsdWU6ZX19LGUucHJvdG90eXBlLmRvZXNTdXBwb3J0TWFya2Rvd249ZnVuY3Rpb24oKXtpZighY2kodGhpcy5zdXBwb3J0c01hcmtkb3duKSl7dmFyIGU9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50JiZ0aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQuY29tcGxldGlvbjt0aGlzLnN1cHBvcnRzTWFya2Rvd249ZSYmZS5jb21wbGV0aW9uSXRlbSYmQXJyYXkuaXNBcnJheShlLmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQpJiYtMSE9PWUuY29tcGxldGlvbkl0ZW0uZG9jdW1lbnRhdGlvbkZvcm1hdC5pbmRleE9mKENpLk1hcmtkb3duKX1yZXR1cm4gdGhpcy5zdXBwb3J0c01hcmtkb3dufSxlLnByb3RvdHlwZS5kb2VzU3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzPWZ1bmN0aW9uKCl7aWYoIWNpKHRoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzKSl7dmFyIGU9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50JiZ0aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQuY29tcGxldGlvbjt0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycz1lJiZlLmNvbXBsZXRpb25JdGVtJiYhIWUuY29tcGxldGlvbkl0ZW0uY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnR9cmV0dXJuIHRoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzfSxlfSgpLHRhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2NoZW1hU2VydmljZT1lLHRoaXMuY29udHJpYnV0aW9ucz10LHRoaXMucHJvbWlzZT1ufHxQcm9taXNlfXJldHVybiBlLnByb3RvdHlwZS5kb0hvdmVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLm9mZnNldEF0KHQpLGk9bi5nZXROb2RlRnJvbU9mZnNldChyKTtpZighaXx8KCJvYmplY3QiPT09aS50eXBlfHwiYXJyYXkiPT09aS50eXBlKSYmcj5pLm9mZnNldCsxJiZyPGkub2Zmc2V0K2kubGVuZ3RoLTEpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG51bGwpO3ZhciBvPWk7aWYoInN0cmluZyI9PT1pLnR5cGUpe3ZhciBhPWkucGFyZW50O2lmKGEmJiJwcm9wZXJ0eSI9PT1hLnR5cGUmJmEua2V5Tm9kZT09PWkmJiEoaT1hLnZhbHVlTm9kZSkpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG51bGwpfWZvcih2YXIgcz1mci5jcmVhdGUoZS5wb3NpdGlvbkF0KG8ub2Zmc2V0KSxlLnBvc2l0aW9uQXQoby5vZmZzZXQrby5sZW5ndGgpKSxjPWZ1bmN0aW9uKGUpe3JldHVybntjb250ZW50czplLHJhbmdlOnN9fSxsPXpvKGkpLHU9dGhpcy5jb250cmlidXRpb25zLmxlbmd0aC0xO3U+PTA7dS0tKXt2YXIgaD10aGlzLmNvbnRyaWJ1dGlvbnNbdV0uZ2V0SW5mb0NvbnRyaWJ1dGlvbihlLnVyaSxsKTtpZihoKXJldHVybiBoLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBjKGUpfSkpfXJldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksbikudGhlbigoZnVuY3Rpb24oZSl7aWYoZSYmaSl7dmFyIHQ9bi5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEsaS5vZmZzZXQpLHI9dm9pZCAwLG89dm9pZCAwLGE9dm9pZCAwLHM9dm9pZCAwO3QuZXZlcnkoKGZ1bmN0aW9uKGUpe2lmKGUubm9kZT09PWkmJiFlLmludmVydGVkJiZlLnNjaGVtYSYmKHI9cnx8ZS5zY2hlbWEudGl0bGUsbz1vfHxlLnNjaGVtYS5tYXJrZG93bkRlc2NyaXB0aW9ufHxuYShlLnNjaGVtYS5kZXNjcmlwdGlvbiksZS5zY2hlbWEuZW51bSkpe3ZhciB0PWUuc2NoZW1hLmVudW0uaW5kZXhPZihIbyhpKSk7ZS5zY2hlbWEubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zP2E9ZS5zY2hlbWEubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW3RdOmUuc2NoZW1hLmVudW1EZXNjcmlwdGlvbnMmJihhPW5hKGUuc2NoZW1hLmVudW1EZXNjcmlwdGlvbnNbdF0pKSxhJiYic3RyaW5nIiE9dHlwZW9mKHM9ZS5zY2hlbWEuZW51bVt0XSkmJihzPUpTT04uc3RyaW5naWZ5KHMpKX1yZXR1cm4hMH0pKTt2YXIgbD0iIjtyZXR1cm4gciYmKGw9bmEocikpLG8mJihsLmxlbmd0aD4wJiYobCs9IlxuXG4iKSxsKz1vKSxhJiYobC5sZW5ndGg+MCYmKGwrPSJcblxuIiksbCs9ImAiLmNvbmNhdChmdW5jdGlvbihlKXtpZigtMSE9PWUuaW5kZXhPZigiYCIpKXJldHVybiJgYCAiK2UrIiBgYCI7cmV0dXJuIGV9KHMpLCJgOiAiKS5jb25jYXQoYSkpLGMoW2xdKX1yZXR1cm4gbnVsbH0pKX0sZX0oKTtmdW5jdGlvbiBuYShlKXtpZihlKXJldHVybiBlLnJlcGxhY2UoLyhbXlxuXHJdKShccj9cbikoW15cblxyXSkvZ20sIiQxXG5cbiQzIikucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfXZhciByYT1ObygpLGlhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuanNvblNjaGVtYVNlcnZpY2U9ZSx0aGlzLnByb21pc2U9dCx0aGlzLnZhbGlkYXRpb25FbmFibGVkPSEwfXJldHVybiBlLnByb3RvdHlwZS5jb25maWd1cmU9ZnVuY3Rpb24oZSl7ZSYmKHRoaXMudmFsaWRhdGlvbkVuYWJsZWQ9ITEhPT1lLnZhbGlkYXRlLHRoaXMuY29tbWVudFNldmVyaXR5PWUuYWxsb3dDb21tZW50cz92b2lkIDA6VHIuRXJyb3IpfSxlLnByb3RvdHlwZS5kb1ZhbGlkYXRpb249ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcztpZighdGhpcy52YWxpZGF0aW9uRW5hYmxlZClyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUoW10pO3ZhciBvPVtdLGE9e30scz1mdW5jdGlvbihlKXt2YXIgdD1lLnJhbmdlLnN0YXJ0LmxpbmUrIiAiK2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyKyIgIitlLm1lc3NhZ2U7YVt0XXx8KGFbdF09ITAsby5wdXNoKGUpKX0sYz1mdW5jdGlvbihyKXt2YXIgYT0obnVsbD09bj92b2lkIDA6bi50cmFpbGluZ0NvbW1hcyk/Y2Eobi50cmFpbGluZ0NvbW1hcyk6VHIuRXJyb3IsYz0obnVsbD09bj92b2lkIDA6bi5jb21tZW50cyk/Y2Eobi5jb21tZW50cyk6aS5jb21tZW50U2V2ZXJpdHksbD0obnVsbD09bj92b2lkIDA6bi5zY2hlbWFWYWxpZGF0aW9uKT9jYShuLnNjaGVtYVZhbGlkYXRpb24pOlRyLldhcm5pbmcsdT0obnVsbD09bj92b2lkIDA6bi5zY2hlbWFSZXF1ZXN0KT9jYShuLnNjaGVtYVJlcXVlc3QpOlRyLldhcm5pbmc7aWYocil7aWYoci5lcnJvcnMubGVuZ3RoJiZ0LnJvb3QmJnUpe3ZhciBoPXQucm9vdCxmPSJvYmplY3QiPT09aC50eXBlP2gucHJvcGVydGllc1swXTp2b2lkIDA7aWYoZiYmIiRzY2hlbWEiPT09Zi5rZXlOb2RlLnZhbHVlKXt2YXIgZD1mLnZhbHVlTm9kZXx8ZixtPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQoZC5vZmZzZXQpLGUucG9zaXRpb25BdChkLm9mZnNldCtkLmxlbmd0aCkpO3MoUnIuY3JlYXRlKG0sci5lcnJvcnNbMF0sdSx2by5TY2hlbWFSZXNvbHZlRXJyb3IpKX1lbHNle209ZnIuY3JlYXRlKGUucG9zaXRpb25BdChoLm9mZnNldCksZS5wb3NpdGlvbkF0KGgub2Zmc2V0KzEpKTtzKFJyLmNyZWF0ZShtLHIuZXJyb3JzWzBdLHUsdm8uU2NoZW1hUmVzb2x2ZUVycm9yKSl9fWVsc2UgaWYobCl7dmFyIGc9dC52YWxpZGF0ZShlLHIuc2NoZW1hLGwpO2cmJmcuZm9yRWFjaChzKX1hYShyLnNjaGVtYSkmJihjPXZvaWQgMCksc2Eoci5zY2hlbWEpJiYoYT12b2lkIDApfWZvcih2YXIgcD0wLGI9dC5zeW50YXhFcnJvcnM7cDxiLmxlbmd0aDtwKyspe3ZhciB2PWJbcF07aWYodi5jb2RlPT09dm8uVHJhaWxpbmdDb21tYSl7aWYoIm51bWJlciIhPXR5cGVvZiBhKWNvbnRpbnVlO3Yuc2V2ZXJpdHk9YX1zKHYpfWlmKCJudW1iZXIiPT10eXBlb2YgYyl7dmFyIHk9cmEoIkludmFsaWRDb21tZW50VG9rZW4iLCJDb21tZW50cyBhcmUgbm90IHBlcm1pdHRlZCBpbiBKU09OLiIpO3QuY29tbWVudHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cyhSci5jcmVhdGUoZSx5LGMsdm8uQ29tbWVudE5vdFBlcm1pdHRlZCkpfSkpfXJldHVybiBvfTtpZihyKXt2YXIgbD1yLmlkfHwic2NoZW1hc2VydmljZTovL3VudGl0bGVkLyIrb2ErKztyZXR1cm4gdGhpcy5qc29uU2NoZW1hU2VydmljZS5yZWdpc3RlckV4dGVybmFsU2NoZW1hKGwsW10scikuZ2V0UmVzb2x2ZWRTY2hlbWEoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gYyhlKX0pKX1yZXR1cm4gdGhpcy5qc29uU2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSx0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gYyhlKX0pKX0sZS5wcm90b3R5cGUuZ2V0TGFuZ3VhZ2VTdGF0dXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57c2NoZW1hczp0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYVVSSXNGb3JSZXNvdXJjZShlLnVyaSx0KX19LGV9KCksb2E9MDtmdW5jdGlvbiBhYShlKXtpZihlJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKGxpKGUuYWxsb3dDb21tZW50cykpcmV0dXJuIGUuYWxsb3dDb21tZW50cztpZihlLmFsbE9mKWZvcih2YXIgdD0wLG49ZS5hbGxPZjt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9YWEoblt0XSk7aWYobGkocikpcmV0dXJuIHJ9fX1mdW5jdGlvbiBzYShlKXtpZihlJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKGxpKGUuYWxsb3dUcmFpbGluZ0NvbW1hcykpcmV0dXJuIGUuYWxsb3dUcmFpbGluZ0NvbW1hczt2YXIgdD1lO2lmKGxpKHQuYWxsb3dzVHJhaWxpbmdDb21tYXMpKXJldHVybiB0LmFsbG93c1RyYWlsaW5nQ29tbWFzO2lmKGUuYWxsT2YpZm9yKHZhciBuPTAscj1lLmFsbE9mO248ci5sZW5ndGg7bisrKXt2YXIgaT1zYShyW25dKTtpZihsaShpKSlyZXR1cm4gaX19fWZ1bmN0aW9uIGNhKGUpe3N3aXRjaChlKXtjYXNlImVycm9yIjpyZXR1cm4gVHIuRXJyb3I7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gVHIuV2FybmluZztjYXNlImlnbm9yZSI6cmV0dXJufX1mdW5jdGlvbiBsYShlKXtyZXR1cm4gZTw0OD8wOmU8PTU3P2UtNDg6KGU8OTcmJihlKz0zMiksZT49OTcmJmU8PTEwMj9lLTk3KzEwOjApfWZ1bmN0aW9uIHVhKGUpe2lmKCIjIj09PWVbMF0pc3dpdGNoKGUubGVuZ3RoKXtjYXNlIDQ6cmV0dXJue3JlZDoxNypsYShlLmNoYXJDb2RlQXQoMSkpLzI1NSxncmVlbjoxNypsYShlLmNoYXJDb2RlQXQoMikpLzI1NSxibHVlOjE3KmxhKGUuY2hhckNvZGVBdCgzKSkvMjU1LGFscGhhOjF9O2Nhc2UgNTpyZXR1cm57cmVkOjE3KmxhKGUuY2hhckNvZGVBdCgxKSkvMjU1LGdyZWVuOjE3KmxhKGUuY2hhckNvZGVBdCgyKSkvMjU1LGJsdWU6MTcqbGEoZS5jaGFyQ29kZUF0KDMpKS8yNTUsYWxwaGE6MTcqbGEoZS5jaGFyQ29kZUF0KDQpKS8yNTV9O2Nhc2UgNzpyZXR1cm57cmVkOigxNipsYShlLmNoYXJDb2RlQXQoMSkpK2xhKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjooMTYqbGEoZS5jaGFyQ29kZUF0KDMpKStsYShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZTooMTYqbGEoZS5jaGFyQ29kZUF0KDUpKStsYShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6MX07Y2FzZSA5OnJldHVybntyZWQ6KDE2KmxhKGUuY2hhckNvZGVBdCgxKSkrbGEoZS5jaGFyQ29kZUF0KDIpKSkvMjU1LGdyZWVuOigxNipsYShlLmNoYXJDb2RlQXQoMykpK2xhKGUuY2hhckNvZGVBdCg0KSkpLzI1NSxibHVlOigxNipsYShlLmNoYXJDb2RlQXQoNSkpK2xhKGUuY2hhckNvZGVBdCg2KSkpLzI1NSxhbHBoYTooMTYqbGEoZS5jaGFyQ29kZUF0KDcpKStsYShlLmNoYXJDb2RlQXQoOCkpKS8yNTV9fX12YXIgaGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuc2NoZW1hU2VydmljZT1lfXJldHVybiBlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPXtyZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFfSk7dmFyIGk9dC5yb290O2lmKCFpKXJldHVybltdO3ZhciBvPW4ucmVzdWx0TGltaXR8fE51bWJlci5NQVhfVkFMVUUsYT1lLnVyaTtpZigoInZzY29kZTovL2RlZmF1bHRzZXR0aW5ncy9rZXliaW5kaW5ncy5qc29uIj09PWF8fHVpKGEudG9Mb3dlckNhc2UoKSwiL3VzZXIva2V5YmluZGluZ3MuanNvbiIpKSYmImFycmF5Ij09PWkudHlwZSl7Zm9yKHZhciBzPVtdLGM9MCxsPWkuaXRlbXM7YzxsLmxlbmd0aDtjKyspe3ZhciB1PWxbY107aWYoIm9iamVjdCI9PT11LnR5cGUpZm9yKHZhciBoPTAsZj11LnByb3BlcnRpZXM7aDxmLmxlbmd0aDtoKyspe3ZhciBkPWZbaF07aWYoImtleSI9PT1kLmtleU5vZGUudmFsdWUmJmQudmFsdWVOb2RlKXt2YXIgbT1tci5jcmVhdGUoZS51cmksZmEoZSx1KSk7aWYocy5wdXNoKHtuYW1lOkhvKGQudmFsdWVOb2RlKSxraW5kOkJpLkZ1bmN0aW9uLGxvY2F0aW9uOm19KSwtLW88PTApcmV0dXJuIG4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChhKSxzfX19cmV0dXJuIHN9Zm9yKHZhciBnPVt7bm9kZTppLGNvbnRhaW5lck5hbWU6IiJ9XSxwPTAsYj0hMSx2PVtdLHk9ZnVuY3Rpb24odCxuKXsiYXJyYXkiPT09dC50eXBlP3QuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSYmZy5wdXNoKHtub2RlOmUsY29udGFpbmVyTmFtZTpufSl9KSk6Im9iamVjdCI9PT10LnR5cGUmJnQucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LnZhbHVlTm9kZTtpZihpKWlmKG8+MCl7by0tO3ZhciBhPW1yLmNyZWF0ZShlLnVyaSxmYShlLHQpKSxzPW4/bisiLiIrdC5rZXlOb2RlLnZhbHVlOnQua2V5Tm9kZS52YWx1ZTt2LnB1c2goe25hbWU6ci5nZXRLZXlMYWJlbCh0KSxraW5kOnIuZ2V0U3ltYm9sS2luZChpLnR5cGUpLGxvY2F0aW9uOmEsY29udGFpbmVyTmFtZTpufSksZy5wdXNoKHtub2RlOmksY29udGFpbmVyTmFtZTpzfSl9ZWxzZSBiPSEwfSkpfTtwPGcubGVuZ3RoOyl7dmFyIEM9Z1twKytdO3koQy5ub2RlLEMuY29udGFpbmVyTmFtZSl9cmV0dXJuIGImJm4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChhKSx2fSxlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzMj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17cmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRX0pO3ZhciBpPXQucm9vdDtpZighaSlyZXR1cm5bXTt2YXIgbz1uLnJlc3VsdExpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFLGE9ZS51cmk7aWYoKCJ2c2NvZGU6Ly9kZWZhdWx0c2V0dGluZ3Mva2V5YmluZGluZ3MuanNvbiI9PT1hfHx1aShhLnRvTG93ZXJDYXNlKCksIi91c2VyL2tleWJpbmRpbmdzLmpzb24iKSkmJiJhcnJheSI9PT1pLnR5cGUpe2Zvcih2YXIgcz1bXSxjPTAsbD1pLml0ZW1zO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1sW2NdO2lmKCJvYmplY3QiPT09dS50eXBlKWZvcih2YXIgaD0wLGY9dS5wcm9wZXJ0aWVzO2g8Zi5sZW5ndGg7aCsrKXt2YXIgZD1mW2hdO2lmKCJrZXkiPT09ZC5rZXlOb2RlLnZhbHVlJiZkLnZhbHVlTm9kZSl7dmFyIG09ZmEoZSx1KSxnPWZhKGUsZC5rZXlOb2RlKTtpZihzLnB1c2goe25hbWU6SG8oZC52YWx1ZU5vZGUpLGtpbmQ6QmkuRnVuY3Rpb24scmFuZ2U6bSxzZWxlY3Rpb25SYW5nZTpnfSksLS1vPD0wKXJldHVybiBuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoYSksc319fXJldHVybiBzfWZvcih2YXIgcD1bXSxiPVt7bm9kZTppLHJlc3VsdDpwfV0sdj0wLHk9ITEsQz1mdW5jdGlvbih0LG4peyJhcnJheSI9PT10LnR5cGU/dC5pdGVtcy5mb3JFYWNoKChmdW5jdGlvbih0LGkpe2lmKHQpaWYobz4wKXtvLS07dmFyIGE9ZmEoZSx0KSxzPWEsYz17bmFtZTpTdHJpbmcoaSksa2luZDpyLmdldFN5bWJvbEtpbmQodC50eXBlKSxyYW5nZTphLHNlbGVjdGlvblJhbmdlOnMsY2hpbGRyZW46W119O24ucHVzaChjKSxiLnB1c2goe3Jlc3VsdDpjLmNoaWxkcmVuLG5vZGU6dH0pfWVsc2UgeT0hMH0pKToib2JqZWN0Ij09PXQudHlwZSYmdC5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXQudmFsdWVOb2RlO2lmKGkpaWYobz4wKXtvLS07dmFyIGE9ZmEoZSx0KSxzPWZhKGUsdC5rZXlOb2RlKSxjPVtdLGw9e25hbWU6ci5nZXRLZXlMYWJlbCh0KSxraW5kOnIuZ2V0U3ltYm9sS2luZChpLnR5cGUpLHJhbmdlOmEsc2VsZWN0aW9uUmFuZ2U6cyxjaGlsZHJlbjpjLGRldGFpbDpyLmdldERldGFpbChpKX07bi5wdXNoKGwpLGIucHVzaCh7cmVzdWx0OmMsbm9kZTppfSl9ZWxzZSB5PSEwfSkpfTt2PGIubGVuZ3RoOyl7dmFyIHc9Ylt2KytdO0Mody5ub2RlLHcucmVzdWx0KX1yZXR1cm4geSYmbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGEpLHB9LGUucHJvdG90eXBlLmdldFN5bWJvbEtpbmQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gQmkuTW9kdWxlO2Nhc2Uic3RyaW5nIjpyZXR1cm4gQmkuU3RyaW5nO2Nhc2UibnVtYmVyIjpyZXR1cm4gQmkuTnVtYmVyO2Nhc2UiYXJyYXkiOnJldHVybiBCaS5BcnJheTtjYXNlImJvb2xlYW4iOnJldHVybiBCaS5Cb29sZWFuO2RlZmF1bHQ6cmV0dXJuIEJpLlZhcmlhYmxlfX0sZS5wcm90b3R5cGUuZ2V0S2V5TGFiZWw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXlOb2RlLnZhbHVlO3JldHVybiB0JiYodD10LnJlcGxhY2UoL1tcbl0vZywi4oa1IikpLHQmJnQudHJpbSgpP3Q6JyInLmNvbmNhdCh0LCciJyl9LGUucHJvdG90eXBlLmdldERldGFpbD1mdW5jdGlvbihlKXtpZihlKXJldHVybiJib29sZWFuIj09PWUudHlwZXx8Im51bWJlciI9PT1lLnR5cGV8fCJudWxsIj09PWUudHlwZXx8InN0cmluZyI9PT1lLnR5cGU/U3RyaW5nKGUudmFsdWUpOiJhcnJheSI9PT1lLnR5cGU/ZS5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJbXSI6Im9iamVjdCI9PT1lLnR5cGU/ZS5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJ7fSI6dm9pZCAwfSxlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRDb2xvcnM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbigoZnVuY3Rpb24ocil7dmFyIGk9W107aWYocilmb3IodmFyIG89biYmIm51bWJlciI9PXR5cGVvZiBuLnJlc3VsdExpbWl0P24ucmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRSxhPXt9LHM9MCxjPXQuZ2V0TWF0Y2hpbmdTY2hlbWFzKHIuc2NoZW1hKTtzPGMubGVuZ3RoO3MrKyl7dmFyIGw9Y1tzXTtpZighbC5pbnZlcnRlZCYmbC5zY2hlbWEmJigiY29sb3IiPT09bC5zY2hlbWEuZm9ybWF0fHwiY29sb3ItaGV4Ij09PWwuc2NoZW1hLmZvcm1hdCkmJmwubm9kZSYmInN0cmluZyI9PT1sLm5vZGUudHlwZSl7dmFyIHU9U3RyaW5nKGwubm9kZS5vZmZzZXQpO2lmKCFhW3VdKXt2YXIgaD11YShIbyhsLm5vZGUpKTtpZihoKXt2YXIgZj1mYShlLGwubm9kZSk7aS5wdXNoKHtjb2xvcjpoLHJhbmdlOmZ9KX1pZihhW3VdPSEwLC0tbzw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGUudXJpKSxpfX19cmV0dXJuIGl9KSl9LGUucHJvdG90eXBlLmdldENvbG9yUHJlc2VudGF0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPVtdLGE9TWF0aC5yb3VuZCgyNTUqbi5yZWQpLHM9TWF0aC5yb3VuZCgyNTUqbi5ncmVlbiksYz1NYXRoLnJvdW5kKDI1NSpuLmJsdWUpO2Z1bmN0aW9uIGwoZSl7dmFyIHQ9ZS50b1N0cmluZygxNik7cmV0dXJuIDIhPT10Lmxlbmd0aD8iMCIrdDp0fXJldHVybiBpPTE9PT1uLmFscGhhPyIjIi5jb25jYXQobChhKSkuY29uY2F0KGwocykpLmNvbmNhdChsKGMpKToiIyIuY29uY2F0KGwoYSkpLmNvbmNhdChsKHMpKS5jb25jYXQobChjKSkuY29uY2F0KGwoTWF0aC5yb3VuZCgyNTUqbi5hbHBoYSkpKSxvLnB1c2goe2xhYmVsOmksdGV4dEVkaXQ6S3IucmVwbGFjZShyLEpTT04uc3RyaW5naWZ5KGkpKX0pLG99LGV9KCk7ZnVuY3Rpb24gZmEoZSx0KXtyZXR1cm4gZnIuY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoKSl9dmFyIGRhLG1hLGdhLHBhLGJhLHZhLHlhPU5vKCksQ2E9e3NjaGVtYUFzc29jaWF0aW9uczpbXSxzY2hlbWFzOnsiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEjIjp7JHJlZjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn0sImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI6eyRzY2hlbWE6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyIsZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxwb3NpdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0scG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOnt0eXBlOiJzdHJpbmciLGVudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfX0sdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntpZDp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6e30sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsZXhjbHVzaXZlTWluaW11bTohMH0sbWF4aW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWF4aW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWluaW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWluaW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4TGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5MZW5ndGg6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDp7fX0sbWF4SXRlbXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pbkl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHVuaXF1ZUl0ZW1zOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtYXhQcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5Qcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHJlcXVpcmVkOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxkZWZpbml0aW9uczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwYXR0ZXJuUHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxlbnVtOnt0eXBlOiJhcnJheSIsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0OnthbnlPZjpbe3R5cGU6InN0cmluZyIsZW51bTpbImRhdGUtdGltZSIsInVyaSIsImVtYWlsIiwiaG9zdG5hbWUiLCJpcHY0IiwiaXB2NiIsInJlZ2V4Il19LHt0eXBlOiJzdHJpbmcifV19LGFsbE9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LGFueU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG9uZU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG5vdDp7YWxsT2Y6W3skcmVmOiIjIn1dfX0sZGVwZW5kZW5jaWVzOntleGNsdXNpdmVNYXhpbXVtOlsibWF4aW11bSJdLGV4Y2x1c2l2ZU1pbmltdW06WyJtaW5pbXVtIl19LGRlZmF1bHQ6e319LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiOntkZWZpbml0aW9uczp7c2NoZW1hQXJyYXk6e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLGl0ZW1zOnskcmVmOiIjIn19LG5vbk5lZ2F0aXZlSW50ZWdlcjp7dHlwZToiaW50ZWdlciIsbWluaW11bTowfSxub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LHtkZWZhdWx0OjB9XX0sc2ltcGxlVHlwZXM6e2VudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSx1bmlxdWVJdGVtczohMCxkZWZhdWx0OltdfX0sdHlwZTpbIm9iamVjdCIsImJvb2xlYW4iXSxwcm9wZXJ0aWVzOnskaWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJHNjaGVtYTp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRyZWY6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJGNvbW1lbnQ6e3R5cGU6InN0cmluZyJ9LHRpdGxlOnt0eXBlOiJzdHJpbmcifSxkZXNjcmlwdGlvbjp7dHlwZToic3RyaW5nIn0sZGVmYXVsdDohMCxyZWFkT25seTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sZXhhbXBsZXM6e3R5cGU6ImFycmF5IixpdGVtczohMH0sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixleGNsdXNpdmVNaW5pbXVtOjB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6Im51bWJlciJ9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5MZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxwYXR0ZXJuOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoicmVnZXgifSxhZGRpdGlvbmFsSXRlbXM6eyRyZWY6IiMifSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDohMH0sbWF4SXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluSXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY29udGFpbnM6eyRyZWY6IiMifSxtYXhQcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pblByb3BlcnRpZXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxyZXF1aXJlZDp7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxwcm9wZXJ0eU5hbWVzOntmb3JtYXQ6InJlZ2V4In0sZGVmYXVsdDp7fX0sZGVwZW5kZW5jaWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX19LHByb3BlcnR5TmFtZXM6eyRyZWY6IiMifSxjb25zdDohMCxlbnVtOnt0eXBlOiJhcnJheSIsaXRlbXM6ITAsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0Ont0eXBlOiJzdHJpbmcifSxjb250ZW50TWVkaWFUeXBlOnt0eXBlOiJzdHJpbmcifSxjb250ZW50RW5jb2Rpbmc6e3R5cGU6InN0cmluZyJ9LGlmOnskcmVmOiIjIn0sdGhlbjp7JHJlZjoiIyJ9LGVsc2U6eyRyZWY6IiMifSxhbGxPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LGFueU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sb25lT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxub3Q6eyRyZWY6IiMifX0sZGVmYXVsdDohMH19fSx3YT17aWQ6eWEoInNjaGVtYS5qc29uLmlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkc2NoZW1hOnlhKCJzY2hlbWEuanNvbi4kc2NoZW1hIiwiVGhlIHNjaGVtYSB0byB2ZXJpZnkgdGhpcyBkb2N1bWVudCBhZ2FpbnN0LiIpLHRpdGxlOnlhKCJzY2hlbWEuanNvbi50aXRsZSIsIkEgZGVzY3JpcHRpdmUgdGl0bGUgb2YgdGhlIGVsZW1lbnQuIiksZGVzY3JpcHRpb246eWEoInNjaGVtYS5qc29uLmRlc2NyaXB0aW9uIiwiQSBsb25nIGRlc2NyaXB0aW9uIG9mIHRoZSBlbGVtZW50LiBVc2VkIGluIGhvdmVyIG1lbnVzIGFuZCBzdWdnZXN0aW9ucy4iKSxkZWZhdWx0OnlhKCJzY2hlbWEuanNvbi5kZWZhdWx0IiwiQSBkZWZhdWx0IHZhbHVlLiBVc2VkIGJ5IHN1Z2dlc3Rpb25zLiIpLG11bHRpcGxlT2Y6eWEoInNjaGVtYS5qc29uLm11bHRpcGxlT2YiLCJBIG51bWJlciB0aGF0IHNob3VsZCBjbGVhbmx5IGRpdmlkZSB0aGUgY3VycmVudCB2YWx1ZSAoaS5lLiBoYXZlIG5vIHJlbWFpbmRlcikuIiksbWF4aW11bTp5YSgic2NoZW1hLmpzb24ubWF4aW11bSIsIlRoZSBtYXhpbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWF4aW11bTp5YSgic2NoZW1hLmpzb24uZXhjbHVzaXZlTWF4aW11bSIsIk1ha2VzIHRoZSBtYXhpbXVtIHByb3BlcnR5IGV4Y2x1c2l2ZS4iKSxtaW5pbXVtOnlhKCJzY2hlbWEuanNvbi5taW5pbXVtIiwiVGhlIG1pbmltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNaW5pbXVtOnlhKCJzY2hlbWEuanNvbi5leGNsdXNpdmVNaW5pbnVtIiwiTWFrZXMgdGhlIG1pbmltdW0gcHJvcGVydHkgZXhjbHVzaXZlLiIpLG1heExlbmd0aDp5YSgic2NoZW1hLmpzb24ubWF4TGVuZ3RoIiwiVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLG1pbkxlbmd0aDp5YSgic2NoZW1hLmpzb24ubWluTGVuZ3RoIiwiVGhlIG1pbmltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLHBhdHRlcm46eWEoInNjaGVtYS5qc29uLnBhdHRlcm4iLCJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgc3RyaW5nIGFnYWluc3QuIEl0IGlzIG5vdCBpbXBsaWNpdGx5IGFuY2hvcmVkLiIpLGFkZGl0aW9uYWxJdGVtczp5YSgic2NoZW1hLmpzb24uYWRkaXRpb25hbEl0ZW1zIiwiRm9yIGFycmF5cywgb25seSB3aGVuIGl0ZW1zIGlzIHNldCBhcyBhbiBhcnJheS4gSWYgaXQgaXMgYSBzY2hlbWEsIHRoZW4gdGhpcyBzY2hlbWEgdmFsaWRhdGVzIGl0ZW1zIGFmdGVyIHRoZSBvbmVzIHNwZWNpZmllZCBieSB0aGUgaXRlbXMgYXJyYXkuIElmIGl0IGlzIGZhbHNlLCB0aGVuIGFkZGl0aW9uYWwgaXRlbXMgd2lsbCBjYXVzZSB2YWxpZGF0aW9uIHRvIGZhaWwuIiksaXRlbXM6eWEoInNjaGVtYS5qc29uLml0ZW1zIiwiRm9yIGFycmF5cy4gQ2FuIGVpdGhlciBiZSBhIHNjaGVtYSB0byB2YWxpZGF0ZSBldmVyeSBlbGVtZW50IGFnYWluc3Qgb3IgYW4gYXJyYXkgb2Ygc2NoZW1hcyB0byB2YWxpZGF0ZSBlYWNoIGl0ZW0gYWdhaW5zdCBpbiBvcmRlciAodGhlIGZpcnN0IHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgc2Vjb25kIHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBzZWNvbmQgZWxlbWVudCwgYW5kIHNvIG9uLiIpLG1heEl0ZW1zOnlhKCJzY2hlbWEuanNvbi5tYXhJdGVtcyIsIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBpbnNpZGUgYW4gYXJyYXkuIEluY2x1c2l2ZS4iKSxtaW5JdGVtczp5YSgic2NoZW1hLmpzb24ubWluSXRlbXMiLCJUaGUgbWluaW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgaW5zaWRlIGFuIGFycmF5LiBJbmNsdXNpdmUuIiksdW5pcXVlSXRlbXM6eWEoInNjaGVtYS5qc29uLnVuaXF1ZUl0ZW1zIiwiSWYgYWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkgbXVzdCBiZSB1bmlxdWUuIERlZmF1bHRzIHRvIGZhbHNlLiIpLG1heFByb3BlcnRpZXM6eWEoInNjaGVtYS5qc29uLm1heFByb3BlcnRpZXMiLCJUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvcGVydGllcyBhbiBvYmplY3QgY2FuIGhhdmUuIEluY2x1c2l2ZS4iKSxtaW5Qcm9wZXJ0aWVzOnlhKCJzY2hlbWEuanNvbi5taW5Qcm9wZXJ0aWVzIiwiVGhlIG1pbmltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMgYW4gb2JqZWN0IGNhbiBoYXZlLiBJbmNsdXNpdmUuIikscmVxdWlyZWQ6eWEoInNjaGVtYS5qc29uLnJlcXVpcmVkIiwiQW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgcHJvcGVydGllcyByZXF1aXJlZCBvbiB0aGlzIG9iamVjdC4iKSxhZGRpdGlvbmFsUHJvcGVydGllczp5YSgic2NoZW1hLmpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMiLCJFaXRoZXIgYSBzY2hlbWEgb3IgYSBib29sZWFuLiBJZiBhIHNjaGVtYSwgdGhlbiB1c2VkIHRvIHZhbGlkYXRlIGFsbCBwcm9wZXJ0aWVzIG5vdCBtYXRjaGVkIGJ5ICdwcm9wZXJ0aWVzJyBvciAncGF0dGVyblByb3BlcnRpZXMnLiBJZiBmYWxzZSwgdGhlbiBhbnkgcHJvcGVydGllcyBub3QgbWF0Y2hlZCBieSBlaXRoZXIgd2lsbCBjYXVzZSB0aGlzIHNjaGVtYSB0byBmYWlsLiIpLGRlZmluaXRpb25zOnlhKCJzY2hlbWEuanNvbi5kZWZpbml0aW9ucyIsIk5vdCB1c2VkIGZvciB2YWxpZGF0aW9uLiBQbGFjZSBzdWJzY2hlbWFzIGhlcmUgdGhhdCB5b3Ugd2lzaCB0byByZWZlcmVuY2UgaW5saW5lIHdpdGggJHJlZi4iKSxwcm9wZXJ0aWVzOnlhKCJzY2hlbWEuanNvbi5wcm9wZXJ0aWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgZWFjaCBwcm9wZXJ0eS4iKSxwYXR0ZXJuUHJvcGVydGllczp5YSgic2NoZW1hLmpzb24ucGF0dGVyblByb3BlcnRpZXMiLCJBIG1hcCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIG9uIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIG1hdGNoaW5nIHByb3BlcnRpZXMuIiksZGVwZW5kZW5jaWVzOnlhKCJzY2hlbWEuanNvbi5kZXBlbmRlbmNpZXMiLCJBIG1hcCBvZiBwcm9wZXJ0eSBuYW1lcyB0byBlaXRoZXIgYW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgb3IgYSBzY2hlbWEuIEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG1lYW5zIHRoZSBwcm9wZXJ0eSBuYW1lZCBpbiB0aGUga2V5IGRlcGVuZHMgb24gdGhlIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5IGJlaW5nIHByZXNlbnQgaW4gdGhlIG9iamVjdCBpbiBvcmRlciB0byBiZSB2YWxpZC4gSWYgdGhlIHZhbHVlIGlzIGEgc2NoZW1hLCB0aGVuIHRoZSBzY2hlbWEgaXMgb25seSBhcHBsaWVkIHRvIHRoZSBvYmplY3QgaWYgdGhlIHByb3BlcnR5IGluIHRoZSBrZXkgZXhpc3RzIG9uIHRoZSBvYmplY3QuIiksZW51bTp5YSgic2NoZW1hLmpzb24uZW51bSIsIlRoZSBzZXQgb2YgbGl0ZXJhbCB2YWx1ZXMgdGhhdCBhcmUgdmFsaWQuIiksdHlwZTp5YSgic2NoZW1hLmpzb24udHlwZSIsIkVpdGhlciBhIHN0cmluZyBvZiBvbmUgb2YgdGhlIGJhc2ljIHNjaGVtYSB0eXBlcyAobnVtYmVyLCBpbnRlZ2VyLCBudWxsLCBhcnJheSwgb2JqZWN0LCBib29sZWFuLCBzdHJpbmcpIG9yIGFuIGFycmF5IG9mIHN0cmluZ3Mgc3BlY2lmeWluZyBhIHN1YnNldCBvZiB0aG9zZSB0eXBlcy4iKSxmb3JtYXQ6eWEoInNjaGVtYS5qc29uLmZvcm1hdCIsIkRlc2NyaWJlcyB0aGUgZm9ybWF0IGV4cGVjdGVkIGZvciB0aGUgdmFsdWUuIiksYWxsT2Y6eWEoInNjaGVtYS5qc29uLmFsbE9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgYWxsIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksYW55T2Y6eWEoInNjaGVtYS5qc29uLmFueU9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgd2hlcmUgYXQgbGVhc3Qgb25lIG11c3QgbWF0Y2guIiksb25lT2Y6eWEoInNjaGVtYS5qc29uLm9uZU9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgZXhhY3RseSBvbmUgb2Ygd2hpY2ggbXVzdCBtYXRjaC4iKSxub3Q6eWEoInNjaGVtYS5qc29uLm5vdCIsIkEgc2NoZW1hIHdoaWNoIG11c3Qgbm90IG1hdGNoLiIpLCRpZDp5YSgic2NoZW1hLmpzb24uJGlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkcmVmOnlhKCJzY2hlbWEuanNvbi4kcmVmIiwiUmVmZXJlbmNlIGEgZGVmaW5pdGlvbiBob3N0ZWQgb24gYW55IGxvY2F0aW9uLiIpLCRjb21tZW50OnlhKCJzY2hlbWEuanNvbi4kY29tbWVudCIsIkNvbW1lbnRzIGZyb20gc2NoZW1hIGF1dGhvcnMgdG8gcmVhZGVycyBvciBtYWludGFpbmVycyBvZiB0aGUgc2NoZW1hLiIpLHJlYWRPbmx5OnlhKCJzY2hlbWEuanNvbi5yZWFkT25seSIsIkluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgaW5zdGFuY2UgaXMgbWFuYWdlZCBleGNsdXNpdmVseSBieSB0aGUgb3duaW5nIGF1dGhvcml0eS4iKSxleGFtcGxlczp5YSgic2NoZW1hLmpzb24uZXhhbXBsZXMiLCJTYW1wbGUgSlNPTiB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzY2hlbWEsIGZvciB0aGUgcHVycG9zZSBvZiBpbGx1c3RyYXRpbmcgdXNhZ2UuIiksY29udGFpbnM6eWEoInNjaGVtYS5qc29uLmNvbnRhaW5zIiwnQW4gYXJyYXkgaW5zdGFuY2UgaXMgdmFsaWQgYWdhaW5zdCAiY29udGFpbnMiIGlmIGF0IGxlYXN0IG9uZSBvZiBpdHMgZWxlbWVudHMgaXMgdmFsaWQgYWdhaW5zdCB0aGUgZ2l2ZW4gc2NoZW1hLicpLHByb3BlcnR5TmFtZXM6eWEoInNjaGVtYS5qc29uLnByb3BlcnR5TmFtZXMiLCJJZiB0aGUgaW5zdGFuY2UgaXMgYW4gb2JqZWN0LCB0aGlzIGtleXdvcmQgdmFsaWRhdGVzIGlmIGV2ZXJ5IHByb3BlcnR5IG5hbWUgaW4gdGhlIGluc3RhbmNlIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBwcm92aWRlZCBzY2hlbWEuIiksY29uc3Q6eWEoInNjaGVtYS5qc29uLmNvbnN0IiwiQW4gaW5zdGFuY2UgdmFsaWRhdGVzIHN1Y2Nlc3NmdWxseSBhZ2FpbnN0IHRoaXMga2V5d29yZCBpZiBpdHMgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIHRoZSBrZXl3b3JkLiIpLGNvbnRlbnRNZWRpYVR5cGU6eWEoInNjaGVtYS5qc29uLmNvbnRlbnRNZWRpYVR5cGUiLCJEZXNjcmliZXMgdGhlIG1lZGlhIHR5cGUgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksY29udGVudEVuY29kaW5nOnlhKCJzY2hlbWEuanNvbi5jb250ZW50RW5jb2RpbmciLCJEZXNjcmliZXMgdGhlIGNvbnRlbnQgZW5jb2Rpbmcgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksaWY6eWEoInNjaGVtYS5qc29uLmlmIiwnVGhlIHZhbGlkYXRpb24gb3V0Y29tZSBvZiB0aGUgImlmIiBzdWJzY2hlbWEgY29udHJvbHMgd2hpY2ggb2YgdGhlICJ0aGVuIiBvciAiZWxzZSIga2V5d29yZHMgYXJlIGV2YWx1YXRlZC4nKSx0aGVuOnlhKCJzY2hlbWEuanNvbi50aGVuIiwnVGhlICJpZiIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgc3VjY2VlZHMuJyksZWxzZTp5YSgic2NoZW1hLmpzb24uZWxzZSIsJ1RoZSAiZWxzZSIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgZmFpbHMuJyl9O2ZvcihiYSBpbiBDYS5zY2hlbWFzKWZvcihwYSBpbihkYT1DYS5zY2hlbWFzW2JhXSkucHJvcGVydGllcykiYm9vbGVhbiI9PXR5cGVvZihtYT1kYS5wcm9wZXJ0aWVzW3BhXSkmJihtYT1kYS5wcm9wZXJ0aWVzW3BhXT17fSksKGdhPXdhW3BhXSk/bWEuZGVzY3JpcHRpb249Z2E6Y29uc29sZS5sb2coIiIuY29uY2F0KHBhLCI6IGxvY2FsaXplKCdzY2hlbWEuanNvbi4iKS5jb25jYXQocGEsJ1wnLCAiIiknKSk7dmE9KCgpPT57dmFyIGU9ezQ3MDplPT57ZnVuY3Rpb24gdChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KGUpKX1mdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuLHI9IiIsaT0wLG89LTEsYT0wLHM9MDtzPD1lLmxlbmd0aDsrK3Mpe2lmKHM8ZS5sZW5ndGgpbj1lLmNoYXJDb2RlQXQocyk7ZWxzZXtpZig0Nz09PW4pYnJlYWs7bj00N31pZig0Nz09PW4pe2lmKG89PT1zLTF8fDE9PT1hKTtlbHNlIGlmKG8hPT1zLTEmJjI9PT1hKXtpZihyLmxlbmd0aDwyfHwyIT09aXx8NDYhPT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSl8fDQ2IT09ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTIpKWlmKHIubGVuZ3RoPjIpe3ZhciBjPXIubGFzdEluZGV4T2YoIi8iKTtpZihjIT09ci5sZW5ndGgtMSl7LTE9PT1jPyhyPSIiLGk9MCk6aT0ocj1yLnNsaWNlKDAsYykpLmxlbmd0aC0xLXIubGFzdEluZGV4T2YoIi8iKSxvPXMsYT0wO2NvbnRpbnVlfX1lbHNlIGlmKDI9PT1yLmxlbmd0aHx8MT09PXIubGVuZ3RoKXtyPSIiLGk9MCxvPXMsYT0wO2NvbnRpbnVlfXQmJihyLmxlbmd0aD4wP3IrPSIvLi4iOnI9Ii4uIixpPTIpfWVsc2Ugci5sZW5ndGg+MD9yKz0iLyIrZS5zbGljZShvKzEscyk6cj1lLnNsaWNlKG8rMSxzKSxpPXMtby0xO289cyxhPTB9ZWxzZSA0Nj09PW4mJi0xIT09YT8rK2E6YT0tMX1yZXR1cm4gcn12YXIgcj17cmVzb2x2ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSxyPSIiLGk9ITEsbz1hcmd1bWVudHMubGVuZ3RoLTE7bz49LTEmJiFpO28tLSl7dmFyIGE7bz49MD9hPWFyZ3VtZW50c1tvXToodm9pZCAwPT09ZSYmKGU9cHJvY2Vzcy5jd2QoKSksYT1lKSx0KGEpLDAhPT1hLmxlbmd0aCYmKHI9YSsiLyIrcixpPTQ3PT09YS5jaGFyQ29kZUF0KDApKX1yZXR1cm4gcj1uKHIsIWkpLGk/ci5sZW5ndGg+MD8iLyIrcjoiLyI6ci5sZW5ndGg+MD9yOiIuIn0sbm9ybWFsaXplOmZ1bmN0aW9uKGUpe2lmKHQoZSksMD09PWUubGVuZ3RoKXJldHVybiIuIjt2YXIgcj00Nz09PWUuY2hhckNvZGVBdCgwKSxpPTQ3PT09ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpO3JldHVybiAwIT09KGU9bihlLCFyKSkubGVuZ3RofHxyfHwoZT0iLiIpLGUubGVuZ3RoPjAmJmkmJihlKz0iLyIpLHI/Ii8iK2U6ZX0saXNBYnNvbHV0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdChlKSxlLmxlbmd0aD4wJiY0Nz09PWUuY2hhckNvZGVBdCgwKX0sam9pbjpmdW5jdGlvbigpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIGUsbj0wO248YXJndW1lbnRzLmxlbmd0aDsrK24pe3ZhciBpPWFyZ3VtZW50c1tuXTt0KGkpLGkubGVuZ3RoPjAmJih2b2lkIDA9PT1lP2U9aTplKz0iLyIraSl9cmV0dXJuIHZvaWQgMD09PWU/Ii4iOnIubm9ybWFsaXplKGUpfSxyZWxhdGl2ZTpmdW5jdGlvbihlLG4pe2lmKHQoZSksdChuKSxlPT09bilyZXR1cm4iIjtpZigoZT1yLnJlc29sdmUoZSkpPT09KG49ci5yZXNvbHZlKG4pKSlyZXR1cm4iIjtmb3IodmFyIGk9MTtpPGUubGVuZ3RoJiY0Nz09PWUuY2hhckNvZGVBdChpKTsrK2kpO2Zvcih2YXIgbz1lLmxlbmd0aCxhPW8taSxzPTE7czxuLmxlbmd0aCYmNDc9PT1uLmNoYXJDb2RlQXQocyk7KytzKTtmb3IodmFyIGM9bi5sZW5ndGgtcyxsPWE8Yz9hOmMsdT0tMSxoPTA7aDw9bDsrK2gpe2lmKGg9PT1sKXtpZihjPmwpe2lmKDQ3PT09bi5jaGFyQ29kZUF0KHMraCkpcmV0dXJuIG4uc2xpY2UocytoKzEpO2lmKDA9PT1oKXJldHVybiBuLnNsaWNlKHMraCl9ZWxzZSBhPmwmJig0Nz09PWUuY2hhckNvZGVBdChpK2gpP3U9aDowPT09aCYmKHU9MCkpO2JyZWFrfXZhciBmPWUuY2hhckNvZGVBdChpK2gpO2lmKGYhPT1uLmNoYXJDb2RlQXQocytoKSlicmVhazs0Nz09PWYmJih1PWgpfXZhciBkPSIiO2ZvcihoPWkrdSsxO2g8PW87KytoKWghPT1vJiY0NyE9PWUuY2hhckNvZGVBdChoKXx8KDA9PT1kLmxlbmd0aD9kKz0iLi4iOmQrPSIvLi4iKTtyZXR1cm4gZC5sZW5ndGg+MD9kK24uc2xpY2Uocyt1KToocys9dSw0Nz09PW4uY2hhckNvZGVBdChzKSYmKytzLG4uc2xpY2UocykpfSxfbWFrZUxvbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGRpcm5hbWU6ZnVuY3Rpb24oZSl7aWYodChlKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2Zvcih2YXIgbj1lLmNoYXJDb2RlQXQoMCkscj00Nz09PW4saT0tMSxvPSEwLGE9ZS5sZW5ndGgtMTthPj0xOy0tYSlpZig0Nz09PShuPWUuY2hhckNvZGVBdChhKSkpe2lmKCFvKXtpPWE7YnJlYWt9fWVsc2Ugbz0hMTtyZXR1cm4tMT09PWk/cj8iLyI6Ii4iOnImJjE9PT1pPyIvLyI6ZS5zbGljZSgwLGkpfSxiYXNlbmFtZTpmdW5jdGlvbihlLG4pe2lmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7dChlKTt2YXIgcixpPTAsbz0tMSxhPSEwO2lmKHZvaWQgMCE9PW4mJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD1lLmxlbmd0aCl7aWYobi5sZW5ndGg9PT1lLmxlbmd0aCYmbj09PWUpcmV0dXJuIiI7dmFyIHM9bi5sZW5ndGgtMSxjPS0xO2ZvcihyPWUubGVuZ3RoLTE7cj49MDstLXIpe3ZhciBsPWUuY2hhckNvZGVBdChyKTtpZig0Nz09PWwpe2lmKCFhKXtpPXIrMTticmVha319ZWxzZS0xPT09YyYmKGE9ITEsYz1yKzEpLHM+PTAmJihsPT09bi5jaGFyQ29kZUF0KHMpPy0xPT0tLXMmJihvPXIpOihzPS0xLG89YykpfXJldHVybiBpPT09bz9vPWM6LTE9PT1vJiYobz1lLmxlbmd0aCksZS5zbGljZShpLG8pfWZvcihyPWUubGVuZ3RoLTE7cj49MDstLXIpaWYoNDc9PT1lLmNoYXJDb2RlQXQocikpe2lmKCFhKXtpPXIrMTticmVha319ZWxzZS0xPT09byYmKGE9ITEsbz1yKzEpO3JldHVybi0xPT09bz8iIjplLnNsaWNlKGksbyl9LGV4dG5hbWU6ZnVuY3Rpb24oZSl7dChlKTtmb3IodmFyIG49LTEscj0wLGk9LTEsbz0hMCxhPTAscz1lLmxlbmd0aC0xO3M+PTA7LS1zKXt2YXIgYz1lLmNoYXJDb2RlQXQocyk7aWYoNDchPT1jKS0xPT09aSYmKG89ITEsaT1zKzEpLDQ2PT09Yz8tMT09PW4/bj1zOjEhPT1hJiYoYT0xKTotMSE9PW4mJihhPS0xKTtlbHNlIGlmKCFvKXtyPXMrMTticmVha319cmV0dXJuLTE9PT1ufHwtMT09PWl8fDA9PT1hfHwxPT09YSYmbj09PWktMSYmbj09PXIrMT8iIjplLnNsaWNlKG4saSl9LGZvcm1hdDpmdW5jdGlvbihlKXtpZihudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKTtyZXR1cm4gbj0odD1lKS5kaXJ8fHQucm9vdCxyPXQuYmFzZXx8KHQubmFtZXx8IiIpKyh0LmV4dHx8IiIpLG4/bj09PXQucm9vdD9uK3I6bisiLyIrcjpyO3ZhciB0LG4scn0scGFyc2U6ZnVuY3Rpb24oZSl7dChlKTt2YXIgbj17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiBuO3ZhciByLGk9ZS5jaGFyQ29kZUF0KDApLG89NDc9PT1pO28/KG4ucm9vdD0iLyIscj0xKTpyPTA7Zm9yKHZhciBhPS0xLHM9MCxjPS0xLGw9ITAsdT1lLmxlbmd0aC0xLGg9MDt1Pj1yOy0tdSlpZig0NyE9PShpPWUuY2hhckNvZGVBdCh1KSkpLTE9PT1jJiYobD0hMSxjPXUrMSksNDY9PT1pPy0xPT09YT9hPXU6MSE9PWgmJihoPTEpOi0xIT09YSYmKGg9LTEpO2Vsc2UgaWYoIWwpe3M9dSsxO2JyZWFrfXJldHVybi0xPT09YXx8LTE9PT1jfHwwPT09aHx8MT09PWgmJmE9PT1jLTEmJmE9PT1zKzE/LTEhPT1jJiYobi5iYXNlPW4ubmFtZT0wPT09cyYmbz9lLnNsaWNlKDEsYyk6ZS5zbGljZShzLGMpKTooMD09PXMmJm8/KG4ubmFtZT1lLnNsaWNlKDEsYSksbi5iYXNlPWUuc2xpY2UoMSxjKSk6KG4ubmFtZT1lLnNsaWNlKHMsYSksbi5iYXNlPWUuc2xpY2UocyxjKSksbi5leHQ9ZS5zbGljZShhLGMpKSxzPjA/bi5kaXI9ZS5zbGljZSgwLHMtMSk6byYmKG4uZGlyPSIvIiksbn0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07ci5wb3NpeD1yLGUuZXhwb3J0cz1yfSw0NDc6KGUsdCxuKT0+e3ZhciByO2lmKG4ucih0KSxuLmQodCx7VVJJOigpPT5nLFV0aWxzOigpPT54fSksIm9iamVjdCI9PXR5cGVvZiBwcm9jZXNzKXI9IndpbjMyIj09PXByb2Nlc3MucGxhdGZvcm07ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvcil7dmFyIGk9bmF2aWdhdG9yLnVzZXJBZ2VudDtyPWkuaW5kZXhPZigiV2luZG93cyIpPj0wfXZhciBvLGEscz0obz1mdW5jdGlvbihlLHQpe3JldHVybihvPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcodCkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1vKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSksYz0vXlx3W1x3XGQrLi1dKiQvLGw9L15cLy8sdT0vXlwvXC8vO2Z1bmN0aW9uIGgoZSx0KXtpZighZS5zY2hlbWUmJnQpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIicuY29uY2F0KGUuYXV0aG9yaXR5LCciLCBwYXRoOiAiJykuY29uY2F0KGUucGF0aCwnIiwgcXVlcnk6ICInKS5jb25jYXQoZS5xdWVyeSwnIiwgZnJhZ21lbnQ6ICInKS5jb25jYXQoZS5mcmFnbWVudCwnIn0nKSk7aWYoZS5zY2hlbWUmJiFjLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFsLnRlc3QoZS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGNvbnRhaW5zIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY29tcG9uZW50IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKSBjaGFyYWN0ZXInKX1lbHNlIGlmKHUudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfXZhciBmPSIiLGQ9Ii8iLG09L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8sZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scixpLG8pe3ZhciBhLHM7dm9pZCAwPT09byYmKG89ITEpLCJvYmplY3QiPT10eXBlb2YgZT8odGhpcy5zY2hlbWU9ZS5zY2hlbWV8fGYsdGhpcy5hdXRob3JpdHk9ZS5hdXRob3JpdHl8fGYsdGhpcy5wYXRoPWUucGF0aHx8Zix0aGlzLnF1ZXJ5PWUucXVlcnl8fGYsdGhpcy5mcmFnbWVudD1lLmZyYWdtZW50fHxmKToodGhpcy5zY2hlbWU9KHM9bywoYT1lKXx8cz9hOiJmaWxlIiksdGhpcy5hdXRob3JpdHk9dHx8Zix0aGlzLnBhdGg9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJodHRwcyI6Y2FzZSJodHRwIjpjYXNlImZpbGUiOnQ/dFswXSE9PWQmJih0PWQrdCk6dD1kfXJldHVybiB0fSh0aGlzLnNjaGVtZSxufHxmKSx0aGlzLnF1ZXJ5PXJ8fGYsdGhpcy5mcmFnbWVudD1pfHxmLGgodGhpcyxvKSl9cmV0dXJuIGUuaXNVcmk9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHwhIXQmJiJzdHJpbmciPT10eXBlb2YgdC5hdXRob3JpdHkmJiJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudCYmInN0cmluZyI9PXR5cGVvZiB0LnBhdGgmJiJzdHJpbmciPT10eXBlb2YgdC5xdWVyeSYmInN0cmluZyI9PXR5cGVvZiB0LnNjaGVtZSYmInN0cmluZyI9PXR5cGVvZiB0LmZzUGF0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQud2l0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQudG9TdHJpbmd9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcodGhpcywhMSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUud2l0aD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4gdGhpczt2YXIgdD1lLnNjaGVtZSxuPWUuYXV0aG9yaXR5LHI9ZS5wYXRoLGk9ZS5xdWVyeSxvPWUuZnJhZ21lbnQ7cmV0dXJuIHZvaWQgMD09PXQ/dD10aGlzLnNjaGVtZTpudWxsPT09dCYmKHQ9Ziksdm9pZCAwPT09bj9uPXRoaXMuYXV0aG9yaXR5Om51bGw9PT1uJiYobj1mKSx2b2lkIDA9PT1yP3I9dGhpcy5wYXRoOm51bGw9PT1yJiYocj1mKSx2b2lkIDA9PT1pP2k9dGhpcy5xdWVyeTpudWxsPT09aSYmKGk9Ziksdm9pZCAwPT09bz9vPXRoaXMuZnJhZ21lbnQ6bnVsbD09PW8mJihvPWYpLHQ9PT10aGlzLnNjaGVtZSYmbj09PXRoaXMuYXV0aG9yaXR5JiZyPT09dGhpcy5wYXRoJiZpPT09dGhpcy5xdWVyeSYmbz09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgYih0LG4scixpLG8pfSxlLnBhcnNlPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPW0uZXhlYyhlKTtyZXR1cm4gbj9uZXcgYihuWzJdfHxmLEUobls0XXx8ZiksRShuWzVdfHxmKSxFKG5bN118fGYpLEUobls5XXx8ZiksdCk6bmV3IGIoZixmLGYsZixmKX0sZS5maWxlPWZ1bmN0aW9uKGUpe3ZhciB0PWY7aWYociYmKGU9ZS5yZXBsYWNlKC9cXC9nLGQpKSxlWzBdPT09ZCYmZVsxXT09PWQpe3ZhciBuPWUuaW5kZXhPZihkLDIpOy0xPT09bj8odD1lLnN1YnN0cmluZygyKSxlPWQpOih0PWUuc3Vic3RyaW5nKDIsbiksZT1lLnN1YnN0cmluZyhuKXx8ZCl9cmV0dXJuIG5ldyBiKCJmaWxlIix0LGUsZixmKX0sZS5mcm9tPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBiKGUuc2NoZW1lLGUuYXV0aG9yaXR5LGUucGF0aCxlLnF1ZXJ5LGUuZnJhZ21lbnQpO3JldHVybiBoKHQsITApLHR9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksXyh0aGlzLGUpfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5yZXZpdmU9ZnVuY3Rpb24odCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuIHQ7dmFyIG49bmV3IGIodCk7cmV0dXJuIG4uX2Zvcm1hdHRlZD10LmV4dGVybmFsLG4uX2ZzUGF0aD10Ll9zZXA9PT1wP3QuZnNQYXRoOm51bGwsbn1yZXR1cm4gdH0sZX0oKSxwPXI/MTp2b2lkIDAsYj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0Ll9mb3JtYXR0ZWQ9bnVsbCx0Ll9mc1BhdGg9bnVsbCx0fXJldHVybiBzKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJmc1BhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPXcodGhpcywhMSkpLHRoaXMuX2ZzUGF0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLGU/Xyh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPV8odGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9LHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBlPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihlLmZzUGF0aD10aGlzLl9mc1BhdGgsZS5fc2VwPXApLHRoaXMuX2Zvcm1hdHRlZCYmKGUuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihlLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGUuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGUuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoZS5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoZS5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxlfSx0fShnKSx2PSgoYT17fSlbNThdPSIlM0EiLGFbNDddPSIlMkYiLGFbNjNdPSIlM0YiLGFbMzVdPSIlMjMiLGFbOTFdPSIlNUIiLGFbOTNdPSIlNUQiLGFbNjRdPSIlNDAiLGFbMzNdPSIlMjEiLGFbMzZdPSIlMjQiLGFbMzhdPSIlMjYiLGFbMzldPSIlMjciLGFbNDBdPSIlMjgiLGFbNDFdPSIlMjkiLGFbNDJdPSIlMkEiLGFbNDNdPSIlMkIiLGFbNDRdPSIlMkMiLGFbNTldPSIlM0IiLGFbNjFdPSIlM0QiLGFbMzJdPSIlMjAiLGEpO2Z1bmN0aW9uIHkoZSx0KXtmb3IodmFyIG49dm9pZCAwLHI9LTEsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lLmNoYXJDb2RlQXQoaSk7aWYobz49OTcmJm88PTEyMnx8bz49NjUmJm88PTkwfHxvPj00OCYmbzw9NTd8fDQ1PT09b3x8NDY9PT1vfHw5NT09PW98fDEyNj09PW98fHQmJjQ3PT09byktMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksdm9pZCAwIT09biYmKG4rPWUuY2hhckF0KGkpKTtlbHNle3ZvaWQgMD09PW4mJihuPWUuc3Vic3RyKDAsaSkpO3ZhciBhPXZbb107dm9pZCAwIT09YT8oLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLG4rPWEpOi0xPT09ciYmKHI9aSl9fXJldHVybi0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyKSkpLHZvaWQgMCE9PW4/bjplfWZ1bmN0aW9uIEMoZSl7Zm9yKHZhciB0PXZvaWQgMCxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWUuY2hhckNvZGVBdChuKTszNT09PXJ8fDYzPT09cj8odm9pZCAwPT09dCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9dltyXSk6dm9pZCAwIT09dCYmKHQrPWVbbl0pfXJldHVybiB2b2lkIDAhPT10P3Q6ZX1mdW5jdGlvbiB3KGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hdXRob3JpdHkmJmUucGF0aC5sZW5ndGg+MSYmImZpbGUiPT09ZS5zY2hlbWU/Ii8vIi5jb25jYXQoZS5hdXRob3JpdHkpLmNvbmNhdChlLnBhdGgpOjQ3PT09ZS5wYXRoLmNoYXJDb2RlQXQoMCkmJihlLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8ZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmNTg9PT1lLnBhdGguY2hhckNvZGVBdCgyKT90P2UucGF0aC5zdWJzdHIoMSk6ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTplLnBhdGgsciYmKG49bi5yZXBsYWNlKC9cLy9nLCJcXCIpKSxufWZ1bmN0aW9uIF8oZSx0KXt2YXIgbj10P0M6eSxyPSIiLGk9ZS5zY2hlbWUsbz1lLmF1dGhvcml0eSxhPWUucGF0aCxzPWUucXVlcnksYz1lLmZyYWdtZW50O2lmKGkmJihyKz1pLHIrPSI6IiksKG98fCJmaWxlIj09PWkpJiYocis9ZCxyKz1kKSxvKXt2YXIgbD1vLmluZGV4T2YoIkAiKTtpZigtMSE9PWwpe3ZhciB1PW8uc3Vic3RyKDAsbCk7bz1vLnN1YnN0cihsKzEpLC0xPT09KGw9dS5pbmRleE9mKCI6IikpP3IrPW4odSwhMSk6KHIrPW4odS5zdWJzdHIoMCxsKSwhMSkscis9IjoiLHIrPW4odS5zdWJzdHIobCsxKSwhMSkpLHIrPSJAIn0tMT09PShsPShvPW8udG9Mb3dlckNhc2UoKSkuaW5kZXhPZigiOiIpKT9yKz1uKG8sITEpOihyKz1uKG8uc3Vic3RyKDAsbCksITEpLHIrPW8uc3Vic3RyKGwpKX1pZihhKXtpZihhLmxlbmd0aD49MyYmNDc9PT1hLmNoYXJDb2RlQXQoMCkmJjU4PT09YS5jaGFyQ29kZUF0KDIpKShoPWEuY2hhckNvZGVBdCgxKSk+PTY1JiZoPD05MCYmKGE9Ii8iLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGgrMzIpLCI6IikuY29uY2F0KGEuc3Vic3RyKDMpKSk7ZWxzZSBpZihhLmxlbmd0aD49MiYmNTg9PT1hLmNoYXJDb2RlQXQoMSkpe3ZhciBoOyhoPWEuY2hhckNvZGVBdCgwKSk+PTY1JiZoPD05MCYmKGE9IiIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUoaCszMiksIjoiKS5jb25jYXQoYS5zdWJzdHIoMikpKX1yKz1uKGEsITApfXJldHVybiBzJiYocis9Ij8iLHIrPW4ocywhMSkpLGMmJihyKz0iIyIscis9dD9jOnkoYywhMSkpLHJ9ZnVuY3Rpb24gUyhlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK1MoZS5zdWJzdHIoMykpOmV9fXZhciBBPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIEUoZSl7cmV0dXJuIGUubWF0Y2goQSk/ZS5yZXBsYWNlKEEsKGZ1bmN0aW9uKGUpe3JldHVybiBTKGUpfSkpOmV9dmFyIHgsTixrPW4oNDcwKSxMPWZ1bmN0aW9uKGUsdCxuKXtpZihufHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHIsaT0wLG89dC5sZW5ndGg7aTxvO2krKykhciYmaSBpbiB0fHwocnx8KHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLGkpKSxyW2ldPXRbaV0pO3JldHVybiBlLmNvbmNhdChyfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9LFQ9ay5wb3NpeHx8azsoTj14fHwoeD17fSkpLmpvaW5QYXRoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3JldHVybiBlLndpdGgoe3BhdGg6VC5qb2luLmFwcGx5KFQsTChbZS5wYXRoXSx0LCExKSl9KX0sTi5yZXNvbHZlUGF0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTt2YXIgcj1lLnBhdGh8fCIvIjtyZXR1cm4gZS53aXRoKHtwYXRoOlQucmVzb2x2ZS5hcHBseShULEwoW3JdLHQsITEpKX0pfSxOLmRpcm5hbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9VC5kaXJuYW1lKGUucGF0aCk7cmV0dXJuIDE9PT10Lmxlbmd0aCYmNDY9PT10LmNoYXJDb2RlQXQoMCk/ZTplLndpdGgoe3BhdGg6dH0pfSxOLmJhc2VuYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBULmJhc2VuYW1lKGUucGF0aCl9LE4uZXh0bmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gVC5leHRuYW1lKGUucGF0aCl9fX0sdD17fTtmdW5jdGlvbiBuKHIpe2lmKHRbcl0pcmV0dXJuIHRbcl0uZXhwb3J0czt2YXIgaT10W3JdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtyXShpLGkuZXhwb3J0cyxuKSxpLmV4cG9ydHN9cmV0dXJuIG4uZD0oZSx0KT0+e2Zvcih2YXIgciBpbiB0KW4ubyh0LHIpJiYhbi5vKGUscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6ITAsZ2V0OnRbcl19KX0sbi5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxuLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LG4oNDQ3KX0pKCk7dmFye1VSSTpfYSxVdGlsczpTYX09dmE7ZnVuY3Rpb24gQWEoZSx0KXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKTtmb3IodmFyIG4scj1TdHJpbmcoZSksaT0iIixvPSEhdCYmISF0LmV4dGVuZGVkLGE9ISF0JiYhIXQuZ2xvYnN0YXIscz0hMSxjPXQmJiJzdHJpbmciPT10eXBlb2YgdC5mbGFncz90LmZsYWdzOiIiLGw9MCx1PXIubGVuZ3RoO2w8dTtsKyspc3dpdGNoKG49cltsXSl7Y2FzZSIvIjpjYXNlIiQiOmNhc2UiXiI6Y2FzZSIrIjpjYXNlIi4iOmNhc2UiKCI6Y2FzZSIpIjpjYXNlIj0iOmNhc2UiISI6Y2FzZSJ8IjppKz0iXFwiK247YnJlYWs7Y2FzZSI/IjppZihvKXtpKz0iLiI7YnJlYWt9Y2FzZSJbIjpjYXNlIl0iOmlmKG8pe2krPW47YnJlYWt9Y2FzZSJ7IjppZihvKXtzPSEwLGkrPSIoIjticmVha31jYXNlIn0iOmlmKG8pe3M9ITEsaSs9IikiO2JyZWFrfWNhc2UiLCI6aWYocyl7aSs9InwiO2JyZWFrfWkrPSJcXCIrbjticmVhaztjYXNlIioiOmZvcih2YXIgaD1yW2wtMV0sZj0xOyIqIj09PXJbbCsxXTspZisrLGwrKzt2YXIgZD1yW2wrMV07aWYoYSlmPjEmJigiLyI9PT1ofHx2b2lkIDA9PT1ofHwieyI9PT1ofHwiLCI9PT1oKSYmKCIvIj09PWR8fHZvaWQgMD09PWR8fCIsIj09PWR8fCJ9Ij09PWQpPygiLyI9PT1kP2wrKzoiLyI9PT1oJiZpLmVuZHNXaXRoKCJcXC8iKSYmKGk9aS5zdWJzdHIoMCxpLmxlbmd0aC0yKSksaSs9IigoPzpbXi9dKig/Oi98JCkpKikiKTppKz0iKFteL10qKSI7ZWxzZSBpKz0iLioiO2JyZWFrO2RlZmF1bHQ6aSs9bn1yZXR1cm4gYyYmfmMuaW5kZXhPZigiZyIpfHwoaT0iXiIraSsiJCIpLG5ldyBSZWdFeHAoaSxjKX12YXIgRWEseGE9Tm8oKSxOYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmdsb2JXcmFwcGVycz1bXTt0cnl7Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLG89IiEiIT09aVswXTtvfHwoaT1pLnN1YnN0cmluZygxKSksaS5sZW5ndGg+MCYmKCIvIj09PWlbMF0mJihpPWkuc3Vic3RyaW5nKDEpKSx0aGlzLmdsb2JXcmFwcGVycy5wdXNoKHtyZWdleHA6QWEoIioqLyIraSx7ZXh0ZW5kZWQ6ITAsZ2xvYnN0YXI6ITB9KSxpbmNsdWRlOm99KSl9dGhpcy51cmlzPXR9Y2F0Y2goZSl7dGhpcy5nbG9iV3JhcHBlcnMubGVuZ3RoPTAsdGhpcy51cmlzPVtdfX1yZXR1cm4gZS5wcm90b3R5cGUubWF0Y2hlc1BhdHRlcm49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSExLG49MCxyPXRoaXMuZ2xvYldyYXBwZXJzO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLG89aS5yZWdleHAsYT1pLmluY2x1ZGU7by50ZXN0KGUpJiYodD1hKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuZ2V0VVJJcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVyaXN9LGV9KCksa2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnNlcnZpY2U9ZSx0aGlzLnVyaT10LHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5hbmNob3JzPXZvaWQgMCxuJiYodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5wcm9taXNlLnJlc29sdmUobmV3IExhKG4pKSl9cmV0dXJuIGUucHJvdG90eXBlLmdldFVucmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnJlc29sdmVkU2NoZW1hfHwodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5sb2FkU2NoZW1hKHRoaXMudXJpKSksdGhpcy51bnJlc29sdmVkU2NoZW1hfSxlLnByb3RvdHlwZS5nZXRSZXNvbHZlZFNjaGVtYT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWF8fCh0aGlzLnJlc29sdmVkU2NoZW1hPXRoaXMuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBlLnNlcnZpY2UucmVzb2x2ZVNjaGVtYUNvbnRlbnQodCxlKX0pKSksdGhpcy5yZXNvbHZlZFNjaGVtYX0sZS5wcm90b3R5cGUuY2xlYXJTY2hlbWE9ZnVuY3Rpb24oKXt2YXIgZT0hIXRoaXMudW5yZXNvbHZlZFNjaGVtYTtyZXR1cm4gdGhpcy5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy51bnJlc29sdmVkU2NoZW1hPXZvaWQgMCx0aGlzLmRlcGVuZGVuY2llcy5jbGVhcigpLHRoaXMuYW5jaG9ycz12b2lkIDAsZX0sZX0oKSxMYT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXR9LFRhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXR9cmV0dXJuIGUucHJvdG90eXBlLmdldFNlY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdGhpcy5zY2hlbWEpO2lmKHQpcmV0dXJuIEJvKHQpfSxlLnByb3RvdHlwZS5nZXRTZWN0aW9uUmVjdXJzaXZlPWZ1bmN0aW9uKGUsdCl7aWYoIXR8fCJib29sZWFuIj09dHlwZW9mIHR8fDA9PT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj1lLnNoaWZ0KCk7aWYodC5wcm9wZXJ0aWVzJiYodC5wcm9wZXJ0aWVzW25dLDEpKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LnByb3BlcnRpZXNbbl0pO2lmKHQucGF0dGVyblByb3BlcnRpZXMpZm9yKHZhciByPTAsaT1PYmplY3Qua2V5cyh0LnBhdHRlcm5Qcm9wZXJ0aWVzKTtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXSxhPWhpKG8pO2lmKG51bGw9PWE/dm9pZCAwOmEudGVzdChuKSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5wYXR0ZXJuUHJvcGVydGllc1tvXSl9ZWxzZXtpZigib2JqZWN0Ij09dHlwZW9mIHQuYWRkaXRpb25hbFByb3BlcnRpZXMpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuYWRkaXRpb25hbFByb3BlcnRpZXMpO2lmKG4ubWF0Y2goIlswLTldKyIpKWlmKEFycmF5LmlzQXJyYXkodC5pdGVtcykpe3ZhciBzPXBhcnNlSW50KG4sMTApO2lmKCFpc05hTihzKSYmdC5pdGVtc1tzXSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5pdGVtc1tzXSl9ZWxzZSBpZih0Lml0ZW1zKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0Lml0ZW1zKX19LGV9KCksT2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLmNvbnRleHRTZXJ2aWNlPXQsdGhpcy5yZXF1ZXN0U2VydmljZT1lLHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPW58fFByb21pc2UsdGhpcy5jYWxsT25EaXNwb3NlPVtdLHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcz17fSx0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucz1bXSx0aGlzLnNjaGVtYXNCeUlkPXt9LHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM9W10sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcz17fX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0UmVnaXN0ZXJlZFNjaGVtYUlkcz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcykuZmlsdGVyKChmdW5jdGlvbih0KXt2YXIgbj1fYS5wYXJzZSh0KS5zY2hlbWU7cmV0dXJuInNjaGVtYXNlcnZpY2UiIT09biYmKCFlfHxlKG4pKX0pKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwcm9taXNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuY2FsbE9uRGlzcG9zZS5sZW5ndGg+MDspdGhpcy5jYWxsT25EaXNwb3NlLnBvcCgpKCl9LGUucHJvdG90eXBlLm9uUmVzb3VyY2VDaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMDtmb3IodmFyIG49ITEscj1bZT1NYShlKV0saT1PYmplY3Qua2V5cyh0aGlzLnNjaGVtYXNCeUlkKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVtYXNCeUlkW2VdfSkpO3IubGVuZ3RoOylmb3IodmFyIG89ci5wb3AoKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07cyYmKHMudXJpPT09b3x8cy5kZXBlbmRlbmNpZXMuaGFzKG8pKSYmKHMudXJpIT09byYmci5wdXNoKHMudXJpKSxzLmNsZWFyU2NoZW1hKCkmJihuPSEwKSxpW2FdPXZvaWQgMCl9cmV0dXJuIG59LGUucHJvdG90eXBlLnNldFNjaGVtYUNvbnRyaWJ1dGlvbnM9ZnVuY3Rpb24oZSl7aWYoZS5zY2hlbWFzKXt2YXIgdD1lLnNjaGVtYXM7Zm9yKHZhciBuIGluIHQpe3ZhciByPU1hKG4pO3RoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tyXT10aGlzLmFkZFNjaGVtYUhhbmRsZShyLHRbbl0pfX1pZihBcnJheS5pc0FycmF5KGUuc2NoZW1hQXNzb2NpYXRpb25zKSlmb3IodmFyIGk9MCxvPWUuc2NoZW1hQXNzb2NpYXRpb25zO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldLHM9YS51cmlzLm1hcChNYSksYz10aGlzLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb24oYS5wYXR0ZXJuLHMpO3RoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zLnB1c2goYyl9fSxlLnByb3RvdHlwZS5hZGRTY2hlbWFIYW5kbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcga2EodGhpcyxlLHQpO3JldHVybiB0aGlzLnNjaGVtYXNCeUlkW2VdPW4sbn0sZS5wcm90b3R5cGUuZ2V0T3JBZGRTY2hlbWFIYW5kbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXXx8dGhpcy5hZGRTY2hlbWFIYW5kbGUoZSx0KX0sZS5wcm90b3R5cGUuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBOYShlLHQpO3JldHVybiB0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2gobiksbn0sZS5wcm90b3R5cGUucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TWEoZSk7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbcl09ITAsdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsdCYmdGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKHQsW3JdKSxuP3RoaXMuYWRkU2NoZW1hSGFuZGxlKHIsbik6dGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZShyKX0sZS5wcm90b3R5cGUuY2xlYXJFeHRlcm5hbFNjaGVtYXM9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e30sdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsdGhpcy5jb250cmlidXRpb25TY2hlbWFzKXRoaXMuc2NoZW1hc0J5SWRbZV09dGhpcy5jb250cmlidXRpb25TY2hlbWFzW2VdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbZV09ITA7Zm9yKHZhciB0PTAsbj10aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9uczt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTt0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2gocil9fSxlLnByb3RvdHlwZS5nZXRSZXNvbHZlZFNjaGVtYT1mdW5jdGlvbihlKXt2YXIgdD1NYShlKSxuPXRoaXMuc2NoZW1hc0J5SWRbdF07cmV0dXJuIG4/bi5nZXRSZXNvbHZlZFNjaGVtYSgpOnRoaXMucHJvbWlzZS5yZXNvbHZlKHZvaWQgMCl9LGUucHJvdG90eXBlLmxvYWRTY2hlbWE9ZnVuY3Rpb24oZSl7aWYoIXRoaXMucmVxdWVzdFNlcnZpY2Upe3ZhciB0PXhhKCJqc29uLnNjaGVtYS5ub3JlcXVlc3RzZXJ2aWNlIiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfScuIE5vIHNjaGVtYSByZXF1ZXN0IHNlcnZpY2UgYXZhaWxhYmxlIixQYShlKSk7cmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG5ldyBMYSh7fSxbdF0pKX1yZXR1cm4gdGhpcy5yZXF1ZXN0U2VydmljZShlKS50aGVuKChmdW5jdGlvbih0KXtpZighdCl7dmFyIG49eGEoImpzb24uc2NoZW1hLm5vY29udGVudCIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nOiBObyBjb250ZW50LiIsUGEoZSkpO3JldHVybiBuZXcgTGEoe30sW25dKX12YXIgcixpPVtdO3I9bmkodCxpKTt2YXIgbz1pLmxlbmd0aD9beGEoImpzb24uc2NoZW1hLmludmFsaWRGb3JtYXQiLCJVbmFibGUgdG8gcGFyc2UgY29udGVudCBmcm9tICd7MH0nOiBQYXJzZSBlcnJvciBhdCBvZmZzZXQgezF9LiIsUGEoZSksaVswXS5vZmZzZXQpXTpbXTtyZXR1cm4gbmV3IExhKHIsbyl9KSwoZnVuY3Rpb24odCl7dmFyIG49dC50b1N0cmluZygpLHI9dC50b1N0cmluZygpLnNwbGl0KCJFcnJvcjogIik7cmV0dXJuIHIubGVuZ3RoPjEmJihuPXJbMV0pLHVpKG4sIi4iKSYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSksbmV3IExhKHt9LFt4YSgianNvbi5zY2hlbWEubm9jb250ZW50IiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfSc6IHsxfS4iLFBhKGUpLG4pXSl9KSl9LGUucHJvdG90eXBlLnJlc29sdmVTY2hlbWFDb250ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPWUuZXJyb3JzLnNsaWNlKDApLGk9ZS5zY2hlbWE7aWYoaS4kc2NoZW1hKXt2YXIgbz1NYShpLiRzY2hlbWEpO2lmKCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTAzL3NjaGVtYSI9PT1vKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShuZXcgVGEoe30sW3hhKCJqc29uLnNjaGVtYS5kcmFmdDAzLm5vdHN1cHBvcnRlZCIsIkRyYWZ0LTAzIHNjaGVtYXMgYXJlIG5vdCBzdXBwb3J0ZWQuIildKSk7Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMTktMDkvc2NoZW1hIj09PW8/ci5wdXNoKHhhKCJqc29uLnNjaGVtYS5kcmFmdDIwMTkwOS5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDE5LTA5IHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKToiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPT09byYmci5wdXNoKHhhKCJqc29uLnNjaGVtYS5kcmFmdDIwMjAxMi5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDIwLTEyIHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKX12YXIgYT10aGlzLmNvbnRleHRTZXJ2aWNlLHM9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8sYSxzLGM7dm9pZCAwPT09aXx8MD09PWkubGVuZ3RoP289dDoiLyI9PT1pLmNoYXJBdCgwKT9vPWZ1bmN0aW9uKGUsdCl7dD1kZWNvZGVVUklDb21wb25lbnQodCk7dmFyIG49ZTtyZXR1cm4iLyI9PT10WzBdJiYodD10LnN1YnN0cmluZygxKSksdC5zcGxpdCgiLyIpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKSwhKG49bltlXSl9KSksbn0odCxpKTooYT10LGM9aSwocz1uKS5hbmNob3JzfHwocy5hbmNob3JzPXUoYSkpLG89cy5hbmNob3JzLmdldChjKSksbz9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJiFlLmhhc093blByb3BlcnR5KG4pJiYiaWQiIT09biYmIiRpZCIhPT1uJiYoZVtuXT10W25dKX0oZSxvKTpyLnB1c2goeGEoImpzb24uc2NoZW1hLmludmFsaWRpZCIsIiRyZWYgJ3swfScgaW4gJ3sxfScgY2FuIG5vdCBiZSByZXNvbHZlZC4iLGksbi51cmkpKX0sYz1mdW5jdGlvbihlLHQsaSxvKXthJiYhL15bQS1aYS16XVtBLVphLXowLTkrXC0uK10qOlwvXC8uKi8udGVzdCh0KSYmKHQ9YS5yZXNvbHZlUmVsYXRpdmVQYXRoKHQsby51cmkpKSx0PU1hKHQpO3ZhciBjPW4uZ2V0T3JBZGRTY2hlbWFIYW5kbGUodCk7cmV0dXJuIGMuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKG4pe2lmKG8uZGVwZW5kZW5jaWVzLmFkZCh0KSxuLmVycm9ycy5sZW5ndGgpe3ZhciBhPWk/dCsiIyIraTp0O3IucHVzaCh4YSgianNvbi5zY2hlbWEucHJvYmxlbWxvYWRpbmdyZWYiLCJQcm9ibGVtcyBsb2FkaW5nIHJlZmVyZW5jZSAnezB9JzogezF9IixhLG4uZXJyb3JzWzBdKSl9cmV0dXJuIHMoZSxuLnNjaGVtYSxjLGkpLGwoZSxuLnNjaGVtYSxjKX0pKX0sbD1mdW5jdGlvbihlLHQscil7dmFyIGk9W107cmV0dXJuIG4udHJhdmVyc2VOb2RlcyhlLChmdW5jdGlvbihlKXtmb3IodmFyIG49bmV3IFNldDtlLiRyZWY7KXt2YXIgbz1lLiRyZWYsYT1vLnNwbGl0KCIjIiwyKTtpZihkZWxldGUgZS4kcmVmLGFbMF0ubGVuZ3RoPjApcmV0dXJuIHZvaWQgaS5wdXNoKGMoZSxhWzBdLGFbMV0scikpO2lmKCFuLmhhcyhvKSl7dmFyIGw9YVsxXTtzKGUsdCxyLGwpLG4uYWRkKG8pfX19KSksbi5wcm9taXNlLmFsbChpKX0sdT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgTWFwO3JldHVybiBuLnRyYXZlcnNlTm9kZXMoZSwoZnVuY3Rpb24oZSl7dmFyIG49ZS4kaWR8fGUuaWQ7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYiIyI9PT1uLmNoYXJBdCgwKSl7dmFyIGk9bi5zdWJzdHJpbmcoMSk7dC5oYXMoaSk/ci5wdXNoKHhhKCJqc29uLnNjaGVtYS5kdXBsaWNhdGVpZCIsIkR1cGxpY2F0ZSBpZCBkZWNsYXJhdGlvbjogJ3swfSciLG4pKTp0LnNldChpLGUpfX0pKSx0fTtyZXR1cm4gbChpLGksdCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUYShpLHIpfSkpfSxlLnByb3RvdHlwZS50cmF2ZXJzZU5vZGVzPWZ1bmN0aW9uKGUsdCl7aWYoIWV8fCJvYmplY3QiIT10eXBlb2YgZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO2Zvcih2YXIgbj1uZXcgU2V0LHI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dOyJvYmplY3QiPT10eXBlb2YgaSYmYS5wdXNoKGkpfX0saT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoIm9iamVjdCI9PXR5cGVvZiBpKWZvcih2YXIgbyBpbiBpKXt2YXIgcz1vLGM9aVtzXTsib2JqZWN0Ij09dHlwZW9mIGMmJmEucHVzaChjKX19fSxvPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZihBcnJheS5pc0FycmF5KGkpKWZvcih2YXIgbz0wLHM9aTtvPHMubGVuZ3RoO28rKyl7dmFyIGM9c1tvXTsib2JqZWN0Ij09dHlwZW9mIGMmJmEucHVzaChjKX19fSxhPVtlXSxzPWEucG9wKCk7czspbi5oYXMocyl8fChuLmFkZChzKSx0KHMpLHIocy5pdGVtcyxzLmFkZGl0aW9uYWxJdGVtcyxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLHMubm90LHMuY29udGFpbnMscy5wcm9wZXJ0eU5hbWVzLHMuaWYscy50aGVuLHMuZWxzZSksaShzLmRlZmluaXRpb25zLHMucHJvcGVydGllcyxzLnBhdHRlcm5Qcm9wZXJ0aWVzLHMuZGVwZW5kZW5jaWVzKSxvKHMuYW55T2Yscy5hbGxPZixzLm9uZU9mLHMuaXRlbXMpKSxzPWEucG9wKCl9LGUucHJvdG90eXBlLmdldFNjaGVtYUZyb21Qcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYoIm9iamVjdCI9PT0obnVsbD09PShuPXQucm9vdCl8fHZvaWQgMD09PW4/dm9pZCAwOm4udHlwZSkpZm9yKHZhciBpPTAsbz10LnJvb3QucHJvcGVydGllcztpPG8ubGVuZ3RoO2krKyl7dmFyIGE9b1tpXTtpZigiJHNjaGVtYSI9PT1hLmtleU5vZGUudmFsdWUmJiJzdHJpbmciPT09KG51bGw9PT0ocj1hLnZhbHVlTm9kZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIudHlwZSkpe3ZhciBzPWEudmFsdWVOb2RlLnZhbHVlO3JldHVybiB0aGlzLmNvbnRleHRTZXJ2aWNlJiYhL15cd1tcd1xkKy4tXSo6Ly50ZXN0KHMpJiYocz10aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmVSZWxhdGl2ZVBhdGgocyxlKSksc319fSxlLnByb3RvdHlwZS5nZXRBc3NvY2lhdGVkU2NoZW1hcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxuPVtdLHI9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBfYS5wYXJzZShlKS53aXRoKHtmcmFnbWVudDpudWxsLHF1ZXJ5Om51bGx9KS50b1N0cmluZyghMCl9Y2F0Y2godCl7cmV0dXJuIGV9fShlKSxpPTAsbz10aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldO2lmKGEubWF0Y2hlc1BhdHRlcm4ocikpZm9yKHZhciBzPTAsYz1hLmdldFVSSXMoKTtzPGMubGVuZ3RoO3MrKyl7dmFyIGw9Y1tzXTt0W2xdfHwobi5wdXNoKGwpLHRbbF09ITApfX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hVVJJc0ZvclJlc291cmNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dCYmdGhpcy5nZXRTY2hlbWFGcm9tUHJvcGVydHkoZSx0KTtyZXR1cm4gbj9bbl06dGhpcy5nZXRBc3NvY2lhdGVkU2NoZW1hcyhlKX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hRm9yUmVzb3VyY2U9ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj10aGlzLmdldFNjaGVtYUZyb21Qcm9wZXJ0eShlLHQpO2lmKG4pe3ZhciByPU1hKG4pO3JldHVybiB0aGlzLmdldE9yQWRkU2NoZW1hSGFuZGxlKHIpLmdldFJlc29sdmVkU2NoZW1hKCl9fWlmKHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UmJnRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb3VyY2U9PT1lKXJldHVybiB0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlLnJlc29sdmVkU2NoZW1hO3ZhciBpPXRoaXMuZ2V0QXNzb2NpYXRlZFNjaGVtYXMoZSksbz1pLmxlbmd0aD4wP3RoaXMuY3JlYXRlQ29tYmluZWRTY2hlbWEoZSxpKS5nZXRSZXNvbHZlZFNjaGVtYSgpOnRoaXMucHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk7cmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9e3Jlc291cmNlOmUscmVzb2x2ZWRTY2hlbWE6b30sb30sZS5wcm90b3R5cGUuY3JlYXRlQ29tYmluZWRTY2hlbWE9ZnVuY3Rpb24oZSx0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUodFswXSk7dmFyIG49InNjaGVtYXNlcnZpY2U6Ly9jb21iaW5lZFNjaGVtYS8iK2VuY29kZVVSSUNvbXBvbmVudChlKSxyPXthbGxPZjp0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJueyRyZWY6ZX19KSl9O3JldHVybiB0aGlzLmFkZFNjaGVtYUhhbmRsZShuLHIpfSxlLnByb3RvdHlwZS5nZXRNYXRjaGluZ1NjaGVtYXM9ZnVuY3Rpb24oZSx0LG4pe2lmKG4pe3ZhciByPW4uaWR8fCJzY2hlbWFzZXJ2aWNlOi8vdW50aXRsZWQvbWF0Y2hpbmdTY2hlbWFzLyIrSWErKztyZXR1cm4gdGhpcy5hZGRTY2hlbWFIYW5kbGUocixuKS5nZXRSZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiB0LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5pbnZlcnRlZH0pKX0pKX1yZXR1cm4gdGhpcy5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSx0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZT90LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5pbnZlcnRlZH0pKTpbXX0pKX0sZX0oKSxJYT0wO2Z1bmN0aW9uIE1hKGUpe3RyeXtyZXR1cm4gX2EucGFyc2UoZSkudG9TdHJpbmcoITApfWNhdGNoKHQpe3JldHVybiBlfX1mdW5jdGlvbiBQYShlKXt0cnl7dmFyIHQ9X2EucGFyc2UoZSk7aWYoImZpbGUiPT09dC5zY2hlbWUpcmV0dXJuIHQuZnNQYXRofWNhdGNoKGUpe31yZXR1cm4gZX1mdW5jdGlvbiBSYShlLHQpe3ZhciBuPVtdLHI9W10saT1bXSxvPS0xLGE9dGkoZS5nZXRUZXh0KCksITEpLHM9YS5zY2FuKCk7ZnVuY3Rpb24gYyhlKXtuLnB1c2goZSksci5wdXNoKGkubGVuZ3RoKX1mb3IoOzE3IT09czspe3N3aXRjaChzKXtjYXNlIDE6Y2FzZSAzOnZhciBsPXtzdGFydExpbmU6Zj1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGVuZExpbmU6ZixraW5kOjE9PT1zPyJvYmplY3QiOiJhcnJheSJ9O2kucHVzaChsKTticmVhaztjYXNlIDI6Y2FzZSA0OnZhciB1PTI9PT1zPyJvYmplY3QiOiJhcnJheSI7aWYoaS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXS5raW5kPT09dSl7bD1pLnBvcCgpO3ZhciBoPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7bCYmaD5sLnN0YXJ0TGluZSsxJiZvIT09bC5zdGFydExpbmUmJihsLmVuZExpbmU9aC0xLGMobCksbz1sLnN0YXJ0TGluZSl9YnJlYWs7Y2FzZSAxMzp2YXIgZj1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGQ9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSthLmdldFRva2VuTGVuZ3RoKCkpLmxpbmU7MT09PWEuZ2V0VG9rZW5FcnJvcigpJiZmKzE8ZS5saW5lQ291bnQ/YS5zZXRQb3NpdGlvbihlLm9mZnNldEF0KHVyLmNyZWF0ZShmKzEsMCkpKTpmPGQmJihjKHtzdGFydExpbmU6ZixlbmRMaW5lOmQsa2luZDpBci5Db21tZW50fSksbz1mKTticmVhaztjYXNlIDEyOnZhciBtPWUuZ2V0VGV4dCgpLnN1YnN0cihhLmdldFRva2VuT2Zmc2V0KCksYS5nZXRUb2tlbkxlbmd0aCgpKS5tYXRjaCgvXlwvXC9ccyojKHJlZ2lvblxiKXwoZW5kcmVnaW9uXGIpLyk7aWYobSl7aD1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lO2lmKG1bMV0pe2w9e3N0YXJ0TGluZTpoLGVuZExpbmU6aCxraW5kOkFyLlJlZ2lvbn07aS5wdXNoKGwpfWVsc2V7Zm9yKHZhciBnPWkubGVuZ3RoLTE7Zz49MCYmaVtnXS5raW5kIT09QXIuUmVnaW9uOylnLS07aWYoZz49MCl7bD1pW2ddO2kubGVuZ3RoPWcsaD5sLnN0YXJ0TGluZSYmbyE9PWwuc3RhcnRMaW5lJiYobC5lbmRMaW5lPWgsYyhsKSxvPWwuc3RhcnRMaW5lKX19fX1zPWEuc2NhbigpfXZhciBwPXQmJnQucmFuZ2VMaW1pdDtpZigibnVtYmVyIiE9dHlwZW9mIHB8fG4ubGVuZ3RoPD1wKXJldHVybiBuO3QmJnQub25SYW5nZUxpbWl0RXhjZWVkZWQmJnQub25SYW5nZUxpbWl0RXhjZWVkZWQoZS51cmkpO2Zvcih2YXIgYj1bXSx2PTAseT1yO3Y8eS5sZW5ndGg7disrKXsoQT15W3ZdKTwzMCYmKGJbQV09KGJbQV18fDApKzEpfXZhciBDPTAsdz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBfPWJbZ107aWYoXyl7aWYoXytDPnApe3c9ZzticmVha31DKz1ffX12YXIgUz1bXTtmb3IoZz0wO2c8bi5sZW5ndGg7ZysrKXt2YXIgQTsibnVtYmVyIj09dHlwZW9mKEE9cltnXSkmJihBPHd8fEE9PT13JiZDKys8cCkmJlMucHVzaChuW2ddKX1yZXR1cm4gU31mdW5jdGlvbiBWYShlLHQsbil7ZnVuY3Rpb24gcih0LG4pe3JldHVybiBmci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQpLGUucG9zaXRpb25BdChuKSl9dmFyIGk9dGkoZS5nZXRUZXh0KCksITApO2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gaS5zZXRQb3NpdGlvbihlKSxpLnNjYW4oKT09PXQ/aS5nZXRUb2tlbk9mZnNldCgpK2kuZ2V0VG9rZW5MZW5ndGgoKTotMX1yZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT1lLm9mZnNldEF0KHQpLGE9bi5nZXROb2RlRnJvbU9mZnNldChpLCEwKSxzPVtdO2E7KXtzd2l0Y2goYS50eXBlKXtjYXNlInN0cmluZyI6Y2FzZSJvYmplY3QiOmNhc2UiYXJyYXkiOnZhciBjPWEub2Zmc2V0KzEsbD1hLm9mZnNldCthLmxlbmd0aC0xO2M8bCYmaT49YyYmaTw9bCYmcy5wdXNoKHIoYyxsKSkscy5wdXNoKHIoYS5vZmZzZXQsYS5vZmZzZXQrYS5sZW5ndGgpKTticmVhaztjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpjYXNlIm51bGwiOmNhc2UicHJvcGVydHkiOnMucHVzaChyKGEub2Zmc2V0LGEub2Zmc2V0K2EubGVuZ3RoKSl9aWYoInByb3BlcnR5Ij09PWEudHlwZXx8YS5wYXJlbnQmJiJhcnJheSI9PT1hLnBhcmVudC50eXBlKXt2YXIgdT1vKGEub2Zmc2V0K2EubGVuZ3RoLDUpOy0xIT09dSYmcy5wdXNoKHIoYS5vZmZzZXQsdSkpfWE9YS5wYXJlbnR9Zm9yKHZhciBoPXZvaWQgMCxmPXMubGVuZ3RoLTE7Zj49MDtmLS0paD1hby5jcmVhdGUoc1tmXSxoKTtyZXR1cm4gaHx8KGg9YW8uY3JlYXRlKGZyLmNyZWF0ZSh0LHQpKSksaH0pKX1mdW5jdGlvbiBGYShlLHQpe3ZhciBuPVtdO3JldHVybiB0LnZpc2l0KChmdW5jdGlvbihyKXt2YXIgaTtpZigicHJvcGVydHkiPT09ci50eXBlJiYiJHJlZiI9PT1yLmtleU5vZGUudmFsdWUmJiJzdHJpbmciPT09KG51bGw9PT0oaT1yLnZhbHVlTm9kZSl8fHZvaWQgMD09PWk/dm9pZCAwOmkudHlwZSkpe3ZhciBvPXIudmFsdWVOb2RlLnZhbHVlLGE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtpZigiIyI9PT1lKXJldHVybltdO2lmKCIjIiE9PWVbMF18fCIvIiE9PWVbMV0pcmV0dXJuIG51bGw7cmV0dXJuIGUuc3Vic3RyaW5nKDIpLnNwbGl0KC9cLy8pLm1hcChqYSl9KHQpO2lmKCFuKXJldHVybiBudWxsO3JldHVybiBLYShuLGUucm9vdCl9KHQsbyk7aWYoYSl7dmFyIHM9ZS5wb3NpdGlvbkF0KGEub2Zmc2V0KTtuLnB1c2goe3RhcmdldDoiIi5jb25jYXQoZS51cmksIiMiKS5jb25jYXQocy5saW5lKzEsIiwiKS5jb25jYXQocy5jaGFyYWN0ZXIrMSkscmFuZ2U6RGEoZSxyLnZhbHVlTm9kZSl9KX19cmV0dXJuITB9KSksUHJvbWlzZS5yZXNvbHZlKG4pfWZ1bmN0aW9uIERhKGUsdCl7cmV0dXJuIGZyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQrMSksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoLTEpKX1mdW5jdGlvbiBLYShlLHQpe2lmKCF0KXJldHVybiBudWxsO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj1lLnNoaWZ0KCk7aWYodCYmIm9iamVjdCI9PT10LnR5cGUpe3ZhciByPXQucHJvcGVydGllcy5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXlOb2RlLnZhbHVlPT09bn0pKTtyZXR1cm4gcj9LYShlLHIudmFsdWVOb2RlKTpudWxsfWlmKHQmJiJhcnJheSI9PT10LnR5cGUmJm4ubWF0Y2goL14oMHxbMS05XVswLTldKikkLykpe3ZhciBpPU51bWJlci5wYXJzZUludChuKSxvPXQuaXRlbXNbaV07cmV0dXJuIG8/S2EoZSxvKTpudWxsfXJldHVybiBudWxsfWZ1bmN0aW9uIGphKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gVWEoZSl7dmFyIHQ9ZS5wcm9taXNlQ29uc3RydWN0b3J8fFByb21pc2Usbj1uZXcgT2EoZS5zY2hlbWFSZXF1ZXN0U2VydmljZSxlLndvcmtzcGFjZUNvbnRleHQsdCk7bi5zZXRTY2hlbWFDb250cmlidXRpb25zKENhKTt2YXIgcj1uZXcgZWEobixlLmNvbnRyaWJ1dGlvbnMsdCxlLmNsaWVudENhcGFiaWxpdGllcyksaT1uZXcgdGEobixlLmNvbnRyaWJ1dGlvbnMsdCksbz1uZXcgaGEobiksYT1uZXcgaWEobix0KTtyZXR1cm57Y29uZmlndXJlOmZ1bmN0aW9uKGUpe24uY2xlYXJFeHRlcm5hbFNjaGVtYXMoKSxlLnNjaGVtYXMmJmUuc2NoZW1hcy5mb3JFYWNoKChmdW5jdGlvbihlKXtuLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWEoZS51cmksZS5maWxlTWF0Y2gsZS5zY2hlbWEpfSkpLGEuY29uZmlndXJlKGUpfSxyZXNldFNjaGVtYTpmdW5jdGlvbihlKXtyZXR1cm4gbi5vblJlc291cmNlQ2hhbmdlKGUpfSxkb1ZhbGlkYXRpb246YS5kb1ZhbGlkYXRpb24uYmluZChhKSxnZXRMYW5ndWFnZVN0YXR1czphLmdldExhbmd1YWdlU3RhdHVzLmJpbmQoYSkscGFyc2VKU09ORG9jdW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFpvKGUse2NvbGxlY3RDb21tZW50czohMH0pfSxuZXdKU09ORG9jdW1lbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9W10pLG5ldyBKbyhlLHQsW10pfShlLHQpfSxnZXRNYXRjaGluZ1NjaGVtYXM6bi5nZXRNYXRjaGluZ1NjaGVtYXMuYmluZChuKSxkb1Jlc29sdmU6ci5kb1Jlc29sdmUuYmluZChyKSxkb0NvbXBsZXRlOnIuZG9Db21wbGV0ZS5iaW5kKHIpLGZpbmREb2N1bWVudFN5bWJvbHM6by5maW5kRG9jdW1lbnRTeW1ib2xzLmJpbmQobyksZmluZERvY3VtZW50U3ltYm9sczI6by5maW5kRG9jdW1lbnRTeW1ib2xzMi5iaW5kKG8pLGZpbmREb2N1bWVudENvbG9yczpvLmZpbmREb2N1bWVudENvbG9ycy5iaW5kKG8pLGdldENvbG9yUHJlc2VudGF0aW9uczpvLmdldENvbG9yUHJlc2VudGF0aW9ucy5iaW5kKG8pLGRvSG92ZXI6aS5kb0hvdmVyLmJpbmQoaSksZ2V0Rm9sZGluZ1JhbmdlczpSYSxnZXRTZWxlY3Rpb25SYW5nZXM6VmEsZmluZERlZmluaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKX0sZmluZExpbmtzOkZhLGZvcm1hdDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dm9pZCAwO2lmKHQpe3ZhciBpPWUub2Zmc2V0QXQodC5zdGFydCk7cj17b2Zmc2V0OmksbGVuZ3RoOmUub2Zmc2V0QXQodC5lbmQpLWl9fXZhciBvPXt0YWJTaXplOm4/bi50YWJTaXplOjQsaW5zZXJ0U3BhY2VzOiEwPT09KG51bGw9PW4/dm9pZCAwOm4uaW5zZXJ0U3BhY2VzKSxpbnNlcnRGaW5hbE5ld2xpbmU6ITA9PT0obnVsbD09bj92b2lkIDA6bi5pbnNlcnRGaW5hbE5ld2xpbmUpLGVvbDoiXG4ifTtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiBucihlLHQsbil9KGUuZ2V0VGV4dCgpLHIsbykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gS3IucmVwbGFjZShmci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgpKSx0LmNvbnRlbnQpfSkpfX19InVuZGVmaW5lZCIhPXR5cGVvZiBmZXRjaCYmKEVhPWZ1bmN0aW9uKGUpe3JldHVybiBmZXRjaChlKS50aGVuKChlPT5lLnRleHQoKSkpfSk7dmFyIEJhPSIvIi5jaGFyQ29kZUF0KDApLHFhPSIuIi5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uICRhKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSkwPT09bi5sZW5ndGh8fDE9PT1uLmxlbmd0aCYmbi5jaGFyQ29kZUF0KDApPT09cWF8fCgyPT09bi5sZW5ndGgmJm4uY2hhckNvZGVBdCgwKT09PXFhJiZuLmNoYXJDb2RlQXQoMSk9PT1xYT90LnBvcCgpOnQucHVzaChuKSk7ZS5sZW5ndGg+MSYmMD09PWVbZS5sZW5ndGgtMV0ubGVuZ3RoJiZ0LnB1c2goIiIpO2xldCBuPXQuam9pbigiLyIpO3JldHVybiAwPT09ZVswXS5sZW5ndGgmJihuPSIvIituKSxufXNlbGYub25tZXNzYWdlPSgpPT57Wm4oKChlLHQpPT5uZXcgY2xhc3N7X2N0eDtfbGFuZ3VhZ2VTZXJ2aWNlO19sYW5ndWFnZVNldHRpbmdzO19sYW5ndWFnZUlkO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fY3R4PWUsdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncz10Lmxhbmd1YWdlU2V0dGluZ3MsdGhpcy5fbGFuZ3VhZ2VJZD10Lmxhbmd1YWdlSWQsdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlPVVhKHt3b3Jrc3BhY2VDb250ZXh0OntyZXNvbHZlUmVsYXRpdmVQYXRoOihlLHQpPT5mdW5jdGlvbihlLHQpe2lmKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT1CYX0odCkpe2NvbnN0IG49X2EucGFyc2UoZSkscj10LnNwbGl0KCIvIik7cmV0dXJuIG4ud2l0aCh7cGF0aDokYShyKX0pLnRvU3RyaW5nKCl9cmV0dXJuIGZ1bmN0aW9uKGUsLi4udCl7Y29uc3Qgbj1fYS5wYXJzZShlKSxyPW4ucGF0aC5zcGxpdCgiLyIpO2ZvcihsZXQgZSBvZiB0KXIucHVzaCguLi5lLnNwbGl0KCIvIikpO3JldHVybiBuLndpdGgoe3BhdGg6JGEocil9KS50b1N0cmluZygpfShlLHQpfSh0LnN1YnN0cigwLHQubGFzdEluZGV4T2YoIi8iKSsxKSxlKX0sc2NoZW1hUmVxdWVzdFNlcnZpY2U6dC5lbmFibGVTY2hlbWFSZXF1ZXN0P0VhOnZvaWQgMH0pLHRoaXMuX2xhbmd1YWdlU2VydmljZS5jb25maWd1cmUodGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyl9YXN5bmMgZG9WYWxpZGF0aW9uKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZih0KXtsZXQgZT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCk7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1ZhbGlkYXRpb24odCxlLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3MpfXJldHVybiBQcm9taXNlLnJlc29sdmUoW10pfWFzeW5jIGRvQ29tcGxldGUoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Db21wbGV0ZShuLHQscil9YXN5bmMgZG9SZXNvbHZlKGUpe3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9SZXNvbHZlKGUpfWFzeW5jIGRvSG92ZXIoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Ib3ZlcihuLHQscil9YXN5bmMgZm9ybWF0KGUsdCxuKXtsZXQgcj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXIpcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZvcm1hdChyLHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1hc3luYyByZXNldFNjaGVtYShlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xhbmd1YWdlU2VydmljZS5yZXNldFNjaGVtYShlKSl9YXN5bmMgZmluZERvY3VtZW50U3ltYm9scyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudFN5bWJvbHModCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGZpbmREb2N1bWVudENvbG9ycyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudENvbG9ycyh0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZ2V0Q29sb3JQcmVzZW50YXRpb25zKGUsdCxuKXtsZXQgcj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXIpcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHIpLG89dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldENvbG9yUHJlc2VudGF0aW9ucyhyLGksdCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG8pfWFzeW5jIGdldEZvbGRpbmdSYW5nZXMoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuW107bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldEZvbGRpbmdSYW5nZXMobix0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGdldFNlbGVjdGlvblJhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobiksaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0U2VsZWN0aW9uUmFuZ2VzKG4sdCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfV9nZXRUZXh0RG9jdW1lbnQoZSl7bGV0IHQ9dGhpcy5fY3R4LmdldE1pcnJvck1vZGVscygpO2ZvcihsZXQgbiBvZiB0KWlmKG4udXJpLnRvU3RyaW5nKCk9PT1lKXJldHVybiBwby5jcmVhdGUoZSx0aGlzLl9sYW5ndWFnZUlkLG4udmVyc2lvbixuLmdldFZhbHVlKCkpO3JldHVybiBudWxsfX0oZSx0KSkpfX0oKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9anNvbi53b3JrZXIuanMubWFwCgo=', null, false);
3
+ var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y29uc3QgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24oZSl7c2V0VGltZW91dCgoKCk9PntpZihlLnN0YWNrKXtpZihvLmlzRXJyb3JOb1RlbGVtZXRyeShlKSl0aHJvdyBuZXcgbyhlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spO3Rocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spfXRocm93IGV9KSwwKX19ZW1pdChlKXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKCh0PT57dChlKX0pKX1vblVuZXhwZWN0ZWRFcnJvcihlKXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSksdGhpcy5lbWl0KGUpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpfX07ZnVuY3Rpb24gdCh0KXsoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGkpcmV0dXJuITA7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09ciYmZS5tZXNzYWdlPT09cn0pKHQpfHxlLm9uVW5leHBlY3RlZEVycm9yKHQpfWZ1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOmUuc3RhY2t0cmFjZXx8ZS5zdGFjayxub1RlbGVtZXRyeTpvLmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3Qgcj0iQ2FuY2VsZWQiO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHIpLHRoaXMubmFtZT10aGlzLm1lc3NhZ2V9fWNsYXNzIG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9IkNvZGVFeHBlY3RlZEVycm9yIn1zdGF0aWMgZnJvbUVycm9yKGUpe2lmKGUgaW5zdGFuY2VvZiBvKXJldHVybiBlO2NvbnN0IHQ9bmV3IG87cmV0dXJuIHQubWVzc2FnZT1lLm1lc3NhZ2UsdC5zdGFjaz1lLnN0YWNrLHR9c3RhdGljIGlzRXJyb3JOb1RlbGVtZXRyeShlKXtyZXR1cm4iQ29kZUV4cGVjdGVkRXJyb3IiPT09ZS5uYW1lfX1jbGFzcyBzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZXx8IkFuIHVuZXhwZWN0ZWQgYnVnIG9jY3VycmVkLiIpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHMucHJvdG90eXBlKX19ZnVuY3Rpb24gYShlKXtjb25zdCB0PXRoaXM7bGV0IG4scj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcnx8KHI9ITAsbj1lLmFwcGx5KHQsYXJndW1lbnRzKSksbn19dmFyIGw7ZnVuY3Rpb24gdShlKXtpZihsLmlzKGUpKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpaWYobil0cnl7bi5kaXNwb3NlKCl9Y2F0Y2goZSl7dC5wdXNoKGUpfWlmKDE9PT10Lmxlbmd0aCl0aHJvdyB0WzBdO2lmKHQubGVuZ3RoPjEpdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKHQsIkVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUiKTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bXTplfWlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gYyhlKXtyZXR1cm57ZGlzcG9zZTphKCgoKT0+e2UoKX0pKX19IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbU3ltYm9sLml0ZXJhdG9yXX1lLmlzPXQ7Y29uc3Qgbj1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbipyKGUpe3lpZWxkIGV9ZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBufSxlLnNpbmdsZT1yLGUud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gdChlKT9lOnIoZSl9LGUuZnJvbT1mdW5jdGlvbihlKXtyZXR1cm4gZXx8bn0sZS5pc0VtcHR5PWZ1bmN0aW9uKGUpe3JldHVybiFlfHwhMD09PWVbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lfSxlLmZpcnN0PWZ1bmN0aW9uKGUpe3JldHVybiBlW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkudmFsdWV9LGUuc29tZT1mdW5jdGlvbihlLHQpe2Zvcihjb25zdCBuIG9mIGUpaWYodChuKSlyZXR1cm4hMDtyZXR1cm4hMX0sZS5maW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSlpZih0KG4pKXJldHVybiBufSxlLmZpbHRlcj1mdW5jdGlvbiooZSx0KXtmb3IoY29uc3QgbiBvZiBlKXQobikmJih5aWVsZCBuKX0sZS5tYXA9ZnVuY3Rpb24qKGUsdCl7bGV0IG49MDtmb3IoY29uc3QgciBvZiBlKXlpZWxkIHQocixuKyspfSxlLmNvbmNhdD1mdW5jdGlvbiooLi4uZSl7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgZSBvZiB0KXlpZWxkIGV9LGUucmVkdWNlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1uO2Zvcihjb25zdCBuIG9mIGUpcj10KHIsbik7cmV0dXJuIHJ9LGUuc2xpY2U9ZnVuY3Rpb24qKGUsdCxuPWUubGVuZ3RoKXtmb3IodDwwJiYodCs9ZS5sZW5ndGgpLG48MD9uKz1lLmxlbmd0aDpuPmUubGVuZ3RoJiYobj1lLmxlbmd0aCk7dDxuO3QrKyl5aWVsZCBlW3RdfSxlLmNvbnN1bWU9ZnVuY3Rpb24odCxuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSl7Y29uc3Qgcj1bXTtpZigwPT09bilyZXR1cm5bcix0XTtjb25zdCBpPXRbU3ltYm9sLml0ZXJhdG9yXSgpO2ZvcihsZXQgdD0wO3Q8bjt0Kyspe2NvbnN0IHQ9aS5uZXh0KCk7aWYodC5kb25lKXJldHVybltyLGUuZW1wdHkoKV07ci5wdXNoKHQudmFsdWUpfXJldHVybltyLHtbU3ltYm9sLml0ZXJhdG9yXTooKT0+aX1dfX0obHx8KGw9e30pKTtjbGFzcyBoe2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9EaXNwb3NlPW5ldyBTZXQsdGhpcy5faXNEaXNwb3NlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuX2lzRGlzcG9zZWQ9ITAsdGhpcy5jbGVhcigpKX1nZXQgaXNEaXNwb3NlZCgpe3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkfWNsZWFyKCl7aWYoMCE9PXRoaXMuX3RvRGlzcG9zZS5zaXplKXRyeXt1KHRoaXMuX3RvRGlzcG9zZSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKGUpe2lmKCFlKXJldHVybiBlO2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/aC5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkd8fGNvbnNvbGUud2FybihuZXcgRXJyb3IoIlRyeWluZyB0byBhZGQgYSBkaXNwb3NhYmxlIHRvIGEgRGlzcG9zYWJsZVN0b3JlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi4gVGhlIGFkZGVkIG9iamVjdCB3aWxsIGJlIGxlYWtlZCEiKS5zdGFjayk6dGhpcy5fdG9EaXNwb3NlLmFkZChlKSxlfX1oLkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyBke2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RvcmU9bmV3IGgsdGhpcy5fc3RvcmV9ZGlzcG9zZSgpe3RoaXMuX3N0b3JlLmRpc3Bvc2UoKX1fcmVnaXN0ZXIoZSl7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5fc3RvcmUuYWRkKGUpfX1kLk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtjbGFzcyBme2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwb3NlPSgpPT57fSx0aGlzLnVuc2V0PSgpPT57fSx0aGlzLmlzc2V0PSgpPT4hMX1zZXQoZSl7bGV0IHQ9ZTtyZXR1cm4gdGhpcy51bnNldD0oKT0+dD12b2lkIDAsdGhpcy5pc3NldD0oKT0+dm9pZCAwIT09dCx0aGlzLmRpc3Bvc2U9KCk9Pnt0JiYodCgpLHQ9dm9pZCAwKX0sdGhpc319Y2xhc3MgbXtjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm5leHQ9bS5VbmRlZmluZWQsdGhpcy5wcmV2PW0uVW5kZWZpbmVkfX1tLlVuZGVmaW5lZD1uZXcgbSh2b2lkIDApO2NsYXNzIGd7Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1tLlVuZGVmaW5lZCx0aGlzLl9sYXN0PW0uVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1tLlVuZGVmaW5lZH1jbGVhcigpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl7Y29uc3QgdD1lLm5leHQ7ZS5wcmV2PW0uVW5kZWZpbmVkLGUubmV4dD1tLlVuZGVmaW5lZCxlPXR9dGhpcy5fZmlyc3Q9bS5VbmRlZmluZWQsdGhpcy5fbGFzdD1tLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdChlKXtyZXR1cm4gdGhpcy5faW5zZXJ0KGUsITEpfXB1c2goZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCEwKX1faW5zZXJ0KGUsdCl7Y29uc3Qgbj1uZXcgbShlKTtpZih0aGlzLl9maXJzdD09PW0uVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PW4sdGhpcy5fbGFzdD1uO2Vsc2UgaWYodCl7Y29uc3QgZT10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9bixuLnByZXY9ZSxlLm5leHQ9bn1lbHNle2NvbnN0IGU9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9bixuLm5leHQ9ZSxlLnByZXY9bn10aGlzLl9zaXplKz0xO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5fcmVtb3ZlKG4pKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksZX19cG9wKCl7aWYodGhpcy5fbGFzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLGV9fV9yZW1vdmUoZSl7aWYoZS5wcmV2IT09bS5VbmRlZmluZWQmJmUubmV4dCE9PW0uVW5kZWZpbmVkKXtjb25zdCB0PWUucHJldjt0Lm5leHQ9ZS5uZXh0LGUubmV4dC5wcmV2PXR9ZWxzZSBlLnByZXY9PT1tLlVuZGVmaW5lZCYmZS5uZXh0PT09bS5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PW0uVW5kZWZpbmVkLHRoaXMuX2xhc3Q9bS5VbmRlZmluZWQpOmUubmV4dD09PW0uVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9bS5VbmRlZmluZWQpOmUucHJldj09PW0uVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PW0uVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl5aWVsZCBlLmVsZW1lbnQsZT1lLm5leHR9fWxldCBwPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmxvY2F0aW9uJiZkb2N1bWVudC5sb2NhdGlvbi5oYXNoLmluZGV4T2YoInBzZXVkbz10cnVlIik+PTA7dmFyIHY7Y29uc3QgYj0iZW4iO2xldCB5LEMsXyxTPSExLHc9ITEsQT0hMSx4PSExLEU9YixMPWI7Y29uc3QgTj0ib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZjoib2JqZWN0Ij09dHlwZW9mIGdsb2JhbD9nbG9iYWw6e307bGV0IGs7dm9pZCAwIT09Ti52c2NvZGUmJnZvaWQgMCE9PU4udnNjb2RlLnByb2Nlc3M/az1OLnZzY29kZS5wcm9jZXNzOiJ1bmRlZmluZWQiIT10eXBlb2YgcHJvY2VzcyYmKGs9cHJvY2Vzcyk7Y29uc3QgUj0ic3RyaW5nIj09dHlwZW9mKG51bGw9PT0odj1udWxsPT1rP3ZvaWQgMDprLnZlcnNpb25zKXx8dm9pZCAwPT09dj92b2lkIDA6di5lbGVjdHJvbikmJiJyZW5kZXJlciI9PT0obnVsbD09az92b2lkIDA6ay50eXBlKTtpZigib2JqZWN0IiE9dHlwZW9mIG5hdmlnYXRvcnx8UilpZigib2JqZWN0Ij09dHlwZW9mIGspe1M9IndpbjMyIj09PWsucGxhdGZvcm0sdz0iZGFyd2luIj09PWsucGxhdGZvcm0sQT0ibGludXgiPT09ay5wbGF0Zm9ybSxBJiZrLmVudi5TTkFQJiZrLmVudi5TTkFQX1JFVklTSU9OLGsuZW52LkNJfHxrLmVudi5CVUlMRF9BUlRJRkFDVFNUQUdJTkdESVJFQ1RPUlkseT1iLEU9Yjtjb25zdCBlPWsuZW52LlZTQ09ERV9OTFNfQ09ORklHO2lmKGUpdHJ5e2NvbnN0IHQ9SlNPTi5wYXJzZShlKSxuPXQuYXZhaWxhYmxlTGFuZ3VhZ2VzWyIqIl07eT10LmxvY2FsZSxMPXQub3NMb2NhbGUsRT1ufHxiLEM9dC5fdHJhbnNsYXRpb25zQ29uZmlnRmlsZX1jYXRjaChlKXt9fWVsc2UgY29uc29sZS5lcnJvcigiVW5hYmxlIHRvIHJlc29sdmUgcGxhdGZvcm0uIik7ZWxzZSBfPW5hdmlnYXRvci51c2VyQWdlbnQsUz1fLmluZGV4T2YoIldpbmRvd3MiKT49MCx3PV8uaW5kZXhPZigiTWFjaW50b3NoIik+PTAsKF8uaW5kZXhPZigiTWFjaW50b3NoIik+PTB8fF8uaW5kZXhPZigiaVBhZCIpPj0wfHxfLmluZGV4T2YoImlQaG9uZSIpPj0wKSYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMsQT1fLmluZGV4T2YoIkxpbnV4Iik+PTAsbnVsbD09X3x8Xy5pbmRleE9mKCJNb2JpIikseD0hMCxmdW5jdGlvbihlLHQsLi4ubil7IWZ1bmN0aW9uKGUsdCl7bGV0IG47bj0wPT09dC5sZW5ndGg/ZTplLnJlcGxhY2UoL1x7KFxkKylcfS9nLCgoZSxuKT0+e2NvbnN0IHI9blswXSxpPXRbcl07bGV0IG89ZTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGk/bz1pOiJudW1iZXIiIT10eXBlb2YgaSYmImJvb2xlYW4iIT10eXBlb2YgaSYmbnVsbCE9aXx8KG89U3RyaW5nKGkpKSxvfSkpLHAmJihuPSLvvLsiK24ucmVwbGFjZSgvW2FvdWVpXS9nLCIkJiQmIikrIu+8vSIpfSh0LG4pfSgwLCJfIikseT1iLEU9eSxMPW5hdmlnYXRvci5sYW5ndWFnZTtjb25zdCBUPVMsTz13O3gmJk4uaW1wb3J0U2NyaXB0cztjb25zdCBNPV8sST0iZnVuY3Rpb24iPT10eXBlb2YgTi5wb3N0TWVzc2FnZSYmIU4uaW1wb3J0U2NyaXB0czsoKCk9PntpZihJKXtjb25zdCBlPVtdO04uYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHQ9PntpZih0LmRhdGEmJnQuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspe2NvbnN0IHI9ZVtuXTtpZihyLmlkPT09dC5kYXRhLnZzY29kZVNjaGVkdWxlQXN5bmNXb3JrKXJldHVybiBlLnNwbGljZShuLDEpLHZvaWQgci5jYWxsYmFjaygpfX0pKTtsZXQgdD0wO3JldHVybiBuPT57Y29uc3Qgcj0rK3Q7ZS5wdXNoKHtpZDpyLGNhbGxiYWNrOm59KSxOLnBvc3RNZXNzYWdlKHt2c2NvZGVTY2hlZHVsZUFzeW5jV29yazpyfSwiKiIpfX19KSgpO2NvbnN0IFA9ISEoTSYmTS5pbmRleE9mKCJDaHJvbWUiKT49MCk7TSYmTS5pbmRleE9mKCJGaXJlZm94IiksIVAmJk0mJk0uaW5kZXhPZigiU2FmYXJpIiksTSYmTS5pbmRleE9mKCJFZGcvIiksTSYmTS5pbmRleE9mKCJBbmRyb2lkIik7Y29uc3QgRj1OLnBlcmZvcm1hbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgTi5wZXJmb3JtYW5jZS5ub3c7Y2xhc3MgVntzdGF0aWMgY3JlYXRlKGU9ITApe3JldHVybiBuZXcgVihlKX1jb25zdHJ1Y3RvcihlKXt0aGlzLl9oaWdoUmVzb2x1dGlvbj1GJiZlLHRoaXMuX3N0YXJ0VGltZT10aGlzLl9ub3coKSx0aGlzLl9zdG9wVGltZT0tMX1zdG9wKCl7dGhpcy5fc3RvcFRpbWU9dGhpcy5fbm93KCl9ZWxhcHNlZCgpe3JldHVybi0xIT09dGhpcy5fc3RvcFRpbWU/dGhpcy5fc3RvcFRpbWUtdGhpcy5fc3RhcnRUaW1lOnRoaXMuX25vdygpLXRoaXMuX3N0YXJ0VGltZX1fbm93KCl7cmV0dXJuIHRoaXMuX2hpZ2hSZXNvbHV0aW9uP04ucGVyZm9ybWFuY2Uubm93KCk6RGF0ZS5ub3coKX19dmFyIEQ7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQsbj1udWxsLHIpPT57bGV0IGksbz0hMTtyZXR1cm4gaT1lKChlPT57aWYoIW8pcmV0dXJuIGk/aS5kaXNwb3NlKCk6bz0hMCx0LmNhbGwobixlKX0pLG51bGwsciksbyYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIHMoKChuLHI9bnVsbCxpKT0+ZSgoZT0+bi5jYWxsKHIsdChlKSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBzKCgobixyPW51bGwsaSk9PmUoKGU9Pnt0KGUpLG4uY2FsbChyLGUpfSksbnVsbCxpKSksbil9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIHMoKChuLHI9bnVsbCxpKT0+ZSgoZT0+dChlKSYmbi5jYWxsKHIsZSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIG8oZSx0LHIsaSl7bGV0IG89cjtyZXR1cm4gbihlLChlPT4obz10KG8sZSksbykpLGkpfWZ1bmN0aW9uIHMoZSx0KXtsZXQgbjtjb25zdCByPW5ldyBVKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7bj1lKHIuZmlyZSxyKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtudWxsPT1ufHxuLmRpc3Bvc2UoKX19KTtyZXR1cm4gbnVsbD09dHx8dC5hZGQociksci5ldmVudH1mdW5jdGlvbiBhKGUsdCxuPTEwMCxyPSExLGk9ITEsbyxzKXtsZXQgYSxsLHUsYyxoPTA7Y29uc3QgZD1uZXcgVSh7bGVha1dhcm5pbmdUaHJlc2hvbGQ6byxvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7YT1lKChlPT57aCsrLGw9dChsLGUpLHImJiF1JiYoZC5maXJlKGwpLGw9dm9pZCAwKSxjPSgpPT57Y29uc3QgZT1sO2w9dm9pZCAwLHU9dm9pZCAwLCghcnx8aD4xKSYmZC5maXJlKGUpLGg9MH0sIm51bWJlciI9PXR5cGVvZiBuPyhjbGVhclRpbWVvdXQodSksdT1zZXRUaW1lb3V0KGMsbikpOnZvaWQgMD09PXUmJih1PTAscXVldWVNaWNyb3Rhc2soYykpfSkpfSxvbldpbGxSZW1vdmVMaXN0ZW5lcigpe2kmJmg+MCYmKG51bGw9PWN8fGMoKSl9LG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyKCl7Yz12b2lkIDAsYS5kaXNwb3NlKCl9fSk7cmV0dXJuIG51bGw9PXN8fHMuYWRkKGQpLGQuZXZlbnR9ZnVuY3Rpb24gbChlLHQ9KChlLHQpPT5lPT09dCksbil7bGV0IHIsbz0hMDtyZXR1cm4gaShlLChlPT57Y29uc3Qgbj1vfHwhdChlLHIpO3JldHVybiBvPSExLHI9ZSxufSksbil9ZS5Ob25lPSgpPT5kLk5vbmUsZS5kZWZlcj1mdW5jdGlvbihlLHQpe3JldHVybiBhKGUsKCgpPT57fSksMCx2b2lkIDAsITAsdm9pZCAwLHQpfSxlLm9uY2U9dCxlLm1hcD1uLGUuZm9yRWFjaD1yLGUuZmlsdGVyPWksZS5zaWduYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuYW55PWZ1bmN0aW9uKC4uLmUpe3JldHVybih0LG49bnVsbCxyKT0+ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIGMoKCgpPT51KGUpKSl9KC4uLmUubWFwKChlPT5lKChlPT50LmNhbGwobixlKSksbnVsbCxyKSkpKX0sZS5yZWR1Y2U9byxlLmRlYm91bmNlPWEsZS5hY2N1bXVsYXRlPWZ1bmN0aW9uKHQsbj0wLHIpe3JldHVybiBlLmRlYm91bmNlKHQsKChlLHQpPT5lPyhlLnB1c2godCksZSk6W3RdKSxuLHZvaWQgMCwhMCx2b2lkIDAscil9LGUubGF0Y2g9bCxlLnNwbGl0PWZ1bmN0aW9uKHQsbixyKXtyZXR1cm5bZS5maWx0ZXIodCxuLHIpLGUuZmlsdGVyKHQsKGU9PiFuKGUpKSxyKV19LGUuYnVmZmVyPWZ1bmN0aW9uKGUsdD0hMSxuPVtdKXtsZXQgcj1uLnNsaWNlKCksaT1lKChlPT57cj9yLnB1c2goZSk6cy5maXJlKGUpfSkpO2NvbnN0IG89KCk9PntudWxsPT1yfHxyLmZvckVhY2goKGU9PnMuZmlyZShlKSkpLHI9bnVsbH0scz1uZXcgVSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe2l8fChpPWUoKGU9PnMuZmlyZShlKSkpKX0sb25EaWRBZGRGaXJzdExpc3RlbmVyKCl7ciYmKHQ/c2V0VGltZW91dChvKTpvKCkpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpe2kmJmkuZGlzcG9zZSgpLGk9bnVsbH19KTtyZXR1cm4gcy5ldmVudH07Y2xhc3MgZntjb25zdHJ1Y3RvcihlKXt0aGlzLmV2ZW50PWUsdGhpcy5kaXNwb3NhYmxlcz1uZXcgaH1tYXAoZSl7cmV0dXJuIG5ldyBmKG4odGhpcy5ldmVudCxlLHRoaXMuZGlzcG9zYWJsZXMpKX1mb3JFYWNoKGUpe3JldHVybiBuZXcgZihyKHRoaXMuZXZlbnQsZSx0aGlzLmRpc3Bvc2FibGVzKSl9ZmlsdGVyKGUpe3JldHVybiBuZXcgZihpKHRoaXMuZXZlbnQsZSx0aGlzLmRpc3Bvc2FibGVzKSl9cmVkdWNlKGUsdCl7cmV0dXJuIG5ldyBmKG8odGhpcy5ldmVudCxlLHQsdGhpcy5kaXNwb3NhYmxlcykpfWxhdGNoKCl7cmV0dXJuIG5ldyBmKGwodGhpcy5ldmVudCx2b2lkIDAsdGhpcy5kaXNwb3NhYmxlcykpfWRlYm91bmNlKGUsdD0xMDAsbj0hMSxyPSExLGkpe3JldHVybiBuZXcgZihhKHRoaXMuZXZlbnQsZSx0LG4scixpLHRoaXMuZGlzcG9zYWJsZXMpKX1vbihlLHQsbil7cmV0dXJuIHRoaXMuZXZlbnQoZSx0LG4pfW9uY2UoZSxuLHIpe3JldHVybiB0KHRoaXMuZXZlbnQpKGUsbixyKX1kaXNwb3NlKCl7dGhpcy5kaXNwb3NhYmxlcy5kaXNwb3NlKCl9fWUuY2hhaW49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmKGUpfSxlLmZyb21Ob2RlRXZlbnRFbWl0dGVyPWZ1bmN0aW9uKGUsdCxuPShlPT5lKSl7Y29uc3Qgcj0oLi4uZSk9PmkuZmlyZShuKC4uLmUpKSxpPW5ldyBVKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyOigpPT5lLm9uKHQsciksb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6KCk9PmUucmVtb3ZlTGlzdGVuZXIodCxyKX0pO3JldHVybiBpLmV2ZW50fSxlLmZyb21ET01FdmVudEVtaXR0ZXI9ZnVuY3Rpb24oZSx0LG49KGU9PmUpKXtjb25zdCByPSguLi5lKT0+aS5maXJlKG4oLi4uZSkpLGk9bmV3IFUoe29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6KCk9PmUuYWRkRXZlbnRMaXN0ZW5lcih0LHIpLG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOigpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKX0pO3JldHVybiBpLmV2ZW50fSxlLnRvUHJvbWlzZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKG49PnQoZSkobikpKX0sZS5ydW5BbmRTdWJzY3JpYmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCh2b2lkIDApLGUoKGU9PnQoZSkpKX0sZS5ydW5BbmRTdWJzY3JpYmVXaXRoU3RvcmU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1udWxsO2Z1bmN0aW9uIHIoZSl7bnVsbD09bnx8bi5kaXNwb3NlKCksbj1uZXcgaCx0KGUsbil9cih2b2lkIDApO2NvbnN0IGk9ZSgoZT0+cihlKSkpO3JldHVybiBjKCgoKT0+e2kuZGlzcG9zZSgpLG51bGw9PW58fG4uZGlzcG9zZSgpfSkpfTtjbGFzcyBte2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fb2JzZXJ2YWJsZT1lLHRoaXMuX2NvdW50ZXI9MCx0aGlzLl9oYXNDaGFuZ2VkPSExO2NvbnN0IG49e29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6KCk9PntlLmFkZE9ic2VydmVyKHRoaXMpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjooKT0+e2UucmVtb3ZlT2JzZXJ2ZXIodGhpcyl9fTt0aGlzLmVtaXR0ZXI9bmV3IFUobiksdCYmdC5hZGQodGhpcy5lbWl0dGVyKX1iZWdpblVwZGF0ZShlKXt0aGlzLl9jb3VudGVyKyt9aGFuZGxlUG9zc2libGVDaGFuZ2UoZSl7fWhhbmRsZUNoYW5nZShlLHQpe3RoaXMuX2hhc0NoYW5nZWQ9ITB9ZW5kVXBkYXRlKGUpe3RoaXMuX2NvdW50ZXItLSwwPT09dGhpcy5fY291bnRlciYmKHRoaXMuX29ic2VydmFibGUucmVwb3J0Q2hhbmdlcygpLHRoaXMuX2hhc0NoYW5nZWQmJih0aGlzLl9oYXNDaGFuZ2VkPSExLHRoaXMuZW1pdHRlci5maXJlKHRoaXMuX29ic2VydmFibGUuZ2V0KCkpKSl9fWUuZnJvbU9ic2VydmFibGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IG0oZSx0KS5lbWl0dGVyLmV2ZW50fSxlLmZyb21PYnNlcnZhYmxlTGlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQ9PntsZXQgbj0wLHI9ITE7Y29uc3QgaT17YmVnaW5VcGRhdGUoKXtuKyt9LGVuZFVwZGF0ZSgpe24tLSwwPT09biYmKGUucmVwb3J0Q2hhbmdlcygpLHImJihyPSExLHQoKSkpfSxoYW5kbGVQb3NzaWJsZUNoYW5nZSgpe30saGFuZGxlQ2hhbmdlKCl7cj0hMH19O3JldHVybiBlLmFkZE9ic2VydmVyKGkpLHtkaXNwb3NlKCl7ZS5yZW1vdmVPYnNlcnZlcihpKX19fX19KER8fChEPXt9KSk7Y2xhc3MgS3tjb25zdHJ1Y3RvcihlKXt0aGlzLmxpc3RlbmVyQ291bnQ9MCx0aGlzLmludm9jYXRpb25Db3VudD0wLHRoaXMuZWxhcHNlZE92ZXJhbGw9MCx0aGlzLmR1cmF0aW9ucz1bXSx0aGlzLm5hbWU9YCR7ZX1fJHtLLl9pZFBvb2wrK31gLEsuYWxsLmFkZCh0aGlzKX1zdGFydChlKXt0aGlzLl9zdG9wV2F0Y2g9bmV3IFYoITApLHRoaXMubGlzdGVuZXJDb3VudD1lfXN0b3AoKXtpZih0aGlzLl9zdG9wV2F0Y2gpe2NvbnN0IGU9dGhpcy5fc3RvcFdhdGNoLmVsYXBzZWQoKTt0aGlzLmR1cmF0aW9ucy5wdXNoKGUpLHRoaXMuZWxhcHNlZE92ZXJhbGwrPWUsdGhpcy5pbnZvY2F0aW9uQ291bnQrPTEsdGhpcy5fc3RvcFdhdGNoPXZvaWQgMH19fUsuYWxsPW5ldyBTZXQsSy5faWRQb29sPTA7Y2xhc3Mgantjb25zdHJ1Y3RvcihlLHQ9TWF0aC5yYW5kb20oKS50b1N0cmluZygxOCkuc2xpY2UoMiw1KSl7dGhpcy50aHJlc2hvbGQ9ZSx0aGlzLm5hbWU9dCx0aGlzLl93YXJuQ291bnRkb3duPTB9ZGlzcG9zZSgpe3ZhciBlO251bGw9PT0oZT10aGlzLl9zdGFja3MpfHx2b2lkIDA9PT1lfHxlLmNsZWFyKCl9Y2hlY2soZSx0KXtjb25zdCBuPXRoaXMudGhyZXNob2xkO2lmKG48PTB8fHQ8bilyZXR1cm47dGhpcy5fc3RhY2tzfHwodGhpcy5fc3RhY2tzPW5ldyBNYXApO2NvbnN0IHI9dGhpcy5fc3RhY2tzLmdldChlLnZhbHVlKXx8MDtpZih0aGlzLl9zdGFja3Muc2V0KGUudmFsdWUscisxKSx0aGlzLl93YXJuQ291bnRkb3duLT0xLHRoaXMuX3dhcm5Db3VudGRvd248PTApe2xldCBlO3RoaXMuX3dhcm5Db3VudGRvd249LjUqbjtsZXQgcj0wO2Zvcihjb25zdFt0LG5db2YgdGhpcy5fc3RhY2tzKSghZXx8cjxuKSYmKGU9dCxyPW4pO2NvbnNvbGUud2FybihgWyR7dGhpcy5uYW1lfV0gcG90ZW50aWFsIGxpc3RlbmVyIExFQUsgZGV0ZWN0ZWQsIGhhdmluZyAke3R9IGxpc3RlbmVycyBhbHJlYWR5LiBNT1NUIGZyZXF1ZW50IGxpc3RlbmVyICgke3J9KTpgKSxjb25zb2xlLndhcm4oZSl9cmV0dXJuKCk9Pntjb25zdCB0PXRoaXMuX3N0YWNrcy5nZXQoZS52YWx1ZSl8fDA7dGhpcy5fc3RhY2tzLnNldChlLnZhbHVlLHQtMSl9fX1jbGFzcyBxe3N0YXRpYyBjcmVhdGUoKXt2YXIgZTtyZXR1cm4gbmV3IHEobnVsbCE9PShlPShuZXcgRXJyb3IpLnN0YWNrKSYmdm9pZCAwIT09ZT9lOiIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlPWV9cHJpbnQoKXtjb25zb2xlLndhcm4odGhpcy52YWx1ZS5zcGxpdCgiXG4iKS5zbGljZSgyKS5qb2luKCJcbiIpKX19Y2xhc3MgQntjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5jYWxsYmFjaz1lLHRoaXMuY2FsbGJhY2tUaGlzPXQsdGhpcy5zdGFjaz1uLHRoaXMuc3Vic2NyaXB0aW9uPW5ldyBmfWludm9rZShlKXt0aGlzLmNhbGxiYWNrLmNhbGwodGhpcy5jYWxsYmFja1RoaXMsZSl9fWNsYXNzIFV7Y29uc3RydWN0b3IoZSl7dmFyIHQsbixyLGksbzt0aGlzLl9kaXNwb3NlZD0hMSx0aGlzLl9vcHRpb25zPWUsdGhpcy5fbGVha2FnZU1vbj0obnVsbD09PSh0PXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmxlYWtXYXJuaW5nVGhyZXNob2xkKT9uZXcgaihudWxsIT09KHI9bnVsbD09PShuPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmxlYWtXYXJuaW5nVGhyZXNob2xkKSYmdm9pZCAwIT09cj9yOi0xKTp2b2lkIDAsdGhpcy5fcGVyZk1vbj0obnVsbD09PShpPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLl9wcm9mTmFtZSk/bmV3IEsodGhpcy5fb3B0aW9ucy5fcHJvZk5hbWUpOnZvaWQgMCx0aGlzLl9kZWxpdmVyeVF1ZXVlPW51bGw9PT0obz10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09bz92b2lkIDA6by5kZWxpdmVyeVF1ZXVlfWRpc3Bvc2UoKXt2YXIgZSx0LG4scjt0aGlzLl9kaXNwb3NlZHx8KHRoaXMuX2Rpc3Bvc2VkPSEwLHRoaXMuX2xpc3RlbmVycyYmdGhpcy5fbGlzdGVuZXJzLmNsZWFyKCksbnVsbD09PShlPXRoaXMuX2RlbGl2ZXJ5UXVldWUpfHx2b2lkIDA9PT1lfHxlLmNsZWFyKHRoaXMpLG51bGw9PT0obj1udWxsPT09KHQ9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQub25EaWRSZW1vdmVMYXN0TGlzdGVuZXIpfHx2b2lkIDA9PT1ufHxuLmNhbGwodCksbnVsbD09PShyPXRoaXMuX2xlYWthZ2VNb24pfHx2b2lkIDA9PT1yfHxyLmRpc3Bvc2UoKSl9Z2V0IGV2ZW50KCl7cmV0dXJuIHRoaXMuX2V2ZW50fHwodGhpcy5fZXZlbnQ9KGUsdCxuKT0+e3ZhciByLGksbztpZih0aGlzLl9saXN0ZW5lcnN8fCh0aGlzLl9saXN0ZW5lcnM9bmV3IGcpLHRoaXMuX2xlYWthZ2VNb24mJnRoaXMuX2xpc3RlbmVycy5zaXplPjMqdGhpcy5fbGVha2FnZU1vbi50aHJlc2hvbGQpcmV0dXJuIGNvbnNvbGUud2FybihgWyR7dGhpcy5fbGVha2FnZU1vbi5uYW1lfV0gUkVGVVNFUyB0byBhY2NlcHQgbmV3IGxpc3RlbmVycyBiZWNhdXNlIGl0IGV4Y2VlZGVkIGl0cyB0aHJlc2hvbGQgYnkgZmFyYCksZC5Ob25lO2NvbnN0IHM9dGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKTtsZXQgYSxsO3MmJihudWxsPT09KHI9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PXI/dm9pZCAwOnIub25XaWxsQWRkRmlyc3RMaXN0ZW5lcikmJnRoaXMuX29wdGlvbnMub25XaWxsQWRkRmlyc3RMaXN0ZW5lcih0aGlzKSx0aGlzLl9sZWFrYWdlTW9uJiZ0aGlzLl9saXN0ZW5lcnMuc2l6ZT49TWF0aC5jZWlsKC4yKnRoaXMuX2xlYWthZ2VNb24udGhyZXNob2xkKSYmKGw9cS5jcmVhdGUoKSxhPXRoaXMuX2xlYWthZ2VNb24uY2hlY2sobCx0aGlzLl9saXN0ZW5lcnMuc2l6ZSsxKSk7Y29uc3QgdT1uZXcgQihlLHQsbCksYz10aGlzLl9saXN0ZW5lcnMucHVzaCh1KTtzJiYobnVsbD09PShpPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLm9uRGlkQWRkRmlyc3RMaXN0ZW5lcikmJnRoaXMuX29wdGlvbnMub25EaWRBZGRGaXJzdExpc3RlbmVyKHRoaXMpLChudWxsPT09KG89dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ub25EaWRBZGRMaXN0ZW5lcikmJnRoaXMuX29wdGlvbnMub25EaWRBZGRMaXN0ZW5lcih0aGlzLGUsdCk7Y29uc3QgZj11LnN1YnNjcmlwdGlvbi5zZXQoKCgpPT57dmFyIGUsdDtpZihudWxsPT1hfHxhKCksIXRoaXMuX2Rpc3Bvc2VkJiYobnVsbD09PSh0PW51bGw9PT0oZT10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5vbldpbGxSZW1vdmVMaXN0ZW5lcil8fHZvaWQgMD09PXR8fHQuY2FsbChlLHRoaXMpLGMoKSx0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyKSl7dGhpcy5fbGlzdGVuZXJzJiYhdGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKXx8dGhpcy5fb3B0aW9ucy5vbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcih0aGlzKX19KSk7cmV0dXJuIG4gaW5zdGFuY2VvZiBoP24uYWRkKGYpOkFycmF5LmlzQXJyYXkobikmJm4ucHVzaChmKSxmfSksdGhpcy5fZXZlbnR9ZmlyZShlKXt2YXIgdCxuLHI7aWYodGhpcy5fbGlzdGVuZXJzKXt0aGlzLl9kZWxpdmVyeVF1ZXVlfHwodGhpcy5fZGVsaXZlcnlRdWV1ZT1uZXcgVyhudWxsPT09KHQ9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQub25MaXN0ZW5lckVycm9yKSk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fbGlzdGVuZXJzKXRoaXMuX2RlbGl2ZXJ5UXVldWUucHVzaCh0aGlzLHQsZSk7bnVsbD09PShuPXRoaXMuX3BlcmZNb24pfHx2b2lkIDA9PT1ufHxuLnN0YXJ0KHRoaXMuX2RlbGl2ZXJ5UXVldWUuc2l6ZSksdGhpcy5fZGVsaXZlcnlRdWV1ZS5kZWxpdmVyKCksbnVsbD09PShyPXRoaXMuX3BlcmZNb24pfHx2b2lkIDA9PT1yfHxyLnN0b3AoKX19aGFzTGlzdGVuZXJzKCl7cmV0dXJuISF0aGlzLl9saXN0ZW5lcnMmJiF0aGlzLl9saXN0ZW5lcnMuaXNFbXB0eSgpfX1jbGFzcyAke2NvbnN0cnVjdG9yKGU9dCl7dGhpcy5fb25MaXN0ZW5lckVycm9yPWUsdGhpcy5fcXVldWU9bmV3IGd9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fcXVldWUuc2l6ZX1wdXNoKGUsdCxuKXt0aGlzLl9xdWV1ZS5wdXNoKG5ldyBIKGUsdCxuKSl9Y2xlYXIoZSl7Y29uc3QgdD1uZXcgZztmb3IoY29uc3QgbiBvZiB0aGlzLl9xdWV1ZSluLmVtaXR0ZXIhPT1lJiZ0LnB1c2gobik7dGhpcy5fcXVldWU9dH1kZWxpdmVyKCl7Zm9yKDt0aGlzLl9xdWV1ZS5zaXplPjA7KXtjb25zdCBlPXRoaXMuX3F1ZXVlLnNoaWZ0KCk7dHJ5e2UubGlzdGVuZXIuaW52b2tlKGUuZXZlbnQpfWNhdGNoKGUpe3RoaXMuX29uTGlzdGVuZXJFcnJvcihlKX19fX1jbGFzcyBXIGV4dGVuZHMgJHtjbGVhcihlKXt0aGlzLl9xdWV1ZS5jbGVhcigpfX1jbGFzcyBIe2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLmVtaXR0ZXI9ZSx0aGlzLmxpc3RlbmVyPXQsdGhpcy5ldmVudD1ufX1mdW5jdGlvbiB6KGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZnVuY3Rpb24oZSl7bGV0IHQ9W10sbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7Zm9yKDtPYmplY3QucHJvdG90eXBlIT09bjspdD10LmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKSksbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7cmV0dXJuIHR9KGUpKSJmdW5jdGlvbiI9PXR5cGVvZiBlW25dJiZ0LnB1c2gobik7cmV0dXJuIHR9Y2xhc3MgR3tjb25zdHJ1Y3RvcihlKXt0aGlzLmV4ZWN1dG9yPWUsdGhpcy5fZGlkUnVuPSExfWdldCB2YWx1ZSgpe2lmKCF0aGlzLl9kaWRSdW4pdHJ5e3RoaXMuX3ZhbHVlPXRoaXMuZXhlY3V0b3IoKX1jYXRjaChlKXt0aGlzLl9lcnJvcj1lfWZpbmFsbHl7dGhpcy5fZGlkUnVuPSEwfWlmKHRoaXMuX2Vycm9yKXRocm93IHRoaXMuX2Vycm9yO3JldHVybiB0aGlzLl92YWx1ZX1nZXQgcmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9fXZhciBKO2Z1bmN0aW9uIFgoZSl7cmV0dXJuIGU+PTY1JiZlPD05MH1mdW5jdGlvbiBaKGUpe3JldHVybiA1NTI5Njw9ZSYmZTw9NTYzMTl9ZnVuY3Rpb24gWShlLHQsbil7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobik7aWYoWihyKSYmbisxPHQpe2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KG4rMSk7aWYoZnVuY3Rpb24oZSl7cmV0dXJuIDU2MzIwPD1lJiZlPD01NzM0M30odCkpcmV0dXJuIHQtNTYzMjArKHItNTUyOTY8PDEwKSs2NTUzNn1yZXR1cm4gcn1jb25zdCBRPS9eW1x0XG5cclx4MjAtXHg3RV0qJC87Y2xhc3MgZWV7c3RhdGljIGdldEluc3RhbmNlKGUpe3JldHVybiBlZS5jYWNoZS5nZXQoQXJyYXkuZnJvbShlKSl9c3RhdGljIGdldExvY2FsZXMoKXtyZXR1cm4gZWUuX2xvY2FsZXMudmFsdWV9Y29uc3RydWN0b3IoZSl7dGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeT1lfWlzQW1iaWd1b3VzKGUpe3JldHVybiB0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmhhcyhlKX1nZXRQcmltYXJ5Q29uZnVzYWJsZShlKXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5nZXQoZSl9Z2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKXtyZXR1cm4gbmV3IFNldCh0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmtleXMoKSl9fUo9ZWUsZWUuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YT1uZXcgRygoKCk9PkpTT04ucGFyc2UoJ3siX2NvbW1vbiI6WzgyMzIsMzIsODIzMywzMiw1NzYwLDMyLDgxOTIsMzIsODE5MywzMiw4MTk0LDMyLDgxOTUsMzIsODE5NiwzMiw4MTk3LDMyLDgxOTgsMzIsODIwMCwzMiw4MjAxLDMyLDgyMDIsMzIsODI4NywzMiw4MTk5LDMyLDgyMzksMzIsMjA0Miw5NSw2NTEwMSw5NSw2NTEwMiw5NSw2NTEwMyw5NSw4MjA4LDQ1LDgyMDksNDUsODIxMCw0NSw2NTExMiw0NSwxNzQ4LDQ1LDgyNTksNDUsNzI3LDQ1LDg3MjIsNDUsMTAxMzQsNDUsMTE0NTAsNDUsMTU0OSw0NCwxNjQzLDQ0LDgyMTgsNDQsMTg0LDQ0LDQyMjMzLDQ0LDg5NCw1OSwyMzA3LDU4LDI2OTEsNTgsMTQxNyw1OCwxNzk1LDU4LDE3OTYsNTgsNTg2OCw1OCw2NTA3Miw1OCw2MTQ3LDU4LDYxNTMsNTgsODI4Miw1OCwxNDc1LDU4LDc2MCw1OCw0Mjg4OSw1OCw4NzU4LDU4LDcyMCw1OCw0MjIzNyw1OCw0NTEsMzMsMTE2MDEsMzMsNjYwLDYzLDU3Nyw2MywyNDI5LDYzLDUwMzgsNjMsNDI3MzEsNjMsMTE5MTQ5LDQ2LDgyMjgsNDYsMTc5Myw0NiwxNzk0LDQ2LDQyNTEwLDQ2LDY4MTc2LDQ2LDE2MzIsNDYsMTc3Niw0Niw0MjIzMiw0NiwxMzczLDk2LDY1Mjg3LDk2LDgyMTksOTYsODI0Miw5NiwxMzcwLDk2LDE1MjMsOTYsODE3NSw5Niw2NTM0NCw5Niw5MDAsOTYsODE4OSw5Niw4MTI1LDk2LDgxMjcsOTYsODE5MCw5Niw2OTcsOTYsODg0LDk2LDcxMiw5Niw3MTQsOTYsNzE1LDk2LDc1Niw5Niw2OTksOTYsNzAxLDk2LDcwMCw5Niw3MDIsOTYsNDI4OTIsOTYsMTQ5Nyw5NiwyMDM2LDk2LDIwMzcsOTYsNTE5NCw5Niw1ODM2LDk2LDk0MDMzLDk2LDk0MDM0LDk2LDY1MzM5LDkxLDEwMDg4LDQwLDEwMDk4LDQwLDEyMzA4LDQwLDY0ODMwLDQwLDY1MzQxLDkzLDEwMDg5LDQxLDEwMDk5LDQxLDEyMzA5LDQxLDY0ODMxLDQxLDEwMTAwLDEyMywxMTkwNjAsMTIzLDEwMTAxLDEyNSw2NTM0Miw5NCw4MjcwLDQyLDE2NDUsNDIsODcyNyw0Miw2NjMzNSw0Miw1OTQxLDQ3LDgyNTcsNDcsODcyNSw0Nyw4MjYwLDQ3LDk1ODUsNDcsMTAxODcsNDcsMTA3NDQsNDcsMTE5MzU0LDQ3LDEyNzU1LDQ3LDEyMzM5LDQ3LDExNDYyLDQ3LDIwMDMxLDQ3LDEyMDM1LDQ3LDY1MzQwLDkyLDY1MTI4LDkyLDg3MjYsOTIsMTAxODksOTIsMTA3NDEsOTIsMTA3NDUsOTIsMTE5MzExLDkyLDExOTM1NSw5MiwxMjc1Niw5MiwyMDAyMiw5MiwxMjAzNCw5Miw0Mjg3MiwzOCw3MDgsOTQsNzEwLDk0LDU4NjksNDMsMTAxMzMsNDMsNjYyMDMsNDMsODI0OSw2MCwxMDA5NCw2MCw3MDYsNjAsMTE5MzUwLDYwLDUxNzYsNjAsNTgxMCw2MCw1MTIwLDYxLDExODQwLDYxLDEyNDQ4LDYxLDQyMjM5LDYxLDgyNTAsNjIsMTAwOTUsNjIsNzA3LDYyLDExOTM1MSw2Miw1MTcxLDYyLDk0MDE1LDYyLDgyNzUsMTI2LDczMiwxMjYsODEyOCwxMjYsODc2NCwxMjYsNjUzNzIsMTI0LDY1MjkzLDQ1LDEyMDc4NCw1MCwxMjA3OTQsNTAsMTIwODA0LDUwLDEyMDgxNCw1MCwxMjA4MjQsNTAsMTMwMDM0LDUwLDQyODQyLDUwLDQyMyw1MCwxMDAwLDUwLDQyNTY0LDUwLDUzMTEsNTAsNDI3MzUsNTAsMTE5MzAyLDUxLDEyMDc4NSw1MSwxMjA3OTUsNTEsMTIwODA1LDUxLDEyMDgxNSw1MSwxMjA4MjUsNTEsMTMwMDM1LDUxLDQyOTIzLDUxLDU0MCw1MSw0MzksNTEsNDI4NTgsNTEsMTE0NjgsNTEsMTI0OCw1MSw5NDAxMSw1MSw3MTg4Miw1MSwxMjA3ODYsNTIsMTIwNzk2LDUyLDEyMDgwNiw1MiwxMjA4MTYsNTIsMTIwODI2LDUyLDEzMDAzNiw1Miw1MDcwLDUyLDcxODU1LDUyLDEyMDc4Nyw1MywxMjA3OTcsNTMsMTIwODA3LDUzLDEyMDgxNyw1MywxMjA4MjcsNTMsMTMwMDM3LDUzLDQ0NCw1Myw3MTg2Nyw1MywxMjA3ODgsNTQsMTIwNzk4LDU0LDEyMDgwOCw1NCwxMjA4MTgsNTQsMTIwODI4LDU0LDEzMDAzOCw1NCwxMTQ3NCw1NCw1MTAyLDU0LDcxODkzLDU0LDExOTMxNCw1NSwxMjA3ODksNTUsMTIwNzk5LDU1LDEyMDgwOSw1NSwxMjA4MTksNTUsMTIwODI5LDU1LDEzMDAzOSw1NSw2Njc3MCw1NSw3MTg3OCw1NSwyODE5LDU2LDI1MzgsNTYsMjY2Niw1NiwxMjUxMzEsNTYsMTIwNzkwLDU2LDEyMDgwMCw1NiwxMjA4MTAsNTYsMTIwODIwLDU2LDEyMDgzMCw1NiwxMzAwNDAsNTYsNTQ3LDU2LDU0Niw1Niw2NjMzMCw1NiwyNjYzLDU3LDI5MjAsNTcsMjU0MSw1NywzNDM3LDU3LDEyMDc5MSw1NywxMjA4MDEsNTcsMTIwODExLDU3LDEyMDgyMSw1NywxMjA4MzEsNTcsMTMwMDQxLDU3LDQyODYyLDU3LDExNDY2LDU3LDcxODg0LDU3LDcxODUyLDU3LDcxODk0LDU3LDkwODIsOTcsNjUzNDUsOTcsMTE5ODM0LDk3LDExOTg4Niw5NywxMTk5MzgsOTcsMTE5OTkwLDk3LDEyMDA0Miw5NywxMjAwOTQsOTcsMTIwMTQ2LDk3LDEyMDE5OCw5NywxMjAyNTAsOTcsMTIwMzAyLDk3LDEyMDM1NCw5NywxMjA0MDYsOTcsMTIwNDU4LDk3LDU5Myw5Nyw5NDUsOTcsMTIwNTE0LDk3LDEyMDU3Miw5NywxMjA2MzAsOTcsMTIwNjg4LDk3LDEyMDc0Niw5Nyw2NTMxMyw2NSwxMTk4MDgsNjUsMTE5ODYwLDY1LDExOTkxMiw2NSwxMTk5NjQsNjUsMTIwMDE2LDY1LDEyMDA2OCw2NSwxMjAxMjAsNjUsMTIwMTcyLDY1LDEyMDIyNCw2NSwxMjAyNzYsNjUsMTIwMzI4LDY1LDEyMDM4MCw2NSwxMjA0MzIsNjUsOTEzLDY1LDEyMDQ4OCw2NSwxMjA1NDYsNjUsMTIwNjA0LDY1LDEyMDY2Miw2NSwxMjA3MjAsNjUsNTAzNCw2NSw1NTczLDY1LDQyMjIyLDY1LDk0MDE2LDY1LDY2MjA4LDY1LDExOTgzNSw5OCwxMTk4ODcsOTgsMTE5OTM5LDk4LDExOTk5MSw5OCwxMjAwNDMsOTgsMTIwMDk1LDk4LDEyMDE0Nyw5OCwxMjAxOTksOTgsMTIwMjUxLDk4LDEyMDMwMyw5OCwxMjAzNTUsOTgsMTIwNDA3LDk4LDEyMDQ1OSw5OCwzODgsOTgsNTA3MSw5OCw1MjM0LDk4LDU1NTEsOTgsNjUzMTQsNjYsODQ5Miw2NiwxMTk4MDksNjYsMTE5ODYxLDY2LDExOTkxMyw2NiwxMjAwMTcsNjYsMTIwMDY5LDY2LDEyMDEyMSw2NiwxMjAxNzMsNjYsMTIwMjI1LDY2LDEyMDI3Nyw2NiwxMjAzMjksNjYsMTIwMzgxLDY2LDEyMDQzMyw2Niw0MjkzMiw2Niw5MTQsNjYsMTIwNDg5LDY2LDEyMDU0Nyw2NiwxMjA2MDUsNjYsMTIwNjYzLDY2LDEyMDcyMSw2Niw1MTA4LDY2LDU2MjMsNjYsNDIxOTIsNjYsNjYxNzgsNjYsNjYyMDksNjYsNjYzMDUsNjYsNjUzNDcsOTksODU3Myw5OSwxMTk4MzYsOTksMTE5ODg4LDk5LDExOTk0MCw5OSwxMTk5OTIsOTksMTIwMDQ0LDk5LDEyMDA5Niw5OSwxMjAxNDgsOTksMTIwMjAwLDk5LDEyMDI1Miw5OSwxMjAzMDQsOTksMTIwMzU2LDk5LDEyMDQwOCw5OSwxMjA0NjAsOTksNzQyOCw5OSwxMDEwLDk5LDExNDI5LDk5LDQzOTUxLDk5LDY2NjIxLDk5LDEyODg0NCw2Nyw3MTkyMiw2Nyw3MTkxMyw2Nyw2NTMxNSw2Nyw4NTU3LDY3LDg0NTAsNjcsODQ5Myw2NywxMTk4MTAsNjcsMTE5ODYyLDY3LDExOTkxNCw2NywxMTk5NjYsNjcsMTIwMDE4LDY3LDEyMDE3NCw2NywxMjAyMjYsNjcsMTIwMjc4LDY3LDEyMDMzMCw2NywxMjAzODIsNjcsMTIwNDM0LDY3LDEwMTcsNjcsMTE0MjgsNjcsNTA4Nyw2Nyw0MjIwMiw2Nyw2NjIxMCw2Nyw2NjMwNiw2Nyw2NjU4MSw2Nyw2Njg0NCw2Nyw4NTc0LDEwMCw4NTE4LDEwMCwxMTk4MzcsMTAwLDExOTg4OSwxMDAsMTE5OTQxLDEwMCwxMTk5OTMsMTAwLDEyMDA0NSwxMDAsMTIwMDk3LDEwMCwxMjAxNDksMTAwLDEyMDIwMSwxMDAsMTIwMjUzLDEwMCwxMjAzMDUsMTAwLDEyMDM1NywxMDAsMTIwNDA5LDEwMCwxMjA0NjEsMTAwLDEyODEsMTAwLDUwOTUsMTAwLDUyMzEsMTAwLDQyMTk0LDEwMCw4NTU4LDY4LDg1MTcsNjgsMTE5ODExLDY4LDExOTg2Myw2OCwxMTk5MTUsNjgsMTE5OTY3LDY4LDEyMDAxOSw2OCwxMjAwNzEsNjgsMTIwMTIzLDY4LDEyMDE3NSw2OCwxMjAyMjcsNjgsMTIwMjc5LDY4LDEyMDMzMSw2OCwxMjAzODMsNjgsMTIwNDM1LDY4LDUwMjQsNjgsNTU5OCw2OCw1NjEwLDY4LDQyMTk1LDY4LDg0OTQsMTAxLDY1MzQ5LDEwMSw4NDk1LDEwMSw4NTE5LDEwMSwxMTk4MzgsMTAxLDExOTg5MCwxMDEsMTE5OTQyLDEwMSwxMjAwNDYsMTAxLDEyMDA5OCwxMDEsMTIwMTUwLDEwMSwxMjAyMDIsMTAxLDEyMDI1NCwxMDEsMTIwMzA2LDEwMSwxMjAzNTgsMTAxLDEyMDQxMCwxMDEsMTIwNDYyLDEwMSw0MzgyNiwxMDEsMTIxMywxMDEsODk1OSw2OSw2NTMxNyw2OSw4NDk2LDY5LDExOTgxMiw2OSwxMTk4NjQsNjksMTE5OTE2LDY5LDEyMDAyMCw2OSwxMjAwNzIsNjksMTIwMTI0LDY5LDEyMDE3Niw2OSwxMjAyMjgsNjksMTIwMjgwLDY5LDEyMDMzMiw2OSwxMjAzODQsNjksMTIwNDM2LDY5LDkxNyw2OSwxMjA0OTIsNjksMTIwNTUwLDY5LDEyMDYwOCw2OSwxMjA2NjYsNjksMTIwNzI0LDY5LDExNTc3LDY5LDUwMzYsNjksNDIyMjQsNjksNzE4NDYsNjksNzE4NTQsNjksNjYxODIsNjksMTE5ODM5LDEwMiwxMTk4OTEsMTAyLDExOTk0MywxMDIsMTE5OTk1LDEwMiwxMjAwNDcsMTAyLDEyMDA5OSwxMDIsMTIwMTUxLDEwMiwxMjAyMDMsMTAyLDEyMDI1NSwxMDIsMTIwMzA3LDEwMiwxMjAzNTksMTAyLDEyMDQxMSwxMDIsMTIwNDYzLDEwMiw0MzgyOSwxMDIsNDI5MDUsMTAyLDM4MywxMDIsNzgzNywxMDIsMTQxMiwxMDIsMTE5MzE1LDcwLDg0OTcsNzAsMTE5ODEzLDcwLDExOTg2NSw3MCwxMTk5MTcsNzAsMTIwMDIxLDcwLDEyMDA3Myw3MCwxMjAxMjUsNzAsMTIwMTc3LDcwLDEyMDIyOSw3MCwxMjAyODEsNzAsMTIwMzMzLDcwLDEyMDM4NSw3MCwxMjA0MzcsNzAsNDI5MDQsNzAsOTg4LDcwLDEyMDc3OCw3MCw1NTU2LDcwLDQyMjA1LDcwLDcxODc0LDcwLDcxODQyLDcwLDY2MTgzLDcwLDY2MjEzLDcwLDY2ODUzLDcwLDY1MzUxLDEwMyw4NDU4LDEwMywxMTk4NDAsMTAzLDExOTg5MiwxMDMsMTE5OTQ0LDEwMywxMjAwNDgsMTAzLDEyMDEwMCwxMDMsMTIwMTUyLDEwMywxMjAyMDQsMTAzLDEyMDI1NiwxMDMsMTIwMzA4LDEwMywxMjAzNjAsMTAzLDEyMDQxMiwxMDMsMTIwNDY0LDEwMyw2MDksMTAzLDc1NTUsMTAzLDM5NywxMDMsMTQwOSwxMDMsMTE5ODE0LDcxLDExOTg2Niw3MSwxMTk5MTgsNzEsMTE5OTcwLDcxLDEyMDAyMiw3MSwxMjAwNzQsNzEsMTIwMTI2LDcxLDEyMDE3OCw3MSwxMjAyMzAsNzEsMTIwMjgyLDcxLDEyMDMzNCw3MSwxMjAzODYsNzEsMTIwNDM4LDcxLDEyOTIsNzEsNTA1Niw3MSw1MTA3LDcxLDQyMTk4LDcxLDY1MzUyLDEwNCw4NDYyLDEwNCwxMTk4NDEsMTA0LDExOTk0NSwxMDQsMTE5OTk3LDEwNCwxMjAwNDksMTA0LDEyMDEwMSwxMDQsMTIwMTUzLDEwNCwxMjAyMDUsMTA0LDEyMDI1NywxMDQsMTIwMzA5LDEwNCwxMjAzNjEsMTA0LDEyMDQxMywxMDQsMTIwNDY1LDEwNCwxMjExLDEwNCwxMzkyLDEwNCw1MDU4LDEwNCw2NTMyMCw3Miw4NDU5LDcyLDg0NjAsNzIsODQ2MSw3MiwxMTk4MTUsNzIsMTE5ODY3LDcyLDExOTkxOSw3MiwxMjAwMjMsNzIsMTIwMTc5LDcyLDEyMDIzMSw3MiwxMjAyODMsNzIsMTIwMzM1LDcyLDEyMDM4Nyw3MiwxMjA0MzksNzIsOTE5LDcyLDEyMDQ5NCw3MiwxMjA1NTIsNzIsMTIwNjEwLDcyLDEyMDY2OCw3MiwxMjA3MjYsNzIsMTE0MDYsNzIsNTA1MSw3Miw1NTAwLDcyLDQyMjE1LDcyLDY2MjU1LDcyLDczMSwxMDUsOTA3NSwxMDUsNjUzNTMsMTA1LDg1NjAsMTA1LDg1MDUsMTA1LDg1MjAsMTA1LDExOTg0MiwxMDUsMTE5ODk0LDEwNSwxMTk5NDYsMTA1LDExOTk5OCwxMDUsMTIwMDUwLDEwNSwxMjAxMDIsMTA1LDEyMDE1NCwxMDUsMTIwMjA2LDEwNSwxMjAyNTgsMTA1LDEyMDMxMCwxMDUsMTIwMzYyLDEwNSwxMjA0MTQsMTA1LDEyMDQ2NiwxMDUsMTIwNDg0LDEwNSw2MTgsMTA1LDYxNywxMDUsOTUzLDEwNSw4MTI2LDEwNSw4OTAsMTA1LDEyMDUyMiwxMDUsMTIwNTgwLDEwNSwxMjA2MzgsMTA1LDEyMDY5NiwxMDUsMTIwNzU0LDEwNSwxMTEwLDEwNSw0MjU2NywxMDUsMTIzMSwxMDUsNDM4OTMsMTA1LDUwMjksMTA1LDcxODc1LDEwNSw2NTM1NCwxMDYsODUyMSwxMDYsMTE5ODQzLDEwNiwxMTk4OTUsMTA2LDExOTk0NywxMDYsMTE5OTk5LDEwNiwxMjAwNTEsMTA2LDEyMDEwMywxMDYsMTIwMTU1LDEwNiwxMjAyMDcsMTA2LDEyMDI1OSwxMDYsMTIwMzExLDEwNiwxMjAzNjMsMTA2LDEyMDQxNSwxMDYsMTIwNDY3LDEwNiwxMDExLDEwNiwxMTEyLDEwNiw2NTMyMiw3NCwxMTk4MTcsNzQsMTE5ODY5LDc0LDExOTkyMSw3NCwxMTk5NzMsNzQsMTIwMDI1LDc0LDEyMDA3Nyw3NCwxMjAxMjksNzQsMTIwMTgxLDc0LDEyMDIzMyw3NCwxMjAyODUsNzQsMTIwMzM3LDc0LDEyMDM4OSw3NCwxMjA0NDEsNzQsNDI5MzAsNzQsODk1LDc0LDEwMzIsNzQsNTAzNSw3NCw1MjYxLDc0LDQyMjAxLDc0LDExOTg0NCwxMDcsMTE5ODk2LDEwNywxMTk5NDgsMTA3LDEyMDAwMCwxMDcsMTIwMDUyLDEwNywxMjAxMDQsMTA3LDEyMDE1NiwxMDcsMTIwMjA4LDEwNywxMjAyNjAsMTA3LDEyMDMxMiwxMDcsMTIwMzY0LDEwNywxMjA0MTYsMTA3LDEyMDQ2OCwxMDcsODQ5MCw3NSw2NTMyMyw3NSwxMTk4MTgsNzUsMTE5ODcwLDc1LDExOTkyMiw3NSwxMTk5NzQsNzUsMTIwMDI2LDc1LDEyMDA3OCw3NSwxMjAxMzAsNzUsMTIwMTgyLDc1LDEyMDIzNCw3NSwxMjAyODYsNzUsMTIwMzM4LDc1LDEyMDM5MCw3NSwxMjA0NDIsNzUsOTIyLDc1LDEyMDQ5Nyw3NSwxMjA1NTUsNzUsMTIwNjEzLDc1LDEyMDY3MSw3NSwxMjA3MjksNzUsMTE0MTIsNzUsNTA5NCw3NSw1ODQ1LDc1LDQyMTk5LDc1LDY2ODQwLDc1LDE0NzIsMTA4LDg3MzksNzMsOTIxMyw3Myw2NTUxMiw3MywxNjMzLDEwOCwxNzc3LDczLDY2MzM2LDEwOCwxMjUxMjcsMTA4LDEyMDc4Myw3MywxMjA3OTMsNzMsMTIwODAzLDczLDEyMDgxMyw3MywxMjA4MjMsNzMsMTMwMDMzLDczLDY1MzIxLDczLDg1NDQsNzMsODQ2NCw3Myw4NDY1LDczLDExOTgxNiw3MywxMTk4NjgsNzMsMTE5OTIwLDczLDEyMDAyNCw3MywxMjAxMjgsNzMsMTIwMTgwLDczLDEyMDIzMiw3MywxMjAyODQsNzMsMTIwMzM2LDczLDEyMDM4OCw3MywxMjA0NDAsNzMsNjUzNTYsMTA4LDg1NzIsNzMsODQ2NywxMDgsMTE5ODQ1LDEwOCwxMTk4OTcsMTA4LDExOTk0OSwxMDgsMTIwMDAxLDEwOCwxMjAwNTMsMTA4LDEyMDEwNSw3MywxMjAxNTcsNzMsMTIwMjA5LDczLDEyMDI2MSw3MywxMjAzMTMsNzMsMTIwMzY1LDczLDEyMDQxNyw3MywxMjA0NjksNzMsNDQ4LDczLDEyMDQ5Niw3MywxMjA1NTQsNzMsMTIwNjEyLDczLDEyMDY3MCw3MywxMjA3MjgsNzMsMTE0MTAsNzMsMTAzMCw3MywxMjE2LDczLDE0OTMsMTA4LDE1MDMsMTA4LDE1NzUsMTA4LDEyNjQ2NCwxMDgsMTI2NTkyLDEwOCw2NTE2NiwxMDgsNjUxNjUsMTA4LDE5OTQsMTA4LDExNTk5LDczLDU4MjUsNzMsNDIyMjYsNzMsOTM5OTIsNzMsNjYxODYsMTI0LDY2MzEzLDEyNCwxMTkzMzgsNzYsODU1Niw3Niw4NDY2LDc2LDExOTgxOSw3NiwxMTk4NzEsNzYsMTE5OTIzLDc2LDEyMDAyNyw3NiwxMjAwNzksNzYsMTIwMTMxLDc2LDEyMDE4Myw3NiwxMjAyMzUsNzYsMTIwMjg3LDc2LDEyMDMzOSw3NiwxMjAzOTEsNzYsMTIwNDQzLDc2LDExNDcyLDc2LDUwODYsNzYsNTI5MCw3Niw0MjIwOSw3Niw5Mzk3NCw3Niw3MTg0Myw3Niw3MTg1OCw3Niw2NjU4Nyw3Niw2Njg1NCw3Niw2NTMyNSw3Nyw4NTU5LDc3LDg0OTksNzcsMTE5ODIwLDc3LDExOTg3Miw3NywxMTk5MjQsNzcsMTIwMDI4LDc3LDEyMDA4MCw3NywxMjAxMzIsNzcsMTIwMTg0LDc3LDEyMDIzNiw3NywxMjAyODgsNzcsMTIwMzQwLDc3LDEyMDM5Miw3NywxMjA0NDQsNzcsOTI0LDc3LDEyMDQ5OSw3NywxMjA1NTcsNzcsMTIwNjE1LDc3LDEyMDY3Myw3NywxMjA3MzEsNzcsMTAxOCw3NywxMTQxNiw3Nyw1MDQ3LDc3LDU2MTYsNzcsNTg0Niw3Nyw0MjIwNyw3Nyw2NjIyNCw3Nyw2NjMyMSw3NywxMTk4NDcsMTEwLDExOTg5OSwxMTAsMTE5OTUxLDExMCwxMjAwMDMsMTEwLDEyMDA1NSwxMTAsMTIwMTA3LDExMCwxMjAxNTksMTEwLDEyMDIxMSwxMTAsMTIwMjYzLDExMCwxMjAzMTUsMTEwLDEyMDM2NywxMTAsMTIwNDE5LDExMCwxMjA0NzEsMTEwLDE0MDAsMTEwLDE0MDQsMTEwLDY1MzI2LDc4LDg0NjksNzgsMTE5ODIxLDc4LDExOTg3Myw3OCwxMTk5MjUsNzgsMTE5OTc3LDc4LDEyMDAyOSw3OCwxMjAwODEsNzgsMTIwMTg1LDc4LDEyMDIzNyw3OCwxMjAyODksNzgsMTIwMzQxLDc4LDEyMDM5Myw3OCwxMjA0NDUsNzgsOTI1LDc4LDEyMDUwMCw3OCwxMjA1NTgsNzgsMTIwNjE2LDc4LDEyMDY3NCw3OCwxMjA3MzIsNzgsMTE0MTgsNzgsNDIyMDgsNzgsNjY4MzUsNzgsMzA3NCwxMTEsMzIwMiwxMTEsMzMzMCwxMTEsMzQ1OCwxMTEsMjQwNiwxMTEsMjY2MiwxMTEsMjc5MCwxMTEsMzA0NiwxMTEsMzE3NCwxMTEsMzMwMiwxMTEsMzQzMCwxMTEsMzY2NCwxMTEsMzc5MiwxMTEsNDE2MCwxMTEsMTYzNywxMTEsMTc4MSwxMTEsNjUzNTksMTExLDg1MDAsMTExLDExOTg0OCwxMTEsMTE5OTAwLDExMSwxMTk5NTIsMTExLDEyMDA1NiwxMTEsMTIwMTA4LDExMSwxMjAxNjAsMTExLDEyMDIxMiwxMTEsMTIwMjY0LDExMSwxMjAzMTYsMTExLDEyMDM2OCwxMTEsMTIwNDIwLDExMSwxMjA0NzIsMTExLDc0MzksMTExLDc0NDEsMTExLDQzODM3LDExMSw5NTksMTExLDEyMDUyOCwxMTEsMTIwNTg2LDExMSwxMjA2NDQsMTExLDEyMDcwMiwxMTEsMTIwNzYwLDExMSw5NjMsMTExLDEyMDUzMiwxMTEsMTIwNTkwLDExMSwxMjA2NDgsMTExLDEyMDcwNiwxMTEsMTIwNzY0LDExMSwxMTQyMywxMTEsNDM1MSwxMTEsMTQxMywxMTEsMTUwNSwxMTEsMTYwNywxMTEsMTI2NTAwLDExMSwxMjY1NjQsMTExLDEyNjU5NiwxMTEsNjUyNTksMTExLDY1MjYwLDExMSw2NTI1OCwxMTEsNjUyNTcsMTExLDE3MjYsMTExLDY0NDI4LDExMSw2NDQyOSwxMTEsNjQ0MjcsMTExLDY0NDI2LDExMSwxNzI5LDExMSw2NDQyNCwxMTEsNjQ0MjUsMTExLDY0NDIzLDExMSw2NDQyMiwxMTEsMTc0OSwxMTEsMzM2MCwxMTEsNDEyNSwxMTEsNjY3OTQsMTExLDcxODgwLDExMSw3MTg5NSwxMTEsNjY2MDQsMTExLDE5ODQsNzksMjUzNCw3OSwyOTE4LDc5LDEyMjk1LDc5LDcwODY0LDc5LDcxOTA0LDc5LDEyMDc4Miw3OSwxMjA3OTIsNzksMTIwODAyLDc5LDEyMDgxMiw3OSwxMjA4MjIsNzksMTMwMDMyLDc5LDY1MzI3LDc5LDExOTgyMiw3OSwxMTk4NzQsNzksMTE5OTI2LDc5LDExOTk3OCw3OSwxMjAwMzAsNzksMTIwMDgyLDc5LDEyMDEzNCw3OSwxMjAxODYsNzksMTIwMjM4LDc5LDEyMDI5MCw3OSwxMjAzNDIsNzksMTIwMzk0LDc5LDEyMDQ0Niw3OSw5MjcsNzksMTIwNTAyLDc5LDEyMDU2MCw3OSwxMjA2MTgsNzksMTIwNjc2LDc5LDEyMDczNCw3OSwxMTQyMiw3OSwxMzY1LDc5LDExNjA0LDc5LDQ4MTYsNzksMjg0OCw3OSw2Njc1NCw3OSw0MjIyNyw3OSw3MTg2MSw3OSw2NjE5NCw3OSw2NjIxOSw3OSw2NjU2NCw3OSw2NjgzOCw3OSw5MDc2LDExMiw2NTM2MCwxMTIsMTE5ODQ5LDExMiwxMTk5MDEsMTEyLDExOTk1MywxMTIsMTIwMDA1LDExMiwxMjAwNTcsMTEyLDEyMDEwOSwxMTIsMTIwMTYxLDExMiwxMjAyMTMsMTEyLDEyMDI2NSwxMTIsMTIwMzE3LDExMiwxMjAzNjksMTEyLDEyMDQyMSwxMTIsMTIwNDczLDExMiw5NjEsMTEyLDEyMDUzMCwxMTIsMTIwNTQ0LDExMiwxMjA1ODgsMTEyLDEyMDYwMiwxMTIsMTIwNjQ2LDExMiwxMjA2NjAsMTEyLDEyMDcwNCwxMTIsMTIwNzE4LDExMiwxMjA3NjIsMTEyLDEyMDc3NiwxMTIsMTE0MjcsMTEyLDY1MzI4LDgwLDg0NzMsODAsMTE5ODIzLDgwLDExOTg3NSw4MCwxMTk5MjcsODAsMTE5OTc5LDgwLDEyMDAzMSw4MCwxMjAwODMsODAsMTIwMTg3LDgwLDEyMDIzOSw4MCwxMjAyOTEsODAsMTIwMzQzLDgwLDEyMDM5NSw4MCwxMjA0NDcsODAsOTI5LDgwLDEyMDUwNCw4MCwxMjA1NjIsODAsMTIwNjIwLDgwLDEyMDY3OCw4MCwxMjA3MzYsODAsMTE0MjYsODAsNTA5MCw4MCw1MjI5LDgwLDQyMTkzLDgwLDY2MTk3LDgwLDExOTg1MCwxMTMsMTE5OTAyLDExMywxMTk5NTQsMTEzLDEyMDAwNiwxMTMsMTIwMDU4LDExMywxMjAxMTAsMTEzLDEyMDE2MiwxMTMsMTIwMjE0LDExMywxMjAyNjYsMTEzLDEyMDMxOCwxMTMsMTIwMzcwLDExMywxMjA0MjIsMTEzLDEyMDQ3NCwxMTMsMTMwNywxMTMsMTM3OSwxMTMsMTM4MiwxMTMsODQ3NCw4MSwxMTk4MjQsODEsMTE5ODc2LDgxLDExOTkyOCw4MSwxMTk5ODAsODEsMTIwMDMyLDgxLDEyMDA4NCw4MSwxMjAxODgsODEsMTIwMjQwLDgxLDEyMDI5Miw4MSwxMjAzNDQsODEsMTIwMzk2LDgxLDEyMDQ0OCw4MSwxMTYwNSw4MSwxMTk4NTEsMTE0LDExOTkwMywxMTQsMTE5OTU1LDExNCwxMjAwMDcsMTE0LDEyMDA1OSwxMTQsMTIwMTExLDExNCwxMjAxNjMsMTE0LDEyMDIxNSwxMTQsMTIwMjY3LDExNCwxMjAzMTksMTE0LDEyMDM3MSwxMTQsMTIwNDIzLDExNCwxMjA0NzUsMTE0LDQzODQ3LDExNCw0Mzg0OCwxMTQsNzQ2MiwxMTQsMTEzOTcsMTE0LDQzOTA1LDExNCwxMTkzMTgsODIsODQ3NSw4Miw4NDc2LDgyLDg0NzcsODIsMTE5ODI1LDgyLDExOTg3Nyw4MiwxMTk5MjksODIsMTIwMDMzLDgyLDEyMDE4OSw4MiwxMjAyNDEsODIsMTIwMjkzLDgyLDEyMDM0NSw4MiwxMjAzOTcsODIsMTIwNDQ5LDgyLDQyMiw4Miw1MDI1LDgyLDUwNzQsODIsNjY3NDAsODIsNTUxMSw4Miw0MjIxMSw4Miw5NDAwNSw4Miw2NTM2MywxMTUsMTE5ODUyLDExNSwxMTk5MDQsMTE1LDExOTk1NiwxMTUsMTIwMDA4LDExNSwxMjAwNjAsMTE1LDEyMDExMiwxMTUsMTIwMTY0LDExNSwxMjAyMTYsMTE1LDEyMDI2OCwxMTUsMTIwMzIwLDExNSwxMjAzNzIsMTE1LDEyMDQyNCwxMTUsMTIwNDc2LDExNSw0MjgwMSwxMTUsNDQ1LDExNSwxMTA5LDExNSw0Mzk0NiwxMTUsNzE4NzMsMTE1LDY2NjMyLDExNSw2NTMzMSw4MywxMTk4MjYsODMsMTE5ODc4LDgzLDExOTkzMCw4MywxMTk5ODIsODMsMTIwMDM0LDgzLDEyMDA4Niw4MywxMjAxMzgsODMsMTIwMTkwLDgzLDEyMDI0Miw4MywxMjAyOTQsODMsMTIwMzQ2LDgzLDEyMDM5OCw4MywxMjA0NTAsODMsMTAyOSw4MywxMzU5LDgzLDUwNzcsODMsNTA4Miw4Myw0MjIxMCw4Myw5NDAxMCw4Myw2NjE5OCw4Myw2NjU5Miw4MywxMTk4NTMsMTE2LDExOTkwNSwxMTYsMTE5OTU3LDExNiwxMjAwMDksMTE2LDEyMDA2MSwxMTYsMTIwMTEzLDExNiwxMjAxNjUsMTE2LDEyMDIxNywxMTYsMTIwMjY5LDExNiwxMjAzMjEsMTE2LDEyMDM3MywxMTYsMTIwNDI1LDExNiwxMjA0NzcsMTE2LDg4NjgsODQsMTAyMDEsODQsMTI4ODcyLDg0LDY1MzMyLDg0LDExOTgyNyw4NCwxMTk4NzksODQsMTE5OTMxLDg0LDExOTk4Myw4NCwxMjAwMzUsODQsMTIwMDg3LDg0LDEyMDEzOSw4NCwxMjAxOTEsODQsMTIwMjQzLDg0LDEyMDI5NSw4NCwxMjAzNDcsODQsMTIwMzk5LDg0LDEyMDQ1MSw4NCw5MzIsODQsMTIwNTA3LDg0LDEyMDU2NSw4NCwxMjA2MjMsODQsMTIwNjgxLDg0LDEyMDczOSw4NCwxMTQzMCw4NCw1MDI2LDg0LDQyMTk2LDg0LDkzOTYyLDg0LDcxODY4LDg0LDY2MTk5LDg0LDY2MjI1LDg0LDY2MzI1LDg0LDExOTg1NCwxMTcsMTE5OTA2LDExNywxMTk5NTgsMTE3LDEyMDAxMCwxMTcsMTIwMDYyLDExNywxMjAxMTQsMTE3LDEyMDE2NiwxMTcsMTIwMjE4LDExNywxMjAyNzAsMTE3LDEyMDMyMiwxMTcsMTIwMzc0LDExNywxMjA0MjYsMTE3LDEyMDQ3OCwxMTcsNDI5MTEsMTE3LDc0NTIsMTE3LDQzODU0LDExNyw0Mzg1OCwxMTcsNjUxLDExNyw5NjUsMTE3LDEyMDUzNCwxMTcsMTIwNTkyLDExNywxMjA2NTAsMTE3LDEyMDcwOCwxMTcsMTIwNzY2LDExNywxNDA1LDExNyw2NjgwNiwxMTcsNzE4OTYsMTE3LDg3NDYsODUsODg5OSw4NSwxMTk4MjgsODUsMTE5ODgwLDg1LDExOTkzMiw4NSwxMTk5ODQsODUsMTIwMDM2LDg1LDEyMDA4OCw4NSwxMjAxNDAsODUsMTIwMTkyLDg1LDEyMDI0NCw4NSwxMjAyOTYsODUsMTIwMzQ4LDg1LDEyMDQwMCw4NSwxMjA0NTIsODUsMTM1Nyw4NSw0NjA4LDg1LDY2NzY2LDg1LDUxOTYsODUsNDIyMjgsODUsOTQwMTgsODUsNzE4NjQsODUsODc0NCwxMTgsODg5NywxMTgsNjUzNjYsMTE4LDg1NjQsMTE4LDExOTg1NSwxMTgsMTE5OTA3LDExOCwxMTk5NTksMTE4LDEyMDAxMSwxMTgsMTIwMDYzLDExOCwxMjAxMTUsMTE4LDEyMDE2NywxMTgsMTIwMjE5LDExOCwxMjAyNzEsMTE4LDEyMDMyMywxMTgsMTIwMzc1LDExOCwxMjA0MjcsMTE4LDEyMDQ3OSwxMTgsNzQ1NiwxMTgsOTU3LDExOCwxMjA1MjYsMTE4LDEyMDU4NCwxMTgsMTIwNjQyLDExOCwxMjA3MDAsMTE4LDEyMDc1OCwxMTgsMTE0MSwxMTgsMTQ5NiwxMTgsNzE0MzAsMTE4LDQzOTQ1LDExOCw3MTg3MiwxMTgsMTE5MzA5LDg2LDE2MzksODYsMTc4Myw4Niw4NTQ4LDg2LDExOTgyOSw4NiwxMTk4ODEsODYsMTE5OTMzLDg2LDExOTk4NSw4NiwxMjAwMzcsODYsMTIwMDg5LDg2LDEyMDE0MSw4NiwxMjAxOTMsODYsMTIwMjQ1LDg2LDEyMDI5Nyw4NiwxMjAzNDksODYsMTIwNDAxLDg2LDEyMDQ1Myw4NiwxMTQwLDg2LDExNTc2LDg2LDUwODEsODYsNTE2Nyw4Niw0MjcxOSw4Niw0MjIxNCw4Niw5Mzk2MCw4Niw3MTg0MCw4Niw2Njg0NSw4Niw2MjMsMTE5LDExOTg1NiwxMTksMTE5OTA4LDExOSwxMTk5NjAsMTE5LDEyMDAxMiwxMTksMTIwMDY0LDExOSwxMjAxMTYsMTE5LDEyMDE2OCwxMTksMTIwMjIwLDExOSwxMjAyNzIsMTE5LDEyMDMyNCwxMTksMTIwMzc2LDExOSwxMjA0MjgsMTE5LDEyMDQ4MCwxMTksNzQ1NywxMTksMTEyMSwxMTksMTMwOSwxMTksMTM3NywxMTksNzE0MzQsMTE5LDcxNDM4LDExOSw3MTQzOSwxMTksNDM5MDcsMTE5LDcxOTE5LDg3LDcxOTEwLDg3LDExOTgzMCw4NywxMTk4ODIsODcsMTE5OTM0LDg3LDExOTk4Niw4NywxMjAwMzgsODcsMTIwMDkwLDg3LDEyMDE0Miw4NywxMjAxOTQsODcsMTIwMjQ2LDg3LDEyMDI5OCw4NywxMjAzNTAsODcsMTIwNDAyLDg3LDEyMDQ1NCw4NywxMzA4LDg3LDUwNDMsODcsNTA3Niw4Nyw0MjIxOCw4Nyw1NzQyLDEyMCwxMDUzOSwxMjAsMTA1NDAsMTIwLDEwNzk5LDEyMCw2NTM2OCwxMjAsODU2OSwxMjAsMTE5ODU3LDEyMCwxMTk5MDksMTIwLDExOTk2MSwxMjAsMTIwMDEzLDEyMCwxMjAwNjUsMTIwLDEyMDExNywxMjAsMTIwMTY5LDEyMCwxMjAyMjEsMTIwLDEyMDI3MywxMjAsMTIwMzI1LDEyMCwxMjAzNzcsMTIwLDEyMDQyOSwxMjAsMTIwNDgxLDEyMCw1NDQxLDEyMCw1NTAxLDEyMCw1NzQxLDg4LDk1ODcsODgsNjYzMzgsODgsNzE5MTYsODgsNjUzMzYsODgsODU1Myw4OCwxMTk4MzEsODgsMTE5ODgzLDg4LDExOTkzNSw4OCwxMTk5ODcsODgsMTIwMDM5LDg4LDEyMDA5MSw4OCwxMjAxNDMsODgsMTIwMTk1LDg4LDEyMDI0Nyw4OCwxMjAyOTksODgsMTIwMzUxLDg4LDEyMDQwMyw4OCwxMjA0NTUsODgsNDI5MzEsODgsOTM1LDg4LDEyMDUxMCw4OCwxMjA1NjgsODgsMTIwNjI2LDg4LDEyMDY4NCw4OCwxMjA3NDIsODgsMTE0MzYsODgsMTE2MTMsODgsNTgxNSw4OCw0MjIxOSw4OCw2NjE5Miw4OCw2NjIyOCw4OCw2NjMyNyw4OCw2Njg1NSw4OCw2MTEsMTIxLDc1NjQsMTIxLDY1MzY5LDEyMSwxMTk4NTgsMTIxLDExOTkxMCwxMjEsMTE5OTYyLDEyMSwxMjAwMTQsMTIxLDEyMDA2NiwxMjEsMTIwMTE4LDEyMSwxMjAxNzAsMTIxLDEyMDIyMiwxMjEsMTIwMjc0LDEyMSwxMjAzMjYsMTIxLDEyMDM3OCwxMjEsMTIwNDMwLDEyMSwxMjA0ODIsMTIxLDY1NSwxMjEsNzkzNSwxMjEsNDM4NjYsMTIxLDk0NywxMjEsODUwOSwxMjEsMTIwNTE2LDEyMSwxMjA1NzQsMTIxLDEyMDYzMiwxMjEsMTIwNjkwLDEyMSwxMjA3NDgsMTIxLDExOTksMTIxLDQzMjcsMTIxLDcxOTAwLDEyMSw2NTMzNyw4OSwxMTk4MzIsODksMTE5ODg0LDg5LDExOTkzNiw4OSwxMTk5ODgsODksMTIwMDQwLDg5LDEyMDA5Miw4OSwxMjAxNDQsODksMTIwMTk2LDg5LDEyMDI0OCw4OSwxMjAzMDAsODksMTIwMzUyLDg5LDEyMDQwNCw4OSwxMjA0NTYsODksOTMzLDg5LDk3OCw4OSwxMjA1MDgsODksMTIwNTY2LDg5LDEyMDYyNCw4OSwxMjA2ODIsODksMTIwNzQwLDg5LDExNDMyLDg5LDExOTgsODksNTAzMyw4OSw1MDUzLDg5LDQyMjIwLDg5LDk0MDE5LDg5LDcxODQ0LDg5LDY2MjI2LDg5LDExOTg1OSwxMjIsMTE5OTExLDEyMiwxMTk5NjMsMTIyLDEyMDAxNSwxMjIsMTIwMDY3LDEyMiwxMjAxMTksMTIyLDEyMDE3MSwxMjIsMTIwMjIzLDEyMiwxMjAyNzUsMTIyLDEyMDMyNywxMjIsMTIwMzc5LDEyMiwxMjA0MzEsMTIyLDEyMDQ4MywxMjIsNzQ1OCwxMjIsNDM5MjMsMTIyLDcxODc2LDEyMiw2NjI5Myw5MCw3MTkwOSw5MCw2NTMzOCw5MCw4NDg0LDkwLDg0ODgsOTAsMTE5ODMzLDkwLDExOTg4NSw5MCwxMTk5MzcsOTAsMTE5OTg5LDkwLDEyMDA0MSw5MCwxMjAxOTcsOTAsMTIwMjQ5LDkwLDEyMDMwMSw5MCwxMjAzNTMsOTAsMTIwNDA1LDkwLDEyMDQ1Nyw5MCw5MTgsOTAsMTIwNDkzLDkwLDEyMDU1MSw5MCwxMjA2MDksOTAsMTIwNjY3LDkwLDEyMDcyNSw5MCw1MDU5LDkwLDQyMjA0LDkwLDcxODQ5LDkwLDY1MjgyLDM0LDY1Mjg0LDM2LDY1Mjg1LDM3LDY1Mjg2LDM4LDY1MjkwLDQyLDY1MjkxLDQzLDY1Mjk0LDQ2LDY1Mjk1LDQ3LDY1Mjk2LDQ4LDY1Mjk3LDQ5LDY1Mjk4LDUwLDY1Mjk5LDUxLDY1MzAwLDUyLDY1MzAxLDUzLDY1MzAyLDU0LDY1MzAzLDU1LDY1MzA0LDU2LDY1MzA1LDU3LDY1MzA4LDYwLDY1MzA5LDYxLDY1MzEwLDYyLDY1MzEyLDY0LDY1MzE2LDY4LDY1MzE4LDcwLDY1MzE5LDcxLDY1MzI0LDc2LDY1MzI5LDgxLDY1MzMwLDgyLDY1MzMzLDg1LDY1MzM0LDg2LDY1MzM1LDg3LDY1MzQzLDk1LDY1MzQ2LDk4LDY1MzQ4LDEwMCw2NTM1MCwxMDIsNjUzNTUsMTA3LDY1MzU3LDEwOSw2NTM1OCwxMTAsNjUzNjEsMTEzLDY1MzYyLDExNCw2NTM2NCwxMTYsNjUzNjUsMTE3LDY1MzY3LDExOSw2NTM3MCwxMjIsNjUzNzEsMTIzLDY1MzczLDEyNSwxMTk4NDYsMTA5XSwiX2RlZmF1bHQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiY3MiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImRlIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJlcyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJmciI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJpdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiamEiOls4MjExLDQ1LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI5Miw0NCw2NTMwNyw1OV0sImtvIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwbCI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwdC1CUiI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJxcHMtcGxvYyI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJydSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMzA1LDEwNSw5MjEsNzMsMTAwOSwxMTIsMjE1LDEyMCw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInRyIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInpoLWhhbnMiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODgsNDAsNjUyODksNDFdLCJ6aC1oYW50IjpbODIxMSw0NSw2NTM3NCwxMjYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MzA3LDU5XX0nKSkpLGVlLmNhY2hlPW5ldyBjbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZuPWUsdGhpcy5sYXN0Q2FjaGU9dm9pZCAwLHRoaXMubGFzdEFyZ0tleT12b2lkIDB9Z2V0KGUpe2NvbnN0IHQ9SlNPTi5zdHJpbmdpZnkoZSk7cmV0dXJuIHRoaXMubGFzdEFyZ0tleSE9PXQmJih0aGlzLmxhc3RBcmdLZXk9dCx0aGlzLmxhc3RDYWNoZT10aGlzLmZuKGUpKSx0aGlzLmxhc3RDYWNoZX19KChlPT57ZnVuY3Rpb24gdChlKXtjb25zdCB0PW5ldyBNYXA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKz0yKXQuc2V0KGVbbl0sZVtuKzFdKTtyZXR1cm4gdH1mdW5jdGlvbiBuKGUsdCl7aWYoIWUpcmV0dXJuIHQ7Y29uc3Qgbj1uZXcgTWFwO2Zvcihjb25zdFtyLGldb2YgZSl0LmhhcyhyKSYmbi5zZXQocixpKTtyZXR1cm4gbn1jb25zdCByPUouYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS52YWx1ZTtsZXQgaSxvPWUuZmlsdGVyKChlPT4hZS5zdGFydHNXaXRoKCJfIikmJmUgaW4gcikpOzA9PT1vLmxlbmd0aCYmKG89WyJfZGVmYXVsdCJdKTtmb3IoY29uc3QgZSBvZiBvKXtpPW4oaSx0KHJbZV0pKX1jb25zdCBzPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1uZXcgTWFwKGUpO2Zvcihjb25zdFtlLHJdb2YgdCluLnNldChlLHIpO3JldHVybiBufSh0KHIuX2NvbW1vbiksaSk7cmV0dXJuIG5ldyBlZShzKX0pKSxlZS5fbG9jYWxlcz1uZXcgRygoKCk9Pk9iamVjdC5rZXlzKGVlLmFtYmlndW91c0NoYXJhY3RlckRhdGEudmFsdWUpLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpKSkpKTtjbGFzcyB0ZXtzdGF0aWMgZ2V0UmF3RGF0YSgpe3JldHVybiBKU09OLnBhcnNlKCJbOSwxMCwxMSwxMiwxMywzMiwxMjcsMTYwLDE3Myw4NDcsMTU2NCw0NDQ3LDQ0NDgsNjA2OCw2MDY5LDYxNTUsNjE1Niw2MTU3LDYxNTgsNzM1NSw3MzU2LDgxOTIsODE5Myw4MTk0LDgxOTUsODE5Niw4MTk3LDgxOTgsODE5OSw4MjAwLDgyMDEsODIwMiw4MjAzLDgyMDQsODIwNSw4MjA2LDgyMDcsODIzNCw4MjM1LDgyMzYsODIzNyw4MjM4LDgyMzksODI4Nyw4Mjg4LDgyODksODI5MCw4MjkxLDgyOTIsODI5Myw4Mjk0LDgyOTUsODI5Niw4Mjk3LDgyOTgsODI5OSw4MzAwLDgzMDEsODMwMiw4MzAzLDEwMjQwLDEyMjg4LDEyNjQ0LDY1MDI0LDY1MDI1LDY1MDI2LDY1MDI3LDY1MDI4LDY1MDI5LDY1MDMwLDY1MDMxLDY1MDMyLDY1MDMzLDY1MDM0LDY1MDM1LDY1MDM2LDY1MDM3LDY1MDM4LDY1MDM5LDY1Mjc5LDY1NDQwLDY1NTIwLDY1NTIxLDY1NTIyLDY1NTIzLDY1NTI0LDY1NTI1LDY1NTI2LDY1NTI3LDY1NTI4LDY1NTMyLDc4ODQ0LDExOTE1NSwxMTkxNTYsMTE5MTU3LDExOTE1OCwxMTkxNTksMTE5MTYwLDExOTE2MSwxMTkxNjIsOTE3NTA0LDkxNzUwNSw5MTc1MDYsOTE3NTA3LDkxNzUwOCw5MTc1MDksOTE3NTEwLDkxNzUxMSw5MTc1MTIsOTE3NTEzLDkxNzUxNCw5MTc1MTUsOTE3NTE2LDkxNzUxNyw5MTc1MTgsOTE3NTE5LDkxNzUyMCw5MTc1MjEsOTE3NTIyLDkxNzUyMyw5MTc1MjQsOTE3NTI1LDkxNzUyNiw5MTc1MjcsOTE3NTI4LDkxNzUyOSw5MTc1MzAsOTE3NTMxLDkxNzUzMiw5MTc1MzMsOTE3NTM0LDkxNzUzNSw5MTc1MzYsOTE3NTM3LDkxNzUzOCw5MTc1MzksOTE3NTQwLDkxNzU0MSw5MTc1NDIsOTE3NTQzLDkxNzU0NCw5MTc1NDUsOTE3NTQ2LDkxNzU0Nyw5MTc1NDgsOTE3NTQ5LDkxNzU1MCw5MTc1NTEsOTE3NTUyLDkxNzU1Myw5MTc1NTQsOTE3NTU1LDkxNzU1Niw5MTc1NTcsOTE3NTU4LDkxNzU1OSw5MTc1NjAsOTE3NTYxLDkxNzU2Miw5MTc1NjMsOTE3NTY0LDkxNzU2NSw5MTc1NjYsOTE3NTY3LDkxNzU2OCw5MTc1NjksOTE3NTcwLDkxNzU3MSw5MTc1NzIsOTE3NTczLDkxNzU3NCw5MTc1NzUsOTE3NTc2LDkxNzU3Nyw5MTc1NzgsOTE3NTc5LDkxNzU4MCw5MTc1ODEsOTE3NTgyLDkxNzU4Myw5MTc1ODQsOTE3NTg1LDkxNzU4Niw5MTc1ODcsOTE3NTg4LDkxNzU4OSw5MTc1OTAsOTE3NTkxLDkxNzU5Miw5MTc1OTMsOTE3NTk0LDkxNzU5NSw5MTc1OTYsOTE3NTk3LDkxNzU5OCw5MTc1OTksOTE3NjAwLDkxNzYwMSw5MTc2MDIsOTE3NjAzLDkxNzYwNCw5MTc2MDUsOTE3NjA2LDkxNzYwNyw5MTc2MDgsOTE3NjA5LDkxNzYxMCw5MTc2MTEsOTE3NjEyLDkxNzYxMyw5MTc2MTQsOTE3NjE1LDkxNzYxNiw5MTc2MTcsOTE3NjE4LDkxNzYxOSw5MTc2MjAsOTE3NjIxLDkxNzYyMiw5MTc2MjMsOTE3NjI0LDkxNzYyNSw5MTc2MjYsOTE3NjI3LDkxNzYyOCw5MTc2MjksOTE3NjMwLDkxNzYzMSw5MTc3NjAsOTE3NzYxLDkxNzc2Miw5MTc3NjMsOTE3NzY0LDkxNzc2NSw5MTc3NjYsOTE3NzY3LDkxNzc2OCw5MTc3NjksOTE3NzcwLDkxNzc3MSw5MTc3NzIsOTE3NzczLDkxNzc3NCw5MTc3NzUsOTE3Nzc2LDkxNzc3Nyw5MTc3NzgsOTE3Nzc5LDkxNzc4MCw5MTc3ODEsOTE3NzgyLDkxNzc4Myw5MTc3ODQsOTE3Nzg1LDkxNzc4Niw5MTc3ODcsOTE3Nzg4LDkxNzc4OSw5MTc3OTAsOTE3NzkxLDkxNzc5Miw5MTc3OTMsOTE3Nzk0LDkxNzc5NSw5MTc3OTYsOTE3Nzk3LDkxNzc5OCw5MTc3OTksOTE3ODAwLDkxNzgwMSw5MTc4MDIsOTE3ODAzLDkxNzgwNCw5MTc4MDUsOTE3ODA2LDkxNzgwNyw5MTc4MDgsOTE3ODA5LDkxNzgxMCw5MTc4MTEsOTE3ODEyLDkxNzgxMyw5MTc4MTQsOTE3ODE1LDkxNzgxNiw5MTc4MTcsOTE3ODE4LDkxNzgxOSw5MTc4MjAsOTE3ODIxLDkxNzgyMiw5MTc4MjMsOTE3ODI0LDkxNzgyNSw5MTc4MjYsOTE3ODI3LDkxNzgyOCw5MTc4MjksOTE3ODMwLDkxNzgzMSw5MTc4MzIsOTE3ODMzLDkxNzgzNCw5MTc4MzUsOTE3ODM2LDkxNzgzNyw5MTc4MzgsOTE3ODM5LDkxNzg0MCw5MTc4NDEsOTE3ODQyLDkxNzg0Myw5MTc4NDQsOTE3ODQ1LDkxNzg0Niw5MTc4NDcsOTE3ODQ4LDkxNzg0OSw5MTc4NTAsOTE3ODUxLDkxNzg1Miw5MTc4NTMsOTE3ODU0LDkxNzg1NSw5MTc4NTYsOTE3ODU3LDkxNzg1OCw5MTc4NTksOTE3ODYwLDkxNzg2MSw5MTc4NjIsOTE3ODYzLDkxNzg2NCw5MTc4NjUsOTE3ODY2LDkxNzg2Nyw5MTc4NjgsOTE3ODY5LDkxNzg3MCw5MTc4NzEsOTE3ODcyLDkxNzg3Myw5MTc4NzQsOTE3ODc1LDkxNzg3Niw5MTc4NzcsOTE3ODc4LDkxNzg3OSw5MTc4ODAsOTE3ODgxLDkxNzg4Miw5MTc4ODMsOTE3ODg0LDkxNzg4NSw5MTc4ODYsOTE3ODg3LDkxNzg4OCw5MTc4ODksOTE3ODkwLDkxNzg5MSw5MTc4OTIsOTE3ODkzLDkxNzg5NCw5MTc4OTUsOTE3ODk2LDkxNzg5Nyw5MTc4OTgsOTE3ODk5LDkxNzkwMCw5MTc5MDEsOTE3OTAyLDkxNzkwMyw5MTc5MDQsOTE3OTA1LDkxNzkwNiw5MTc5MDcsOTE3OTA4LDkxNzkwOSw5MTc5MTAsOTE3OTExLDkxNzkxMiw5MTc5MTMsOTE3OTE0LDkxNzkxNSw5MTc5MTYsOTE3OTE3LDkxNzkxOCw5MTc5MTksOTE3OTIwLDkxNzkyMSw5MTc5MjIsOTE3OTIzLDkxNzkyNCw5MTc5MjUsOTE3OTI2LDkxNzkyNyw5MTc5MjgsOTE3OTI5LDkxNzkzMCw5MTc5MzEsOTE3OTMyLDkxNzkzMyw5MTc5MzQsOTE3OTM1LDkxNzkzNiw5MTc5MzcsOTE3OTM4LDkxNzkzOSw5MTc5NDAsOTE3OTQxLDkxNzk0Miw5MTc5NDMsOTE3OTQ0LDkxNzk0NSw5MTc5NDYsOTE3OTQ3LDkxNzk0OCw5MTc5NDksOTE3OTUwLDkxNzk1MSw5MTc5NTIsOTE3OTUzLDkxNzk1NCw5MTc5NTUsOTE3OTU2LDkxNzk1Nyw5MTc5NTgsOTE3OTU5LDkxNzk2MCw5MTc5NjEsOTE3OTYyLDkxNzk2Myw5MTc5NjQsOTE3OTY1LDkxNzk2Niw5MTc5NjcsOTE3OTY4LDkxNzk2OSw5MTc5NzAsOTE3OTcxLDkxNzk3Miw5MTc5NzMsOTE3OTc0LDkxNzk3NSw5MTc5NzYsOTE3OTc3LDkxNzk3OCw5MTc5NzksOTE3OTgwLDkxNzk4MSw5MTc5ODIsOTE3OTgzLDkxNzk4NCw5MTc5ODUsOTE3OTg2LDkxNzk4Nyw5MTc5ODgsOTE3OTg5LDkxNzk5MCw5MTc5OTEsOTE3OTkyLDkxNzk5Myw5MTc5OTQsOTE3OTk1LDkxNzk5Niw5MTc5OTcsOTE3OTk4LDkxNzk5OV0iKX1zdGF0aWMgZ2V0RGF0YSgpe3JldHVybiB0aGlzLl9kYXRhfHwodGhpcy5fZGF0YT1uZXcgU2V0KHRlLmdldFJhd0RhdGEoKSkpLHRoaXMuX2RhdGF9c3RhdGljIGlzSW52aXNpYmxlQ2hhcmFjdGVyKGUpe3JldHVybiB0ZS5nZXREYXRhKCkuaGFzKGUpfXN0YXRpYyBnZXQgY29kZVBvaW50cygpe3JldHVybiB0ZS5nZXREYXRhKCl9fXRlLl9kYXRhPXZvaWQgMDtjbGFzcyBuZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLm1ldGhvZD1uLHRoaXMuYXJncz1yLHRoaXMudHlwZT0wfX1jbGFzcyByZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5zZXE9dCx0aGlzLnJlcz1uLHRoaXMuZXJyPXIsdGhpcy50eXBlPTF9fWNsYXNzIGlle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnROYW1lPW4sdGhpcy5hcmc9cix0aGlzLnR5cGU9Mn19Y2xhc3Mgb2V7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnQ9bix0aGlzLnR5cGU9M319Y2xhc3Mgc2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLnR5cGU9NH19Y2xhc3MgYWV7Y29uc3RydWN0b3IoZSl7dGhpcy5fd29ya2VySWQ9LTEsdGhpcy5faGFuZGxlcj1lLHRoaXMuX2xhc3RTZW50UmVxPTAsdGhpcy5fcGVuZGluZ1JlcGxpZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9wZW5kaW5nRW1pdHRlcnM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nRXZlbnRzPW5ldyBNYXB9c2V0V29ya2VySWQoZSl7dGhpcy5fd29ya2VySWQ9ZX1zZW5kTWVzc2FnZShlLHQpe2NvbnN0IG49U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpO3JldHVybiBuZXcgUHJvbWlzZSgoKHIsaSk9Pnt0aGlzLl9wZW5kaW5nUmVwbGllc1tuXT17cmVzb2x2ZTpyLHJlamVjdDppfSx0aGlzLl9zZW5kKG5ldyBuZSh0aGlzLl93b3JrZXJJZCxuLGUsdCkpfSkpfWxpc3RlbihlLHQpe2xldCBuPW51bGw7Y29uc3Qgcj1uZXcgVSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjooKT0+e249U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpLHRoaXMuX3BlbmRpbmdFbWl0dGVycy5zZXQobixyKSx0aGlzLl9zZW5kKG5ldyBpZSh0aGlzLl93b3JrZXJJZCxuLGUsdCkpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjooKT0+e3RoaXMuX3BlbmRpbmdFbWl0dGVycy5kZWxldGUobiksdGhpcy5fc2VuZChuZXcgc2UodGhpcy5fd29ya2VySWQsbikpLG49bnVsbH19KTtyZXR1cm4gci5ldmVudH1oYW5kbGVNZXNzYWdlKGUpe2UmJmUudnNXb3JrZXImJigtMSE9PXRoaXMuX3dvcmtlcklkJiZlLnZzV29ya2VyIT09dGhpcy5fd29ya2VySWR8fHRoaXMuX2hhbmRsZU1lc3NhZ2UoZSkpfV9oYW5kbGVNZXNzYWdlKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5faGFuZGxlUmVwbHlNZXNzYWdlKGUpO2Nhc2UgMDpyZXR1cm4gdGhpcy5faGFuZGxlUmVxdWVzdE1lc3NhZ2UoZSk7Y2FzZSAyOnJldHVybiB0aGlzLl9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSk7Y2FzZSAzOnJldHVybiB0aGlzLl9oYW5kbGVFdmVudE1lc3NhZ2UoZSk7Y2FzZSA0OnJldHVybiB0aGlzLl9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZShlKX19X2hhbmRsZVJlcGx5TWVzc2FnZShlKXtpZighdGhpcy5fcGVuZGluZ1JlcGxpZXNbZS5zZXFdKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiR290IHJlcGx5IHRvIHVua25vd24gc2VxIik7Y29uc3QgdD10aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV07aWYoZGVsZXRlIHRoaXMuX3BlbmRpbmdSZXBsaWVzW2Uuc2VxXSxlLmVycil7bGV0IG49ZS5lcnI7cmV0dXJuIGUuZXJyLiRpc0Vycm9yJiYobj1uZXcgRXJyb3Isbi5uYW1lPWUuZXJyLm5hbWUsbi5tZXNzYWdlPWUuZXJyLm1lc3NhZ2Usbi5zdGFjaz1lLmVyci5zdGFjayksdm9pZCB0LnJlamVjdChuKX10LnJlc29sdmUoZS5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKXtjb25zdCB0PWUucmVxO3RoaXMuX2hhbmRsZXIuaGFuZGxlTWVzc2FnZShlLm1ldGhvZCxlLmFyZ3MpLnRoZW4oKGU9Pnt0aGlzLl9zZW5kKG5ldyByZSh0aGlzLl93b3JrZXJJZCx0LGUsdm9pZCAwKSl9KSwoZT0+e2UuZGV0YWlsIGluc3RhbmNlb2YgRXJyb3ImJihlLmRldGFpbD1uKGUuZGV0YWlsKSksdGhpcy5fc2VuZChuZXcgcmUodGhpcy5fd29ya2VySWQsdCx2b2lkIDAsbihlKSkpfSkpfV9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSl7Y29uc3QgdD1lLnJlcSxuPXRoaXMuX2hhbmRsZXIuaGFuZGxlRXZlbnQoZS5ldmVudE5hbWUsZS5hcmcpKChlPT57dGhpcy5fc2VuZChuZXcgb2UodGhpcy5fd29ya2VySWQsdCxlKSl9KSk7dGhpcy5fcGVuZGluZ0V2ZW50cy5zZXQodCxuKX1faGFuZGxlRXZlbnRNZXNzYWdlKGUpe3RoaXMuX3BlbmRpbmdFbWl0dGVycy5oYXMoZS5yZXEpP3RoaXMuX3BlbmRpbmdFbWl0dGVycy5nZXQoZS5yZXEpLmZpcmUoZS5ldmVudCk6Y29uc29sZS53YXJuKCJHb3QgZXZlbnQgZm9yIHVua25vd24gcmVxIil9X2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpe3RoaXMuX3BlbmRpbmdFdmVudHMuaGFzKGUucmVxKT8odGhpcy5fcGVuZGluZ0V2ZW50cy5nZXQoZS5yZXEpLmRpc3Bvc2UoKSx0aGlzLl9wZW5kaW5nRXZlbnRzLmRlbGV0ZShlLnJlcSkpOmNvbnNvbGUud2FybigiR290IHVuc3Vic2NyaWJlIGZvciB1bmtub3duIHJlcSIpfV9zZW5kKGUpe2NvbnN0IHQ9W107aWYoMD09PWUudHlwZSlmb3IobGV0IG49MDtuPGUuYXJncy5sZW5ndGg7bisrKWUuYXJnc1tuXWluc3RhbmNlb2YgQXJyYXlCdWZmZXImJnQucHVzaChlLmFyZ3Nbbl0pO2Vsc2UgMT09PWUudHlwZSYmZS5yZXMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdC5wdXNoKGUucmVzKTt0aGlzLl9oYW5kbGVyLnNlbmRNZXNzYWdlKGUsdCl9fWZ1bmN0aW9uIGxlKGUpe3JldHVybiJvIj09PWVbMF0mJiJuIj09PWVbMV0mJlgoZS5jaGFyQ29kZUF0KDIpKX1mdW5jdGlvbiB1ZShlKXtyZXR1cm4vXm9uRHluYW1pYy8udGVzdChlKSYmWChlLmNoYXJDb2RlQXQoOSkpfWNsYXNzIGNle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5PXQsdGhpcy5fcmVxdWVzdEhhbmRsZXI9bnVsbCx0aGlzLl9wcm90b2NvbD1uZXcgYWUoe3NlbmRNZXNzYWdlOih0LG4pPT57ZSh0LG4pfSxoYW5kbGVNZXNzYWdlOihlLHQpPT50aGlzLl9oYW5kbGVNZXNzYWdlKGUsdCksaGFuZGxlRXZlbnQ6KGUsdCk9PnRoaXMuX2hhbmRsZUV2ZW50KGUsdCl9KX1vbm1lc3NhZ2UoZSl7dGhpcy5fcHJvdG9jb2wuaGFuZGxlTWVzc2FnZShlKX1faGFuZGxlTWVzc2FnZShlLHQpe2lmKCIkaW5pdGlhbGl6ZSI9PT1lKXJldHVybiB0aGlzLmluaXRpYWxpemUodFswXSx0WzFdLHRbMl0sdFszXSk7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrZSkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmFwcGx5KHRoaXMuX3JlcXVlc3RIYW5kbGVyLHQpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fV9oYW5kbGVFdmVudChlLHQpe2lmKCF0aGlzLl9yZXF1ZXN0SGFuZGxlcil0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIiKTtpZih1ZShlKSl7Y29uc3Qgbj10aGlzLl9yZXF1ZXN0SGFuZGxlcltlXS5jYWxsKHRoaXMuX3JlcXVlc3RIYW5kbGVyLHQpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBkeW5hbWljIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiBufWlmKGxlKGUpKXtjb25zdCB0PXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBldmVudCAke2V9IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gdH10aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBldmVudCBuYW1lICR7ZX1gKX1pbml0aWFsaXplKGUsdCxuLHIpe3RoaXMuX3Byb3RvY29sLnNldFdvcmtlcklkKGUpO2NvbnN0IGk9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9ZT0+ZnVuY3Rpb24oKXtjb25zdCBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gdChlLG4pfSxpPWU9PmZ1bmN0aW9uKHQpe3JldHVybiBuKGUsdCl9LG89e307Zm9yKGNvbnN0IHQgb2YgZSl1ZSh0KT9vW3RdPWkodCk6bGUodCk/b1t0XT1uKHQsdm9pZCAwKTpvW3RdPXIodCk7cmV0dXJuIG99KHIsKChlLHQpPT50aGlzLl9wcm90b2NvbC5zZW5kTWVzc2FnZShlLHQpKSwoKGUsdCk9PnRoaXMuX3Byb3RvY29sLmxpc3RlbihlLHQpKSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeT8odGhpcy5fcmVxdWVzdEhhbmRsZXI9dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5KGkpLFByb21pc2UucmVzb2x2ZSh6KHRoaXMuX3JlcXVlc3RIYW5kbGVyKSkpOih0JiYodm9pZCAwIT09dC5iYXNlVXJsJiZkZWxldGUgdC5iYXNlVXJsLHZvaWQgMCE9PXQucGF0aHMmJnZvaWQgMCE9PXQucGF0aHMudnMmJmRlbGV0ZSB0LnBhdGhzLnZzLHZvaWQgMCE9PXR5cGVvZiB0LnRydXN0ZWRUeXBlc1BvbGljeSYmZGVsZXRlIHQudHJ1c3RlZFR5cGVzUG9saWN5LHQuY2F0Y2hFcnJvcj0hMCxnbG9iYWxUaGlzLnJlcXVpcmUuY29uZmlnKHQpKSxuZXcgUHJvbWlzZSgoKGUsdCk9PnsoMCxnbG9iYWxUaGlzLnJlcXVpcmUpKFtuXSwobj0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyPW4uY3JlYXRlKGkpLHRoaXMuX3JlcXVlc3RIYW5kbGVyP2Uoeih0aGlzLl9yZXF1ZXN0SGFuZGxlcikpOnQobmV3IEVycm9yKCJObyBSZXF1ZXN0SGFuZGxlciEiKSl9KSx0KX0pKSl9fWNsYXNzIGhle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMub3JpZ2luYWxTdGFydD1lLHRoaXMub3JpZ2luYWxMZW5ndGg9dCx0aGlzLm1vZGlmaWVkU3RhcnQ9bix0aGlzLm1vZGlmaWVkTGVuZ3RoPXJ9Z2V0T3JpZ2luYWxFbmQoKXtyZXR1cm4gdGhpcy5vcmlnaW5hbFN0YXJ0K3RoaXMub3JpZ2luYWxMZW5ndGh9Z2V0TW9kaWZpZWRFbmQoKXtyZXR1cm4gdGhpcy5tb2RpZmllZFN0YXJ0K3RoaXMubW9kaWZpZWRMZW5ndGh9fWZ1bmN0aW9uIGRlKGUsdCl7cmV0dXJuKHQ8PDUpLXQrZXwwfWZ1bmN0aW9uIGZlKGUsdCl7dD1kZSgxNDk0MTcsdCk7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXQ9ZGUoZS5jaGFyQ29kZUF0KG4pLHQpO3JldHVybiB0fWNsYXNzIG1le2NvbnN0cnVjdG9yKGUpe3RoaXMuc291cmNlPWV9Z2V0RWxlbWVudHMoKXtjb25zdCBlPXRoaXMuc291cmNlLHQ9bmV3IEludDMyQXJyYXkoZS5sZW5ndGgpO2ZvcihsZXQgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0W25dPWUuY2hhckNvZGVBdChuKTtyZXR1cm4gdH19ZnVuY3Rpb24gZ2UoZSx0LG4pe3JldHVybiBuZXcgeWUobmV3IG1lKGUpLG5ldyBtZSh0KSkuQ29tcHV0ZURpZmYobikuY2hhbmdlc31jbGFzcyBwZXtzdGF0aWMgQXNzZXJ0KGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKHQpfX1jbGFzcyB2ZXtzdGF0aWMgQ29weShlLHQsbixyLGkpe2ZvcihsZXQgbz0wO288aTtvKyspbltyK29dPWVbdCtvXX1zdGF0aWMgQ29weTIoZSx0LG4scixpKXtmb3IobGV0IG89MDtvPGk7bysrKW5bcitvXT1lW3Qrb119fWNsYXNzIGJle2NvbnN0cnVjdG9yKCl7dGhpcy5tX2NoYW5nZXM9W10sdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0LHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MH1NYXJrTmV4dENoYW5nZSgpeyh0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5tX2NoYW5nZXMucHVzaChuZXcgaGUodGhpcy5tX29yaWdpbmFsU3RhcnQsdGhpcy5tX29yaWdpbmFsQ291bnQsdGhpcy5tX21vZGlmaWVkU3RhcnQsdGhpcy5tX21vZGlmaWVkQ291bnQpKSx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTAsdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0fUFkZE9yaWdpbmFsRWxlbWVudChlLHQpe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LGUpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LHQpLHRoaXMubV9vcmlnaW5hbENvdW50Kyt9QWRkTW9kaWZpZWRFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX21vZGlmaWVkQ291bnQrK31nZXRDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXN9Z2V0UmV2ZXJzZUNoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlcy5yZXZlcnNlKCksdGhpcy5tX2NoYW5nZXN9fWNsYXNzIHlle2NvbnN0cnVjdG9yKGUsdCxuPW51bGwpe3RoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlPW4sdGhpcy5fb3JpZ2luYWxTZXF1ZW5jZT1lLHRoaXMuX21vZGlmaWVkU2VxdWVuY2U9dDtjb25zdFtyLGksb109eWUuX2dldEVsZW1lbnRzKGUpLFtzLGEsbF09eWUuX2dldEVsZW1lbnRzKHQpO3RoaXMuX2hhc1N0cmluZ3M9byYmbCx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzPXIsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaD1pLHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHM9cyx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoPWEsdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXX1zdGF0aWMgX2lzU3RyaW5nQXJyYXkoZSl7cmV0dXJuIGUubGVuZ3RoPjAmJiJzdHJpbmciPT10eXBlb2YgZVswXX1zdGF0aWMgX2dldEVsZW1lbnRzKGUpe2NvbnN0IHQ9ZS5nZXRFbGVtZW50cygpO2lmKHllLl9pc1N0cmluZ0FycmF5KHQpKXtjb25zdCBlPW5ldyBJbnQzMkFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspZVtuXT1mZSh0W25dLDApO3JldHVyblt0LGUsITBdfXJldHVybiB0IGluc3RhbmNlb2YgSW50MzJBcnJheT9bW10sdCwhMV06W1tdLG5ldyBJbnQzMkFycmF5KHQpLCExXX1FbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1FbGVtZW50c0FyZVN0cmljdEVxdWFsKGUsdCl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbChlLHQpKXJldHVybiExO3JldHVybiB5ZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLGUpPT09eWUuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSx0KX1zdGF0aWMgX2dldFN0cmljdEVsZW1lbnQoZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRTdHJpY3RFbGVtZW50P2UuZ2V0U3RyaWN0RWxlbWVudCh0KTpudWxsfU9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChlLHQpe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW2VdPT09dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSYmKCF0aGlzLl9oYXNTdHJpbmdzfHx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdPT09dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XSl9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1Db21wdXRlRGlmZihlKXtyZXR1cm4gdGhpcy5fQ29tcHV0ZURpZmYoMCx0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLDAsdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMSxlKX1fQ29tcHV0ZURpZmYoZSx0LG4scixpKXtjb25zdCBvPVshMV07bGV0IHM9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLHQsbixyLG8pO3JldHVybiBpJiYocz10aGlzLlByZXR0aWZ5Q2hhbmdlcyhzKSkse3F1aXRFYXJseTpvWzBdLGNoYW5nZXM6c319Q29tcHV0ZURpZmZSZWN1cnNpdmUoZSx0LG4scixpKXtmb3IoaVswXT0hMTtlPD10JiZuPD1yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwoZSxuKTspZSsrLG4rKztmb3IoO3Q+PWUmJnI+PW4mJnRoaXMuRWxlbWVudHNBcmVFcXVhbCh0LHIpOyl0LS0sci0tO2lmKGU+dHx8bj5yKXtsZXQgaTtyZXR1cm4gbjw9cj8ocGUuQXNzZXJ0KGU9PT10KzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLGk9W25ldyBoZShlLDAsbixyLW4rMSldKTplPD10PyhwZS5Bc3NlcnQobj09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksaT1bbmV3IGhlKGUsdC1lKzEsbiwwKV0pOihwZS5Bc3NlcnQoZT09PXQrMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIikscGUuQXNzZXJ0KG49PT1yKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGk9W10pLGl9Y29uc3Qgbz1bMF0scz1bMF0sYT10aGlzLkNvbXB1dGVSZWN1cnNpb25Qb2ludChlLHQsbixyLG8scyxpKSxsPW9bMF0sdT1zWzBdO2lmKG51bGwhPT1hKXJldHVybiBhO2lmKCFpWzBdKXtjb25zdCBvPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUoZSxsLG4sdSxpKTtsZXQgcz1bXTtyZXR1cm4gcz1pWzBdP1tuZXcgaGUobCsxLHQtKGwrMSkrMSx1KzEsci0odSsxKSsxKV06dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShsKzEsdCx1KzEscixpKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhvLHMpfXJldHVybltuZXcgaGUoZSx0LWUrMSxuLHItbisxKV19V0FMS1RSQUNFKGUsdCxuLHIsaSxvLHMsYSxsLHUsYyxoLGQsZixtLGcscCx2KXtsZXQgYj1udWxsLHk9bnVsbCxDPW5ldyBiZSxfPXQsUz1uLHc9ZFswXS1nWzBdLXIsQT0tMTA3Mzc0MTgyNCx4PXRoaXMubV9mb3J3YXJkSGlzdG9yeS5sZW5ndGgtMTtkb3tjb25zdCB0PXcrZTt0PT09X3x8dDxTJiZsW3QtMV08bFt0KzFdPyhmPShjPWxbdCsxXSktdy1yLGM8QSYmQy5NYXJrTmV4dENoYW5nZSgpLEE9YyxDLkFkZE1vZGlmaWVkRWxlbWVudChjKzEsZiksdz10KzEtZSk6KGY9KGM9bFt0LTFdKzEpLXctcixjPEEmJkMuTWFya05leHRDaGFuZ2UoKSxBPWMtMSxDLkFkZE9yaWdpbmFsRWxlbWVudChjLGYrMSksdz10LTEtZSkseD49MCYmKGU9KGw9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W3hdKVswXSxfPTEsUz1sLmxlbmd0aC0xKX13aGlsZSgtLXg+PS0xKTtpZihiPUMuZ2V0UmV2ZXJzZUNoYW5nZXMoKSx2WzBdKXtsZXQgZT1kWzBdKzEsdD1nWzBdKzE7aWYobnVsbCE9PWImJmIubGVuZ3RoPjApe2NvbnN0IG49YltiLmxlbmd0aC0xXTtlPU1hdGgubWF4KGUsbi5nZXRPcmlnaW5hbEVuZCgpKSx0PU1hdGgubWF4KHQsbi5nZXRNb2RpZmllZEVuZCgpKX15PVtuZXcgaGUoZSxoLWUrMSx0LG0tdCsxKV19ZWxzZXtDPW5ldyBiZSxfPW8sUz1zLHc9ZFswXS1nWzBdLWEsQT0xMDczNzQxODI0LHg9cD90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve2NvbnN0IGU9dytpO2U9PT1ffHxlPFMmJnVbZS0xXT49dVtlKzFdPyhmPShjPXVbZSsxXS0xKS13LWEsYz5BJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT1jKzEsQy5BZGRPcmlnaW5hbEVsZW1lbnQoYysxLGYrMSksdz1lKzEtaSk6KGY9KGM9dVtlLTFdKS13LWEsYz5BJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT1jLEMuQWRkTW9kaWZpZWRFbGVtZW50KGMrMSxmKzEpLHc9ZS0xLWkpLHg+PTAmJihpPSh1PXRoaXMubV9yZXZlcnNlSGlzdG9yeVt4XSlbMF0sXz0xLFM9dS5sZW5ndGgtMSl9d2hpbGUoLS14Pj0tMSk7eT1DLmdldENoYW5nZXMoKX1yZXR1cm4gdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXMoYix5KX1Db21wdXRlUmVjdXJzaW9uUG9pbnQoZSx0LG4scixpLG8scyl7bGV0IGE9MCxsPTAsdT0wLGM9MCxoPTAsZD0wO2UtLSxuLS0saVswXT0wLG9bMF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO2NvbnN0IGY9dC1lKyhyLW4pLG09ZisxLGc9bmV3IEludDMyQXJyYXkobSkscD1uZXcgSW50MzJBcnJheShtKSx2PXItbixiPXQtZSx5PWUtbixDPXQtcixfPShiLXYpJTI9PTA7Z1t2XT1lLHBbYl09dCxzWzBdPSExO2ZvcihsZXQgUz0xO1M8PWYvMisxO1MrKyl7bGV0IGY9MCx3PTA7dT10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYtUyxTLHYsbSksYz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYrUyxTLHYsbSk7Zm9yKGxldCBlPXU7ZTw9YztlKz0yKXthPWU9PT11fHxlPGMmJmdbZS0xXTxnW2UrMV0/Z1tlKzFdOmdbZS0xXSsxLGw9YS0oZS12KS15O2NvbnN0IG49YTtmb3IoO2E8dCYmbDxyJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwoYSsxLGwrMSk7KWErKyxsKys7aWYoZ1tlXT1hLGErbD5mK3cmJihmPWEsdz1sKSwhXyYmTWF0aC5hYnMoZS1iKTw9Uy0xJiZhPj1wW2VdKXJldHVybiBpWzBdPWEsb1swXT1sLG48PXBbZV0mJlM8PTE0NDg/dGhpcy5XQUxLVFJBQ0Uodix1LGMseSxiLGgsZCxDLGcscCxhLHQsaSxsLHIsbyxfLHMpOm51bGx9Y29uc3QgQT0oZi1lKyh3LW4pLVMpLzI7aWYobnVsbCE9PXRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUoZixBKSlyZXR1cm4gc1swXT0hMCxpWzBdPWYsb1swXT13LEE+MCYmUzw9MTQ0OD90aGlzLldBTEtUUkFDRSh2LHUsYyx5LGIsaCxkLEMsZyxwLGEsdCxpLGwscixvLF8scyk6KGUrKyxuKyssW25ldyBoZShlLHQtZSsxLG4sci1uKzEpXSk7aD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGItUyxTLGIsbSksZD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGIrUyxTLGIsbSk7Zm9yKGxldCBmPWg7Zjw9ZDtmKz0yKXthPWY9PT1ofHxmPGQmJnBbZi0xXT49cFtmKzFdP3BbZisxXS0xOnBbZi0xXSxsPWEtKGYtYiktQztjb25zdCBtPWE7Zm9yKDthPmUmJmw+biYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKGEsbCk7KWEtLSxsLS07aWYocFtmXT1hLF8mJk1hdGguYWJzKGYtdik8PVMmJmE8PWdbZl0pcmV0dXJuIGlbMF09YSxvWzBdPWwsbT49Z1tmXSYmUzw9MTQ0OD90aGlzLldBTEtUUkFDRSh2LHUsYyx5LGIsaCxkLEMsZyxwLGEsdCxpLGwscixvLF8scyk6bnVsbH1pZihTPD0xNDQ3KXtsZXQgZT1uZXcgSW50MzJBcnJheShjLXUrMik7ZVswXT12LXUrMSx2ZS5Db3B5MihnLHUsZSwxLGMtdSsxKSx0aGlzLm1fZm9yd2FyZEhpc3RvcnkucHVzaChlKSxlPW5ldyBJbnQzMkFycmF5KGQtaCsyKSxlWzBdPWItaCsxLHZlLkNvcHkyKHAsaCxlLDEsZC1oKzEpLHRoaXMubV9yZXZlcnNlSGlzdG9yeS5wdXNoKGUpfX1yZXR1cm4gdGhpcy5XQUxLVFJBQ0Uodix1LGMseSxiLGgsZCxDLGcscCxhLHQsaSxsLHIsbyxfLHMpfVByZXR0aWZ5Q2hhbmdlcyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdLHI9dDxlLmxlbmd0aC0xP2VbdCsxXS5vcmlnaW5hbFN0YXJ0OnRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLGk9dDxlLmxlbmd0aC0xP2VbdCsxXS5tb2RpZmllZFN0YXJ0OnRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLG89bi5vcmlnaW5hbExlbmd0aD4wLHM9bi5tb2RpZmllZExlbmd0aD4wO2Zvcig7bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGg8ciYmbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGg8aSYmKCFvfHx0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChuLm9yaWdpbmFsU3RhcnQsbi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgpKSYmKCFzfHx0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChuLm1vZGlmaWVkU3RhcnQsbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpKTspe2NvbnN0IGU9dGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKG4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkU3RhcnQpO2lmKHRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbChuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCkmJiFlKWJyZWFrO24ub3JpZ2luYWxTdGFydCsrLG4ubW9kaWZpZWRTdGFydCsrfWNvbnN0IGE9W251bGxdO3Q8ZS5sZW5ndGgtMSYmdGhpcy5DaGFuZ2VzT3ZlcmxhcChlW3RdLGVbdCsxXSxhKSYmKGVbdF09YVswXSxlLnNwbGljZSh0KzEsMSksdC0tKX1mb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl7Y29uc3Qgbj1lW3RdO2xldCByPTAsaT0wO2lmKHQ+MCl7Y29uc3Qgbj1lW3QtMV07cj1uLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCxpPW4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RofWNvbnN0IG89bi5vcmlnaW5hbExlbmd0aD4wLHM9bi5tb2RpZmllZExlbmd0aD4wO2xldCBhPTAsbD10aGlzLl9ib3VuZGFyeVNjb3JlKG4ub3JpZ2luYWxTdGFydCxuLm9yaWdpbmFsTGVuZ3RoLG4ubW9kaWZpZWRTdGFydCxuLm1vZGlmaWVkTGVuZ3RoKTtmb3IobGV0IGU9MTs7ZSsrKXtjb25zdCB0PW4ub3JpZ2luYWxTdGFydC1lLHU9bi5tb2RpZmllZFN0YXJ0LWU7aWYodDxyfHx1PGkpYnJlYWs7aWYobyYmIXRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKHQsdCtuLm9yaWdpbmFsTGVuZ3RoKSlicmVhaztpZihzJiYhdGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwodSx1K24ubW9kaWZpZWRMZW5ndGgpKWJyZWFrO2NvbnN0IGM9KHQ9PT1yJiZ1PT09aT81OjApK3RoaXMuX2JvdW5kYXJ5U2NvcmUodCxuLm9yaWdpbmFsTGVuZ3RoLHUsbi5tb2RpZmllZExlbmd0aCk7Yz5sJiYobD1jLGE9ZSl9bi5vcmlnaW5hbFN0YXJ0LT1hLG4ubW9kaWZpZWRTdGFydC09YTtjb25zdCB1PVtudWxsXTt0PjAmJnRoaXMuQ2hhbmdlc092ZXJsYXAoZVt0LTFdLGVbdF0sdSkmJihlW3QtMV09dVswXSxlLnNwbGljZSh0LDEpLHQrKyl9aWYodGhpcy5faGFzU3RyaW5ncylmb3IobGV0IHQ9MSxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49ZVt0LTFdLHI9ZVt0XSxpPXIub3JpZ2luYWxTdGFydC1uLm9yaWdpbmFsU3RhcnQtbi5vcmlnaW5hbExlbmd0aCxvPW4ub3JpZ2luYWxTdGFydCxzPXIub3JpZ2luYWxTdGFydCtyLm9yaWdpbmFsTGVuZ3RoLGE9cy1vLGw9bi5tb2RpZmllZFN0YXJ0LHU9ci5tb2RpZmllZFN0YXJ0K3IubW9kaWZpZWRMZW5ndGgsYz11LWw7aWYoaTw1JiZhPDIwJiZjPDIwKXtjb25zdCBlPXRoaXMuX2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UobyxhLGwsYyxpKTtpZihlKXtjb25zdFt0LG9dPWU7dD09PW4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoJiZvPT09bi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGh8fChuLm9yaWdpbmFsTGVuZ3RoPXQtbi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGg9by1uLm1vZGlmaWVkU3RhcnQsci5vcmlnaW5hbFN0YXJ0PXQraSxyLm1vZGlmaWVkU3RhcnQ9bytpLHIub3JpZ2luYWxMZW5ndGg9cy1yLm9yaWdpbmFsU3RhcnQsci5tb2RpZmllZExlbmd0aD11LXIubW9kaWZpZWRTdGFydCl9fX1yZXR1cm4gZX1fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShlLHQsbixyLGkpe2lmKHQ8aXx8cjxpKXJldHVybiBudWxsO2NvbnN0IG89ZSt0LWkrMSxzPW4rci1pKzE7bGV0IGE9MCxsPTAsdT0wO2ZvcihsZXQgdD1lO3Q8bzt0KyspZm9yKGxldCBlPW47ZTxzO2UrKyl7Y29uc3Qgbj10aGlzLl9jb250aWd1b3VzU2VxdWVuY2VTY29yZSh0LGUsaSk7bj4wJiZuPmEmJihhPW4sbD10LHU9ZSl9cmV0dXJuIGE+MD9bbCx1XTpudWxsfV9jb250aWd1b3VzU2VxdWVuY2VTY29yZShlLHQsbil7bGV0IHI9MDtmb3IobGV0IGk9MDtpPG47aSsrKXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKGUraSx0K2kpKXJldHVybiAwO3IrPXRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZStpXS5sZW5ndGh9cmV0dXJuIHJ9X09yaWdpbmFsSXNCb3VuZGFyeShlKXtyZXR1cm4gZTw9MHx8ZT49dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgtMXx8dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV0pfV9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkoZSx0KXtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoZSl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShlLTEpKXJldHVybiEwO2lmKHQ+MCl7Y29uc3Qgbj1lK3Q7aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KG4tMSl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShuKSlyZXR1cm4hMH1yZXR1cm4hMX1fTW9kaWZpZWRJc0JvdW5kYXJ5KGUpe3JldHVybiBlPD0wfHxlPj10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xfHx0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tlXSl9X01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeShlLHQpe2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShlKXx8dGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGUtMSkpcmV0dXJuITA7aWYodD4wKXtjb25zdCBuPWUrdDtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkobi0xKXx8dGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KG4pKXJldHVybiEwfXJldHVybiExfV9ib3VuZGFyeVNjb3JlKGUsdCxuLHIpe3JldHVybih0aGlzLl9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkoZSx0KT8xOjApKyh0aGlzLl9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkobixyKT8xOjApfUNvbmNhdGVuYXRlQ2hhbmdlcyhlLHQpe2NvbnN0IG49W107aWYoMD09PWUubGVuZ3RofHwwPT09dC5sZW5ndGgpcmV0dXJuIHQubGVuZ3RoPjA/dDplO2lmKHRoaXMuQ2hhbmdlc092ZXJsYXAoZVtlLmxlbmd0aC0xXSx0WzBdLG4pKXtjb25zdCByPW5ldyBBcnJheShlLmxlbmd0aCt0Lmxlbmd0aC0xKTtyZXR1cm4gdmUuQ29weShlLDAsciwwLGUubGVuZ3RoLTEpLHJbZS5sZW5ndGgtMV09blswXSx2ZS5Db3B5KHQsMSxyLGUubGVuZ3RoLHQubGVuZ3RoLTEpLHJ9e2NvbnN0IG49bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoKTtyZXR1cm4gdmUuQ29weShlLDAsbiwwLGUubGVuZ3RoKSx2ZS5Db3B5KHQsMCxuLGUubGVuZ3RoLHQubGVuZ3RoKSxufX1DaGFuZ2VzT3ZlcmxhcChlLHQsbil7aWYocGUuQXNzZXJ0KGUub3JpZ2luYWxTdGFydDw9dC5vcmlnaW5hbFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLHBlLkFzc2VydChlLm1vZGlmaWVkU3RhcnQ8PXQubW9kaWZpZWRTdGFydCwiTGVmdCBjaGFuZ2UgaXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byByaWdodCBjaGFuZ2UiKSxlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aD49dC5vcmlnaW5hbFN0YXJ0fHxlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aD49dC5tb2RpZmllZFN0YXJ0KXtjb25zdCByPWUub3JpZ2luYWxTdGFydDtsZXQgaT1lLm9yaWdpbmFsTGVuZ3RoO2NvbnN0IG89ZS5tb2RpZmllZFN0YXJ0O2xldCBzPWUubW9kaWZpZWRMZW5ndGg7cmV0dXJuIGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoPj10Lm9yaWdpbmFsU3RhcnQmJihpPXQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLWUub3JpZ2luYWxTdGFydCksZS5tb2RpZmllZFN0YXJ0K2UubW9kaWZpZWRMZW5ndGg+PXQubW9kaWZpZWRTdGFydCYmKHM9dC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtZS5tb2RpZmllZFN0YXJ0KSxuWzBdPW5ldyBoZShyLGksbyxzKSwhMH1yZXR1cm4gblswXT1udWxsLCExfUNsaXBEaWFnb25hbEJvdW5kKGUsdCxuLHIpe2lmKGU+PTAmJmU8cilyZXR1cm4gZTtjb25zdCBpPXQlMj09MDtpZihlPDApe3JldHVybiBpPT09KG4lMj09MCk/MDoxfXJldHVybiBpPT09KChyLW4tMSklMj09MCk/ci0xOnItMn19bGV0IENlO2lmKHZvaWQgMCE9PU4udnNjb2RlJiZ2b2lkIDAhPT1OLnZzY29kZS5wcm9jZXNzKXtjb25zdCBlPU4udnNjb2RlLnByb2Nlc3M7Q2U9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBlLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBlLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gZS5lbnZ9LGN3ZDooKT0+ZS5jd2QoKX19ZWxzZSBDZT0idW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3M/e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gcHJvY2Vzcy5lbnZ9LGN3ZDooKT0+cHJvY2Vzcy5lbnYuVlNDT0RFX0NXRHx8cHJvY2Vzcy5jd2QoKX06e2dldCBwbGF0Zm9ybSgpe3JldHVybiBUPyJ3aW4zMiI6Tz8iZGFyd2luIjoibGludXgifSxnZXQgYXJjaCgpe30sZ2V0IGVudigpe3JldHVybnt9fSxjd2Q6KCk9PiIvIn07Y29uc3QgX2U9Q2UuY3dkLFNlPUNlLmVudix3ZT1DZS5wbGF0Zm9ybSxBZT00Nix4ZT00NyxFZT05MixMZT01ODtjbGFzcyBOZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCxuKXtsZXQgcjsic3RyaW5nIj09dHlwZW9mIHQmJjA9PT10LmluZGV4T2YoIm5vdCAiKT8ocj0ibXVzdCBub3QgYmUiLHQ9dC5yZXBsYWNlKC9ebm90IC8sIiIpKTpyPSJtdXN0IGJlIjtjb25zdCBpPS0xIT09ZS5pbmRleE9mKCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO2xldCBvPWBUaGUgIiR7ZX0iICR7aX0gJHtyfSBvZiB0eXBlICR7dH1gO28rPSIuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgbixzdXBlcihvKSx0aGlzLmNvZGU9IkVSUl9JTlZBTElEX0FSR19UWVBFIn19ZnVuY3Rpb24ga2UoZSx0KXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IE5lKHQsInN0cmluZyIsZSl9Y29uc3QgUmU9IndpbjMyIj09PXdlO2Z1bmN0aW9uIFRlKGUpe3JldHVybiBlPT09eGV8fGU9PT1FZX1mdW5jdGlvbiBPZShlKXtyZXR1cm4gZT09PXhlfWZ1bmN0aW9uIE1lKGUpe3JldHVybiBlPj02NSYmZTw9OTB8fGU+PTk3JiZlPD0xMjJ9ZnVuY3Rpb24gSWUoZSx0LG4scil7bGV0IGk9IiIsbz0wLHM9LTEsYT0wLGw9MDtmb3IobGV0IHU9MDt1PD1lLmxlbmd0aDsrK3Upe2lmKHU8ZS5sZW5ndGgpbD1lLmNoYXJDb2RlQXQodSk7ZWxzZXtpZihyKGwpKWJyZWFrO2w9eGV9aWYocihsKSl7aWYocz09PXUtMXx8MT09PWEpO2Vsc2UgaWYoMj09PWEpe2lmKGkubGVuZ3RoPDJ8fDIhPT1vfHxpLmNoYXJDb2RlQXQoaS5sZW5ndGgtMSkhPT1BZXx8aS5jaGFyQ29kZUF0KGkubGVuZ3RoLTIpIT09QWUpe2lmKGkubGVuZ3RoPjIpe2NvbnN0IGU9aS5sYXN0SW5kZXhPZihuKTstMT09PWU/KGk9IiIsbz0wKTooaT1pLnNsaWNlKDAsZSksbz1pLmxlbmd0aC0xLWkubGFzdEluZGV4T2YobikpLHM9dSxhPTA7Y29udGludWV9aWYoMCE9PWkubGVuZ3RoKXtpPSIiLG89MCxzPXUsYT0wO2NvbnRpbnVlfX10JiYoaSs9aS5sZW5ndGg+MD9gJHtufS4uYDoiLi4iLG89Mil9ZWxzZSBpLmxlbmd0aD4wP2krPWAke259JHtlLnNsaWNlKHMrMSx1KX1gOmk9ZS5zbGljZShzKzEsdSksbz11LXMtMTtzPXUsYT0wfWVsc2UgbD09PUFlJiYtMSE9PWE/KythOmE9LTF9cmV0dXJuIGl9ZnVuY3Rpb24gUGUoZSx0KXshZnVuY3Rpb24oZSx0KXtpZihudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBOZSh0LCJPYmplY3QiLGUpfSh0LCJwYXRoT2JqZWN0Iik7Y29uc3Qgbj10LmRpcnx8dC5yb290LHI9dC5iYXNlfHxgJHt0Lm5hbWV8fCIifSR7dC5leHR8fCIifWA7cmV0dXJuIG4/bj09PXQucm9vdD9gJHtufSR7cn1gOmAke259JHtlfSR7cn1gOnJ9Y29uc3QgRmU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0iIixyPSExO2ZvcihsZXQgaT1lLmxlbmd0aC0xO2k+PS0xO2ktLSl7bGV0IG87aWYoaT49MCl7aWYobz1lW2ldLGtlKG8sInBhdGgiKSwwPT09by5sZW5ndGgpY29udGludWV9ZWxzZSAwPT09dC5sZW5ndGg/bz1fZSgpOihvPVNlW2A9JHt0fWBdfHxfZSgpLCh2b2lkIDA9PT1vfHxvLnNsaWNlKDAsMikudG9Mb3dlckNhc2UoKSE9PXQudG9Mb3dlckNhc2UoKSYmby5jaGFyQ29kZUF0KDIpPT09RWUpJiYobz1gJHt0fVxcYCkpO2NvbnN0IHM9by5sZW5ndGg7bGV0IGE9MCxsPSIiLHU9ITE7Y29uc3QgYz1vLmNoYXJDb2RlQXQoMCk7aWYoMT09PXMpVGUoYykmJihhPTEsdT0hMCk7ZWxzZSBpZihUZShjKSlpZih1PSEwLFRlKG8uY2hhckNvZGVBdCgxKSkpe2xldCBlPTIsdD1lO2Zvcig7ZTxzJiYhVGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8cyYmZSE9PXQpe2NvbnN0IG49by5zbGljZSh0LGUpO2Zvcih0PWU7ZTxzJiZUZShvLmNoYXJDb2RlQXQoZSkpOyllKys7aWYoZTxzJiZlIT09dCl7Zm9yKHQ9ZTtlPHMmJiFUZShvLmNoYXJDb2RlQXQoZSkpOyllKys7ZSE9PXMmJmU9PT10fHwobD1gXFxcXCR7bn1cXCR7by5zbGljZSh0LGUpfWAsYT1lKX19fWVsc2UgYT0xO2Vsc2UgTWUoYykmJm8uY2hhckNvZGVBdCgxKT09PUxlJiYobD1vLnNsaWNlKDAsMiksYT0yLHM+MiYmVGUoby5jaGFyQ29kZUF0KDIpKSYmKHU9ITAsYT0zKSk7aWYobC5sZW5ndGg+MClpZih0Lmxlbmd0aD4wKXtpZihsLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkpY29udGludWV9ZWxzZSB0PWw7aWYocil7aWYodC5sZW5ndGg+MClicmVha31lbHNlIGlmKG49YCR7by5zbGljZShhKX1cXCR7bn1gLHI9dSx1JiZ0Lmxlbmd0aD4wKWJyZWFrfXJldHVybiBuPUllKG4sIXIsIlxcIixUZSkscj9gJHt0fVxcJHtufWA6YCR7dH0ke259YHx8Ii4ifSxub3JtYWxpemUoZSl7a2UoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuIi4iO2xldCBuLHI9MCxpPSExO2NvbnN0IG89ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT10KXJldHVybiBPZShvKT8iXFwiOmU7aWYoVGUobykpaWYoaT0hMCxUZShlLmNoYXJDb2RlQXQoMSkpKXtsZXQgaT0yLG89aTtmb3IoO2k8dCYmIVRlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtjb25zdCBzPWUuc2xpY2UobyxpKTtmb3Iobz1pO2k8dCYmVGUoZS5jaGFyQ29kZUF0KGkpKTspaSsrO2lmKGk8dCYmaSE9PW8pe2ZvcihvPWk7aTx0JiYhVGUoZS5jaGFyQ29kZUF0KGkpKTspaSsrO2lmKGk9PT10KXJldHVybmBcXFxcJHtzfVxcJHtlLnNsaWNlKG8pfVxcYDtpIT09byYmKG49YFxcXFwke3N9XFwke2Uuc2xpY2UobyxpKX1gLHI9aSl9fX1lbHNlIHI9MTtlbHNlIE1lKG8pJiZlLmNoYXJDb2RlQXQoMSk9PT1MZSYmKG49ZS5zbGljZSgwLDIpLHI9Mix0PjImJlRlKGUuY2hhckNvZGVBdCgyKSkmJihpPSEwLHI9MykpO2xldCBzPXI8dD9JZShlLnNsaWNlKHIpLCFpLCJcXCIsVGUpOiIiO3JldHVybiAwIT09cy5sZW5ndGh8fGl8fChzPSIuIikscy5sZW5ndGg+MCYmVGUoZS5jaGFyQ29kZUF0KHQtMSkpJiYocys9IlxcIiksdm9pZCAwPT09bj9pP2BcXCR7c31gOnM6aT9gJHtufVxcJHtzfWA6YCR7bn0ke3N9YH0saXNBYnNvbHV0ZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4hMTtjb25zdCBuPWUuY2hhckNvZGVBdCgwKTtyZXR1cm4gVGUobil8fHQ+MiYmTWUobikmJmUuY2hhckNvZGVBdCgxKT09PUxlJiZUZShlLmNoYXJDb2RlQXQoMikpfSxqb2luKC4uLmUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7bGV0IHQsbjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil7Y29uc3QgaT1lW3JdO2tlKGksInBhdGgiKSxpLmxlbmd0aD4wJiYodm9pZCAwPT09dD90PW49aTp0Kz1gXFwke2l9YCl9aWYodm9pZCAwPT09dClyZXR1cm4iLiI7bGV0IHI9ITAsaT0wO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmVGUobi5jaGFyQ29kZUF0KDApKSl7KytpO2NvbnN0IGU9bi5sZW5ndGg7ZT4xJiZUZShuLmNoYXJDb2RlQXQoMSkpJiYoKytpLGU+MiYmKFRlKG4uY2hhckNvZGVBdCgyKSk/KytpOnI9ITEpKX1pZihyKXtmb3IoO2k8dC5sZW5ndGgmJlRlKHQuY2hhckNvZGVBdChpKSk7KWkrKztpPj0yJiYodD1gXFwke3Quc2xpY2UoaSl9YCl9cmV0dXJuIEZlLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmUoZSx0KXtpZihrZShlLCJmcm9tIiksa2UodCwidG8iKSxlPT09dClyZXR1cm4iIjtjb25zdCBuPUZlLnJlc29sdmUoZSkscj1GZS5yZXNvbHZlKHQpO2lmKG49PT1yKXJldHVybiIiO2lmKChlPW4udG9Mb3dlckNhc2UoKSk9PT0odD1yLnRvTG93ZXJDYXNlKCkpKXJldHVybiIiO2xldCBpPTA7Zm9yKDtpPGUubGVuZ3RoJiZlLmNoYXJDb2RlQXQoaSk9PT1FZTspaSsrO2xldCBvPWUubGVuZ3RoO2Zvcig7by0xPmkmJmUuY2hhckNvZGVBdChvLTEpPT09RWU7KW8tLTtjb25zdCBzPW8taTtsZXQgYT0wO2Zvcig7YTx0Lmxlbmd0aCYmdC5jaGFyQ29kZUF0KGEpPT09RWU7KWErKztsZXQgbD10Lmxlbmd0aDtmb3IoO2wtMT5hJiZ0LmNoYXJDb2RlQXQobC0xKT09PUVlOylsLS07Y29uc3QgdT1sLWEsYz1zPHU/czp1O2xldCBoPS0xLGQ9MDtmb3IoO2Q8YztkKyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KGkrZCk7aWYobiE9PXQuY2hhckNvZGVBdChhK2QpKWJyZWFrO249PT1FZSYmKGg9ZCl9aWYoZCE9PWMpe2lmKC0xPT09aClyZXR1cm4gcn1lbHNle2lmKHU+Yyl7aWYodC5jaGFyQ29kZUF0KGErZCk9PT1FZSlyZXR1cm4gci5zbGljZShhK2QrMSk7aWYoMj09PWQpcmV0dXJuIHIuc2xpY2UoYStkKX1zPmMmJihlLmNoYXJDb2RlQXQoaStkKT09PUVlP2g9ZDoyPT09ZCYmKGg9MykpLC0xPT09aCYmKGg9MCl9bGV0IGY9IiI7Zm9yKGQ9aStoKzE7ZDw9bzsrK2QpZCE9PW8mJmUuY2hhckNvZGVBdChkKSE9PUVlfHwoZis9MD09PWYubGVuZ3RoPyIuLiI6IlxcLi4iKTtyZXR1cm4gYSs9aCxmLmxlbmd0aD4wP2Ake2Z9JHtyLnNsaWNlKGEsbCl9YDooci5jaGFyQ29kZUF0KGEpPT09RWUmJisrYSxyLnNsaWNlKGEsbCkpfSx0b05hbWVzcGFjZWRQYXRoKGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKXJldHVybiBlO2NvbnN0IHQ9RmUucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1FZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09RWUpe2NvbnN0IGU9dC5jaGFyQ29kZUF0KDIpO2lmKDYzIT09ZSYmZSE9PUFlKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihNZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT1MZSYmdC5jaGFyQ29kZUF0KDIpPT09RWUpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4iLiI7bGV0IG49LTEscj0wO2NvbnN0IGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT10KXJldHVybiBUZShpKT9lOiIuIjtpZihUZShpKSl7aWYobj1yPTEsVGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiFUZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Zm9yKG89aTtpPHQmJlRlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIVRlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm4gZTtpIT09byYmKG49cj1pKzEpfX19fWVsc2UgTWUoaSkmJmUuY2hhckNvZGVBdCgxKT09PUxlJiYobj10PjImJlRlKGUuY2hhckNvZGVBdCgyKSk/MzoyLHI9bik7bGV0IG89LTEscz0hMDtmb3IobGV0IG49dC0xO24+PXI7LS1uKWlmKFRlKGUuY2hhckNvZGVBdChuKSkpe2lmKCFzKXtvPW47YnJlYWt9fWVsc2Ugcz0hMTtpZigtMT09PW8pe2lmKC0xPT09bilyZXR1cm4iLiI7bz1ufXJldHVybiBlLnNsaWNlKDAsbyl9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYoZS5sZW5ndGg+PTImJk1lKGUuY2hhckNvZGVBdCgwKSkmJmUuY2hhckNvZGVBdCgxKT09PUxlJiYocj0yKSx2b2lkIDAhPT10JiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBzPXQubGVuZ3RoLTEsYT0tMTtmb3Iobj1lLmxlbmd0aC0xO24+PXI7LS1uKXtjb25zdCBsPWUuY2hhckNvZGVBdChuKTtpZihUZShsKSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1hJiYobz0hMSxhPW4rMSkscz49MCYmKGw9PT10LmNoYXJDb2RlQXQocyk/LTE9PS0tcyYmKGk9bik6KHM9LTEsaT1hKSl9cmV0dXJuIHI9PT1pP2k9YTotMT09PWkmJihpPWUubGVuZ3RoKSxlLnNsaWNlKHIsaSl9Zm9yKG49ZS5sZW5ndGgtMTtuPj1yOy0tbilpZihUZShlLmNoYXJDb2RlQXQobikpKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0wLG49LTEscj0wLGk9LTEsbz0hMCxzPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PUxlJiZNZShlLmNoYXJDb2RlQXQoMCkpJiYodD1yPTIpO2ZvcihsZXQgYT1lLmxlbmd0aC0xO2E+PXQ7LS1hKXtjb25zdCB0PWUuY2hhckNvZGVBdChhKTtpZihUZSh0KSl7aWYoIW8pe3I9YSsxO2JyZWFrfX1lbHNlLTE9PT1pJiYobz0hMSxpPWErMSksdD09PUFlPy0xPT09bj9uPWE6MSE9PXMmJihzPTEpOi0xIT09biYmKHM9LTEpfXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09c3x8MT09PXMmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6UGUuYmluZChudWxsLCJcXCIpLHBhcnNlKGUpe2tlKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7Y29uc3Qgbj1lLmxlbmd0aDtsZXQgcj0wLGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiBUZShpKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZihUZShpKSl7aWYocj0xLFRlKGUuY2hhckNvZGVBdCgxKSkpe2xldCB0PTIsaT10O2Zvcig7dDxuJiYhVGUoZS5jaGFyQ29kZUF0KHQpKTspdCsrO2lmKHQ8biYmdCE9PWkpe2ZvcihpPXQ7dDxuJiZUZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7aWYodDxuJiZ0IT09aSl7Zm9yKGk9dDt0PG4mJiFUZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7dD09PW4/cj10OnQhPT1pJiYocj10KzEpfX19fWVsc2UgaWYoTWUoaSkmJmUuY2hhckNvZGVBdCgxKT09PUxlKXtpZihuPD0yKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O2lmKHI9MixUZShlLmNoYXJDb2RlQXQoMikpKXtpZigzPT09bilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtyPTN9fXI+MCYmKHQucm9vdD1lLnNsaWNlKDAscikpO2xldCBvPS0xLHM9cixhPS0xLGw9ITAsdT1lLmxlbmd0aC0xLGM9MDtmb3IoO3U+PXI7LS11KWlmKGk9ZS5jaGFyQ29kZUF0KHUpLFRlKGkpKXtpZighbCl7cz11KzE7YnJlYWt9fWVsc2UtMT09PWEmJihsPSExLGE9dSsxKSxpPT09QWU/LTE9PT1vP289dToxIT09YyYmKGM9MSk6LTEhPT1vJiYoYz0tMSk7cmV0dXJuLTEhPT1hJiYoLTE9PT1vfHwwPT09Y3x8MT09PWMmJm89PT1hLTEmJm89PT1zKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKHMsYSk6KHQubmFtZT1lLnNsaWNlKHMsbyksdC5iYXNlPWUuc2xpY2UocyxhKSx0LmV4dD1lLnNsaWNlKG8sYSkpKSx0LmRpcj1zPjAmJnMhPT1yP2Uuc2xpY2UoMCxzLTEpOnQucm9vdCx0fSxzZXA6IlxcIixkZWxpbWl0ZXI6IjsiLHdpbjMyOm51bGwscG9zaXg6bnVsbH0sVmU9KCgpPT57aWYoUmUpe2NvbnN0IGU9L1xcL2c7cmV0dXJuKCk9Pntjb25zdCB0PV9lKCkucmVwbGFjZShlLCIvIik7cmV0dXJuIHQuc2xpY2UodC5pbmRleE9mKCIvIikpfX1yZXR1cm4oKT0+X2UoKX0pKCksRGU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0hMTtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0tMSYmIW47ci0tKXtjb25zdCBpPXI+PTA/ZVtyXTpWZSgpO2tlKGksInBhdGgiKSwwIT09aS5sZW5ndGgmJih0PWAke2l9LyR7dH1gLG49aS5jaGFyQ29kZUF0KDApPT09eGUpfXJldHVybiB0PUllKHQsIW4sIi8iLE9lKSxuP2AvJHt0fWA6dC5sZW5ndGg+MD90OiIuIn0sbm9ybWFsaXplKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09eGUsbj1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk9PT14ZTtyZXR1cm4gMD09PShlPUllKGUsIXQsIi8iLE9lKSkubGVuZ3RoP3Q/Ii8iOm4/Ii4vIjoiLiI6KG4mJihlKz0iLyIpLHQ/YC8ke2V9YDplKX0saXNBYnNvbHV0ZTplPT4oa2UoZSwicGF0aCIpLGUubGVuZ3RoPjAmJmUuY2hhckNvZGVBdCgwKT09PXhlKSxqb2luKC4uLmUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDsrK24pe2NvbnN0IHI9ZVtuXTtrZShyLCJwYXRoIiksci5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1yOnQrPWAvJHtyfWApfXJldHVybiB2b2lkIDA9PT10PyIuIjpEZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoa2UoZSwiZnJvbSIpLGtlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7aWYoKGU9RGUucmVzb2x2ZShlKSk9PT0odD1EZS5yZXNvbHZlKHQpKSlyZXR1cm4iIjtjb25zdCBuPWUubGVuZ3RoLHI9bi0xLGk9dC5sZW5ndGgtMSxvPXI8aT9yOmk7bGV0IHM9LTEsYT0wO2Zvcig7YTxvO2ErKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMSthKTtpZihuIT09dC5jaGFyQ29kZUF0KDErYSkpYnJlYWs7bj09PXhlJiYocz1hKX1pZihhPT09bylpZihpPm8pe2lmKHQuY2hhckNvZGVBdCgxK2EpPT09eGUpcmV0dXJuIHQuc2xpY2UoMSthKzEpO2lmKDA9PT1hKXJldHVybiB0LnNsaWNlKDErYSl9ZWxzZSByPm8mJihlLmNoYXJDb2RlQXQoMSthKT09PXhlP3M9YTowPT09YSYmKHM9MCkpO2xldCBsPSIiO2ZvcihhPTErcysxO2E8PW47KythKWEhPT1uJiZlLmNoYXJDb2RlQXQoYSkhPT14ZXx8KGwrPTA9PT1sLmxlbmd0aD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtsfSR7dC5zbGljZSgxK3MpfWB9LHRvTmFtZXNwYWNlZFBhdGg6ZT0+ZSxkaXJuYW1lKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09eGU7bGV0IG49LTEscj0hMDtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0xOy0tdClpZihlLmNoYXJDb2RlQXQodCk9PT14ZSl7aWYoIXIpe249dDticmVha319ZWxzZSByPSExO3JldHVybi0xPT09bj90PyIvIjoiLiI6dCYmMT09PW4/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYodm9pZCAwIT09dCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgcz10Lmxlbmd0aC0xLGE9LTE7Zm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7Y29uc3QgbD1lLmNoYXJDb2RlQXQobik7aWYobD09PXhlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWEmJihvPSExLGE9bisxKSxzPj0wJiYobD09PXQuY2hhckNvZGVBdChzKT8tMT09LS1zJiYoaT1uKToocz0tMSxpPWEpKX1yZXR1cm4gcj09PWk/aT1hOi0xPT09aSYmKGk9ZS5sZW5ndGgpLGUuc2xpY2UocixpKX1mb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWlmKGUuY2hhckNvZGVBdChuKT09PXhlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0tMSxuPTAscj0tMSxpPSEwLG89MDtmb3IobGV0IHM9ZS5sZW5ndGgtMTtzPj0wOy0tcyl7Y29uc3QgYT1lLmNoYXJDb2RlQXQocyk7aWYoYSE9PXhlKS0xPT09ciYmKGk9ITEscj1zKzEpLGE9PT1BZT8tMT09PXQ/dD1zOjEhPT1vJiYobz0xKTotMSE9PXQmJihvPS0xKTtlbHNlIGlmKCFpKXtuPXMrMTticmVha319cmV0dXJuLTE9PT10fHwtMT09PXJ8fDA9PT1vfHwxPT09byYmdD09PXItMSYmdD09PW4rMT8iIjplLnNsaWNlKHQscil9LGZvcm1hdDpQZS5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09eGU7bGV0IHI7bj8odC5yb290PSIvIixyPTEpOnI9MDtsZXQgaT0tMSxvPTAscz0tMSxhPSEwLGw9ZS5sZW5ndGgtMSx1PTA7Zm9yKDtsPj1yOy0tbCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobCk7aWYodCE9PXhlKS0xPT09cyYmKGE9ITEscz1sKzEpLHQ9PT1BZT8tMT09PWk/aT1sOjEhPT11JiYodT0xKTotMSE9PWkmJih1PS0xKTtlbHNlIGlmKCFhKXtvPWwrMTticmVha319aWYoLTEhPT1zKXtjb25zdCByPTA9PT1vJiZuPzE6bzstMT09PWl8fDA9PT11fHwxPT09dSYmaT09PXMtMSYmaT09PW8rMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UocixzKToodC5uYW1lPWUuc2xpY2UocixpKSx0LmJhc2U9ZS5zbGljZShyLHMpLHQuZXh0PWUuc2xpY2UoaSxzKSl9cmV0dXJuIG8+MD90LmRpcj1lLnNsaWNlKDAsby0xKTpuJiYodC5kaXI9Ii8iKSx0fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtEZS53aW4zMj1GZS53aW4zMj1GZSxEZS5wb3NpeD1GZS5wb3NpeD1EZSxSZT9GZS5ub3JtYWxpemU6RGUubm9ybWFsaXplLFJlP0ZlLnJlc29sdmU6RGUucmVzb2x2ZSxSZT9GZS5yZWxhdGl2ZTpEZS5yZWxhdGl2ZSxSZT9GZS5kaXJuYW1lOkRlLmRpcm5hbWUsUmU/RmUuYmFzZW5hbWU6RGUuYmFzZW5hbWUsUmU/RmUuZXh0bmFtZTpEZS5leHRuYW1lLFJlP0ZlLnNlcDpEZS5zZXA7Y29uc3QgS2U9L15cd1tcd1xkKy4tXSokLyxqZT0vXlwvLyxxZT0vXlwvXC8vO2NvbnN0IEJlPSIiLFVlPSIvIiwkZT0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/LztsZXQgV2U9Y2xhc3MgZXtzdGF0aWMgaXNVcmkodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHwhIXQmJigic3RyaW5nIj09dHlwZW9mIHQuYXV0aG9yaXR5JiYic3RyaW5nIj09dHlwZW9mIHQuZnJhZ21lbnQmJiJzdHJpbmciPT10eXBlb2YgdC5wYXRoJiYic3RyaW5nIj09dHlwZW9mIHQucXVlcnkmJiJzdHJpbmciPT10eXBlb2YgdC5zY2hlbWUmJiJzdHJpbmciPT10eXBlb2YgdC5mc1BhdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LndpdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRvU3RyaW5nKX1jb25zdHJ1Y3RvcihlLHQsbixyLGksbz0hMSl7Im9iamVjdCI9PXR5cGVvZiBlPyh0aGlzLnNjaGVtZT1lLnNjaGVtZXx8QmUsdGhpcy5hdXRob3JpdHk9ZS5hdXRob3JpdHl8fEJlLHRoaXMucGF0aD1lLnBhdGh8fEJlLHRoaXMucXVlcnk9ZS5xdWVyeXx8QmUsdGhpcy5mcmFnbWVudD1lLmZyYWdtZW50fHxCZSk6KHRoaXMuc2NoZW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV8fHQ/ZToiZmlsZSJ9KGUsbyksdGhpcy5hdXRob3JpdHk9dHx8QmUsdGhpcy5wYXRoPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0P3RbMF0hPT1VZSYmKHQ9VWUrdCk6dD1VZX1yZXR1cm4gdH0odGhpcy5zY2hlbWUsbnx8QmUpLHRoaXMucXVlcnk9cnx8QmUsdGhpcy5mcmFnbWVudD1pfHxCZSxmdW5jdGlvbihlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIUtlLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFqZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihxZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9KHRoaXMsbykpfWdldCBmc1BhdGgoKXtyZXR1cm4gWmUodGhpcywhMSl9d2l0aChlKXtpZighZSlyZXR1cm4gdGhpcztsZXR7c2NoZW1lOnQsYXV0aG9yaXR5Om4scGF0aDpyLHF1ZXJ5OmksZnJhZ21lbnQ6b309ZTtyZXR1cm4gdm9pZCAwPT09dD90PXRoaXMuc2NoZW1lOm51bGw9PT10JiYodD1CZSksdm9pZCAwPT09bj9uPXRoaXMuYXV0aG9yaXR5Om51bGw9PT1uJiYobj1CZSksdm9pZCAwPT09cj9yPXRoaXMucGF0aDpudWxsPT09ciYmKHI9QmUpLHZvaWQgMD09PWk/aT10aGlzLnF1ZXJ5Om51bGw9PT1pJiYoaT1CZSksdm9pZCAwPT09bz9vPXRoaXMuZnJhZ21lbnQ6bnVsbD09PW8mJihvPUJlKSx0PT09dGhpcy5zY2hlbWUmJm49PT10aGlzLmF1dGhvcml0eSYmcj09PXRoaXMucGF0aCYmaT09PXRoaXMucXVlcnkmJm89PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IHplKHQsbixyLGksbyl9c3RhdGljIHBhcnNlKGUsdD0hMSl7Y29uc3Qgbj0kZS5leGVjKGUpO3JldHVybiBuP25ldyB6ZShuWzJdfHxCZSx0dChuWzRdfHxCZSksdHQobls1XXx8QmUpLHR0KG5bN118fEJlKSx0dChuWzldfHxCZSksdCk6bmV3IHplKEJlLEJlLEJlLEJlLEJlKX1zdGF0aWMgZmlsZShlKXtsZXQgdD1CZTtpZihUJiYoZT1lLnJlcGxhY2UoL1xcL2csVWUpKSxlWzBdPT09VWUmJmVbMV09PT1VZSl7Y29uc3Qgbj1lLmluZGV4T2YoVWUsMik7LTE9PT1uPyh0PWUuc3Vic3RyaW5nKDIpLGU9VWUpOih0PWUuc3Vic3RyaW5nKDIsbiksZT1lLnN1YnN0cmluZyhuKXx8VWUpfXJldHVybiBuZXcgemUoImZpbGUiLHQsZSxCZSxCZSl9c3RhdGljIGZyb20oZSx0KXtyZXR1cm4gbmV3IHplKGUuc2NoZW1lLGUuYXV0aG9yaXR5LGUucGF0aCxlLnF1ZXJ5LGUuZnJhZ21lbnQsdCl9c3RhdGljIGpvaW5QYXRoKHQsLi4ubil7aWYoIXQucGF0aCl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IGNhbm5vdCBjYWxsIGpvaW5QYXRoIG9uIFVSSSB3aXRob3V0IHBhdGgiKTtsZXQgcjtyZXR1cm4gcj1UJiYiZmlsZSI9PT10LnNjaGVtZT9lLmZpbGUoRmUuam9pbihaZSh0LCEwKSwuLi5uKSkucGF0aDpEZS5qb2luKHQucGF0aCwuLi5uKSx0LndpdGgoe3BhdGg6cn0pfXRvU3RyaW5nKGU9ITEpe3JldHVybiBZZSh0aGlzLGUpfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUodCl7dmFyIG4scjtpZih0KXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4gdDt7Y29uc3QgZT1uZXcgemUodCk7cmV0dXJuIGUuX2Zvcm1hdHRlZD1udWxsIT09KG49dC5leHRlcm5hbCkmJnZvaWQgMCE9PW4/bjpudWxsLGUuX2ZzUGF0aD10Ll9zZXA9PT1IZSYmbnVsbCE9PShyPXQuZnNQYXRoKSYmdm9pZCAwIT09cj9yOm51bGwsZX19cmV0dXJuIHR9fTtjb25zdCBIZT1UPzE6dm9pZCAwO2NsYXNzIHplIGV4dGVuZHMgV2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Zvcm1hdHRlZD1udWxsLHRoaXMuX2ZzUGF0aD1udWxsfWdldCBmc1BhdGgoKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPVplKHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9dG9TdHJpbmcoZT0hMSl7cmV0dXJuIGU/WWUodGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1ZZSh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX10b0pTT04oKXtjb25zdCBlPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihlLmZzUGF0aD10aGlzLl9mc1BhdGgsZS5fc2VwPUhlKSx0aGlzLl9mb3JtYXR0ZWQmJihlLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoZS5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihlLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihlLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKGUucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKGUuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksZX19Y29uc3QgR2U9ezU4OiIlM0EiLDQ3OiIlMkYiLDYzOiIlM0YiLDM1OiIlMjMiLDkxOiIlNUIiLDkzOiIlNUQiLDY0OiIlNDAiLDMzOiIlMjEiLDM2OiIlMjQiLDM4OiIlMjYiLDM5OiIlMjciLDQwOiIlMjgiLDQxOiIlMjkiLDQyOiIlMkEiLDQzOiIlMkIiLDQ0OiIlMkMiLDU5OiIlM0IiLDYxOiIlM0QiLDMyOiIlMjAifTtmdW5jdGlvbiBKZShlLHQsbil7bGV0IHIsaT0tMTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQobyk7aWYocz49OTcmJnM8PTEyMnx8cz49NjUmJnM8PTkwfHxzPj00OCYmczw9NTd8fDQ1PT09c3x8NDY9PT1zfHw5NT09PXN8fDEyNj09PXN8fHQmJjQ3PT09c3x8biYmOTE9PT1zfHxuJiY5Mz09PXN8fG4mJjU4PT09cyktMSE9PWkmJihyKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcoaSxvKSksaT0tMSksdm9pZCAwIT09ciYmKHIrPWUuY2hhckF0KG8pKTtlbHNle3ZvaWQgMD09PXImJihyPWUuc3Vic3RyKDAsbykpO2NvbnN0IHQ9R2Vbc107dm9pZCAwIT09dD8oLTEhPT1pJiYocis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKGksbykpLGk9LTEpLHIrPXQpOi0xPT09aSYmKGk9byl9fXJldHVybi0xIT09aSYmKHIrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhpKSkpLHZvaWQgMCE9PXI/cjplfWZ1bmN0aW9uIFhlKGUpe2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTszNT09PXJ8fDYzPT09cj8odm9pZCAwPT09dCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9R2Vbcl0pOnZvaWQgMCE9PXQmJih0Kz1lW25dKX1yZXR1cm4gdm9pZCAwIT09dD90OmV9ZnVuY3Rpb24gWmUoZSx0KXtsZXQgbjtyZXR1cm4gbj1lLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiYiZmlsZSI9PT1lLnNjaGVtZT9gLy8ke2UuYXV0aG9yaXR5fSR7ZS5wYXRofWA6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3Q/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aCxUJiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gWWUoZSx0KXtjb25zdCBuPXQ/WGU6SmU7bGV0IHI9IiIse3NjaGVtZTppLGF1dGhvcml0eTpvLHBhdGg6cyxxdWVyeTphLGZyYWdtZW50Omx9PWU7aWYoaSYmKHIrPWkscis9IjoiKSwob3x8ImZpbGUiPT09aSkmJihyKz1VZSxyKz1VZSksbyl7bGV0IGU9by5pbmRleE9mKCJAIik7aWYoLTEhPT1lKXtjb25zdCB0PW8uc3Vic3RyKDAsZSk7bz1vLnN1YnN0cihlKzEpLGU9dC5sYXN0SW5kZXhPZigiOiIpLC0xPT09ZT9yKz1uKHQsITEsITEpOihyKz1uKHQuc3Vic3RyKDAsZSksITEsITEpLHIrPSI6IixyKz1uKHQuc3Vic3RyKGUrMSksITEsITApKSxyKz0iQCJ9bz1vLnRvTG93ZXJDYXNlKCksZT1vLmxhc3RJbmRleE9mKCI6IiksLTE9PT1lP3IrPW4obywhMSwhMCk6KHIrPW4oby5zdWJzdHIoMCxlKSwhMSwhMCkscis9by5zdWJzdHIoZSkpfWlmKHMpe2lmKHMubGVuZ3RoPj0zJiY0Nz09PXMuY2hhckNvZGVBdCgwKSYmNTg9PT1zLmNoYXJDb2RlQXQoMikpe2NvbnN0IGU9cy5jaGFyQ29kZUF0KDEpO2U+PTY1JiZlPD05MCYmKHM9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUoZSszMil9OiR7cy5zdWJzdHIoMyl9YCl9ZWxzZSBpZihzLmxlbmd0aD49MiYmNTg9PT1zLmNoYXJDb2RlQXQoMSkpe2NvbnN0IGU9cy5jaGFyQ29kZUF0KDApO2U+PTY1JiZlPD05MCYmKHM9YCR7U3RyaW5nLmZyb21DaGFyQ29kZShlKzMyKX06JHtzLnN1YnN0cigyKX1gKX1yKz1uKHMsITAsITEpfXJldHVybiBhJiYocis9Ij8iLHIrPW4oYSwhMSwhMSkpLGwmJihyKz0iIyIscis9dD9sOkplKGwsITEsITEpKSxyfWZ1bmN0aW9uIFFlKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHQpe3JldHVybiBlLmxlbmd0aD4zP2Uuc3Vic3RyKDAsMykrUWUoZS5zdWJzdHIoMykpOmV9fWNvbnN0IGV0PS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIHR0KGUpe3JldHVybiBlLm1hdGNoKGV0KT9lLnJlcGxhY2UoZXQsKGU9PlFlKGUpKSk6ZX1sZXQgbnQ9Y2xhc3MgZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMubGluZU51bWJlcj1lLHRoaXMuY29sdW1uPXR9d2l0aCh0PXRoaXMubGluZU51bWJlcixuPXRoaXMuY29sdW1uKXtyZXR1cm4gdD09PXRoaXMubGluZU51bWJlciYmbj09PXRoaXMuY29sdW1uP3RoaXM6bmV3IGUodCxuKX1kZWx0YShlPTAsdD0wKXtyZXR1cm4gdGhpcy53aXRoKHRoaXMubGluZU51bWJlcitlLHRoaXMuY29sdW1uK3QpfWVxdWFscyh0KXtyZXR1cm4gZS5lcXVhbHModGhpcyx0KX1zdGF0aWMgZXF1YWxzKGUsdCl7cmV0dXJuIWUmJiF0fHwhIWUmJiEhdCYmZS5saW5lTnVtYmVyPT09dC5saW5lTnVtYmVyJiZlLmNvbHVtbj09PXQuY29sdW1ufWlzQmVmb3JlKHQpe3JldHVybiBlLmlzQmVmb3JlKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlKGUsdCl7cmV0dXJuIGUubGluZU51bWJlcjx0LmxpbmVOdW1iZXJ8fCEodC5saW5lTnVtYmVyPGUubGluZU51bWJlcikmJmUuY29sdW1uPHQuY29sdW1ufWlzQmVmb3JlT3JFcXVhbCh0KXtyZXR1cm4gZS5pc0JlZm9yZU9yRXF1YWwodGhpcyx0KX1zdGF0aWMgaXNCZWZvcmVPckVxdWFsKGUsdCl7cmV0dXJuIGUubGluZU51bWJlcjx0LmxpbmVOdW1iZXJ8fCEodC5saW5lTnVtYmVyPGUubGluZU51bWJlcikmJmUuY29sdW1uPD10LmNvbHVtbn1zdGF0aWMgY29tcGFyZShlLHQpe2NvbnN0IG49MHxlLmxpbmVOdW1iZXIscj0wfHQubGluZU51bWJlcjtpZihuPT09cil7cmV0dXJuKDB8ZS5jb2x1bW4pLSgwfHQuY29sdW1uKX1yZXR1cm4gbi1yfWNsb25lKCl7cmV0dXJuIG5ldyBlKHRoaXMubGluZU51bWJlcix0aGlzLmNvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5saW5lTnVtYmVyKyIsIit0aGlzLmNvbHVtbisiKSJ9c3RhdGljIGxpZnQodCl7cmV0dXJuIG5ldyBlKHQubGluZU51bWJlcix0LmNvbHVtbil9c3RhdGljIGlzSVBvc2l0aW9uKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUubGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLmNvbHVtbn19LHJ0PWNsYXNzIGV7Y29uc3RydWN0b3IoZSx0LG4scil7ZT5ufHxlPT09biYmdD5yPyh0aGlzLnN0YXJ0TGluZU51bWJlcj1uLHRoaXMuc3RhcnRDb2x1bW49cix0aGlzLmVuZExpbmVOdW1iZXI9ZSx0aGlzLmVuZENvbHVtbj10KToodGhpcy5zdGFydExpbmVOdW1iZXI9ZSx0aGlzLnN0YXJ0Q29sdW1uPXQsdGhpcy5lbmRMaW5lTnVtYmVyPW4sdGhpcy5lbmRDb2x1bW49cil9aXNFbXB0eSgpe3JldHVybiBlLmlzRW1wdHkodGhpcyl9c3RhdGljIGlzRW1wdHkoZSl7cmV0dXJuIGUuc3RhcnRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZlLnN0YXJ0Q29sdW1uPT09ZS5lbmRDb2x1bW59Y29udGFpbnNQb3NpdGlvbih0KXtyZXR1cm4gZS5jb250YWluc1Bvc2l0aW9uKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUG9zaXRpb24oZSx0KXtyZXR1cm4hKHQubGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5saW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQubGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmNvbHVtbjxlLnN0YXJ0Q29sdW1uKSYmISh0LmxpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuY29sdW1uPmUuZW5kQ29sdW1uKSl9c3RhdGljIHN0cmljdENvbnRhaW5zUG9zaXRpb24oZSx0KXtyZXR1cm4hKHQubGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5saW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQubGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmNvbHVtbjw9ZS5zdGFydENvbHVtbikmJiEodC5saW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmNvbHVtbj49ZS5lbmRDb2x1bW4pKX1jb250YWluc1JhbmdlKHQpe3JldHVybiBlLmNvbnRhaW5zUmFuZ2UodGhpcyx0KX1zdGF0aWMgY29udGFpbnNSYW5nZShlLHQpe3JldHVybiEodC5zdGFydExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW48ZS5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbj5lLmVuZENvbHVtbikpKX1zdHJpY3RDb250YWluc1JhbmdlKHQpe3JldHVybiBlLnN0cmljdENvbnRhaW5zUmFuZ2UodGhpcyx0KX1zdGF0aWMgc3RyaWN0Q29udGFpbnNSYW5nZShlLHQpe3JldHVybiEodC5zdGFydExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW48PWUuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW4+PWUuZW5kQ29sdW1uKSkpfXBsdXNSYW5nZSh0KXtyZXR1cm4gZS5wbHVzUmFuZ2UodGhpcyx0KX1zdGF0aWMgcGx1c1JhbmdlKHQsbil7bGV0IHIsaSxvLHM7cmV0dXJuIG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyPyhyPW4uc3RhcnRMaW5lTnVtYmVyLGk9bi5zdGFydENvbHVtbik6bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlcj8ocj1uLnN0YXJ0TGluZU51bWJlcixpPU1hdGgubWluKG4uc3RhcnRDb2x1bW4sdC5zdGFydENvbHVtbikpOihyPXQuc3RhcnRMaW5lTnVtYmVyLGk9dC5zdGFydENvbHVtbiksbi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcj8obz1uLmVuZExpbmVOdW1iZXIscz1uLmVuZENvbHVtbik6bi5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyPyhvPW4uZW5kTGluZU51bWJlcixzPU1hdGgubWF4KG4uZW5kQ29sdW1uLHQuZW5kQ29sdW1uKSk6KG89dC5lbmRMaW5lTnVtYmVyLHM9dC5lbmRDb2x1bW4pLG5ldyBlKHIsaSxvLHMpfWludGVyc2VjdFJhbmdlcyh0KXtyZXR1cm4gZS5pbnRlcnNlY3RSYW5nZXModGhpcyx0KX1zdGF0aWMgaW50ZXJzZWN0UmFuZ2VzKHQsbil7bGV0IHI9dC5zdGFydExpbmVOdW1iZXIsaT10LnN0YXJ0Q29sdW1uLG89dC5lbmRMaW5lTnVtYmVyLHM9dC5lbmRDb2x1bW47Y29uc3QgYT1uLnN0YXJ0TGluZU51bWJlcixsPW4uc3RhcnRDb2x1bW4sdT1uLmVuZExpbmVOdW1iZXIsYz1uLmVuZENvbHVtbjtyZXR1cm4gcjxhPyhyPWEsaT1sKTpyPT09YSYmKGk9TWF0aC5tYXgoaSxsKSksbz51PyhvPXUscz1jKTpvPT09dSYmKHM9TWF0aC5taW4ocyxjKSkscj5vfHxyPT09byYmaT5zP251bGw6bmV3IGUocixpLG8scyl9ZXF1YWxzUmFuZ2UodCl7cmV0dXJuIGUuZXF1YWxzUmFuZ2UodGhpcyx0KX1zdGF0aWMgZXF1YWxzUmFuZ2UoZSx0KXtyZXR1cm4hZSYmIXR8fCEhZSYmISF0JiZlLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLnN0YXJ0Q29sdW1uPT09dC5zdGFydENvbHVtbiYmZS5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbj09PXQuZW5kQ29sdW1ufWdldEVuZFBvc2l0aW9uKCl7cmV0dXJuIGUuZ2V0RW5kUG9zaXRpb24odGhpcyl9c3RhdGljIGdldEVuZFBvc2l0aW9uKGUpe3JldHVybiBuZXcgbnQoZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uKX1nZXRTdGFydFBvc2l0aW9uKCl7cmV0dXJuIGUuZ2V0U3RhcnRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0U3RhcnRQb3NpdGlvbihlKXtyZXR1cm4gbmV3IG50KGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLmVuZExpbmVOdW1iZXIrIiwiK3RoaXMuZW5kQ29sdW1uKyJdIn1zZXRFbmRQb3NpdGlvbih0LG4pe3JldHVybiBuZXcgZSh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLHQsbil9c2V0U3RhcnRQb3NpdGlvbih0LG4pe3JldHVybiBuZXcgZSh0LG4sdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKX1jb2xsYXBzZVRvU3RhcnQoKXtyZXR1cm4gZS5jb2xsYXBzZVRvU3RhcnQodGhpcyl9c3RhdGljIGNvbGxhcHNlVG9TdGFydCh0KXtyZXR1cm4gbmV3IGUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbix0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uKX1jb2xsYXBzZVRvRW5kKCl7cmV0dXJuIGUuY29sbGFwc2VUb0VuZCh0aGlzKX1zdGF0aWMgY29sbGFwc2VUb0VuZCh0KXtyZXR1cm4gbmV3IGUodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbil9ZGVsdGEodCl7cmV0dXJuIG5ldyBlKHRoaXMuc3RhcnRMaW5lTnVtYmVyK3QsdGhpcy5zdGFydENvbHVtbix0aGlzLmVuZExpbmVOdW1iZXIrdCx0aGlzLmVuZENvbHVtbil9c3RhdGljIGZyb21Qb3NpdGlvbnModCxuPXQpe3JldHVybiBuZXcgZSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4sbi5saW5lTnVtYmVyLG4uY29sdW1uKX1zdGF0aWMgbGlmdCh0KXtyZXR1cm4gdD9uZXcgZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbik6bnVsbH1zdGF0aWMgaXNJUmFuZ2UoZSl7cmV0dXJuIGUmJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydENvbHVtbiYmIm51bWJlciI9PXR5cGVvZiBlLmVuZExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5lbmRDb2x1bW59c3RhdGljIGFyZUludGVyc2VjdGluZ09yVG91Y2hpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPHQuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBhcmVJbnRlcnNlY3RpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPD10LnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjw9ZS5zdGFydENvbHVtbil9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLHQpe2lmKGUmJnQpe2NvbnN0IG49MHxlLnN0YXJ0TGluZU51bWJlcixyPTB8dC5zdGFydExpbmVOdW1iZXI7aWYobj09PXIpe2NvbnN0IG49MHxlLnN0YXJ0Q29sdW1uLHI9MHx0LnN0YXJ0Q29sdW1uO2lmKG49PT1yKXtjb25zdCBuPTB8ZS5lbmRMaW5lTnVtYmVyLHI9MHx0LmVuZExpbmVOdW1iZXI7aWYobj09PXIpe3JldHVybigwfGUuZW5kQ29sdW1uKS0oMHx0LmVuZENvbHVtbil9cmV0dXJuIG4tcn1yZXR1cm4gbi1yfXJldHVybiBuLXJ9cmV0dXJuKGU/MTowKS0odD8xOjApfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdFbmRzKGUsdCl7cmV0dXJuIGUuZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj9lLmVuZENvbHVtbj09PXQuZW5kQ29sdW1uP2Uuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/ZS5zdGFydENvbHVtbi10LnN0YXJ0Q29sdW1uOmUuc3RhcnRMaW5lTnVtYmVyLXQuc3RhcnRMaW5lTnVtYmVyOmUuZW5kQ29sdW1uLXQuZW5kQ29sdW1uOmUuZW5kTGluZU51bWJlci10LmVuZExpbmVOdW1iZXJ9c3RhdGljIHNwYW5zTXVsdGlwbGVMaW5lcyhlKXtyZXR1cm4gZS5lbmRMaW5lTnVtYmVyPmUuc3RhcnRMaW5lTnVtYmVyfXRvSlNPTigpe3JldHVybiB0aGlzfX07dmFyIGl0O2Z1bmN0aW9uIG90KGUpe3JldHVybiBlPDA/MDplPjI1NT8yNTU6MHxlfWZ1bmN0aW9uIHN0KGUpe3JldHVybiBlPDA/MDplPjQyOTQ5NjcyOTU/NDI5NDk2NzI5NTowfGV9IWZ1bmN0aW9uKGUpe2UuaXNMZXNzVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gZTwwfSxlLmlzR3JlYXRlclRoYW49ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MH0sZS5pc05laXRoZXJMZXNzT3JHcmVhdGVyVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gMD09PWV9LGUuZ3JlYXRlclRoYW49MSxlLmxlc3NUaGFuPS0xLGUubmVpdGhlckxlc3NPckdyZWF0ZXJUaGFuPTB9KGl0fHwoaXQ9e30pKTtjbGFzcyBhdHtjb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlcz1lLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheShlLmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4PW5ldyBJbnQzMkFycmF5KDEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT0tMX1pbnNlcnRWYWx1ZXMoZSx0KXtlPXN0KGUpO2NvbnN0IG49dGhpcy52YWx1ZXMscj10aGlzLnByZWZpeFN1bSxpPXQubGVuZ3RoO3JldHVybiAwIT09aSYmKHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aCtpKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheSgwLGUpLDApLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KGUpLGUraSksdGhpcy52YWx1ZXMuc2V0KHQsZSksZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1zZXRWYWx1ZShlLHQpe3JldHVybiBlPXN0KGUpLHQ9c3QodCksdGhpcy52YWx1ZXNbZV0hPT10JiYodGhpcy52YWx1ZXNbZV09dCxlLTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPWUtMSksITApfXJlbW92ZVZhbHVlcyhlLHQpe2U9c3QoZSksdD1zdCh0KTtjb25zdCBuPXRoaXMudmFsdWVzLHI9dGhpcy5wcmVmaXhTdW07aWYoZT49bi5sZW5ndGgpcmV0dXJuITE7Y29uc3QgaT1uLmxlbmd0aC1lO3JldHVybiB0Pj1pJiYodD1pKSwwIT09dCYmKHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aC10KSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheSgwLGUpLDApLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KGUrdCksZSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1nZXRUb3RhbFN1bSgpe3JldHVybiAwPT09dGhpcy52YWx1ZXMubGVuZ3RoPzA6dGhpcy5fZ2V0UHJlZml4U3VtKHRoaXMudmFsdWVzLmxlbmd0aC0xKX1nZXRQcmVmaXhTdW0oZSl7cmV0dXJuIGU8MD8wOihlPXN0KGUpLHRoaXMuX2dldFByZWZpeFN1bShlKSl9X2dldFByZWZpeFN1bShlKXtpZihlPD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0pcmV0dXJuIHRoaXMucHJlZml4U3VtW2VdO2xldCB0PXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxOzA9PT10JiYodGhpcy5wcmVmaXhTdW1bMF09dGhpcy52YWx1ZXNbMF0sdCsrKSxlPj10aGlzLnZhbHVlcy5sZW5ndGgmJihlPXRoaXMudmFsdWVzLmxlbmd0aC0xKTtmb3IobGV0IG49dDtuPD1lO24rKyl0aGlzLnByZWZpeFN1bVtuXT10aGlzLnByZWZpeFN1bVtuLTFdK3RoaXMudmFsdWVzW25dO3JldHVybiB0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09TWF0aC5tYXgodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdLGUpLHRoaXMucHJlZml4U3VtW2VdfWdldEluZGV4T2YoZSl7ZT1NYXRoLmZsb29yKGUpLHRoaXMuZ2V0VG90YWxTdW0oKTtsZXQgdD0wLG49dGhpcy52YWx1ZXMubGVuZ3RoLTEscj0wLGk9MCxvPTA7Zm9yKDt0PD1uOylpZihyPXQrKG4tdCkvMnwwLGk9dGhpcy5wcmVmaXhTdW1bcl0sbz1pLXRoaXMudmFsdWVzW3JdLGU8byluPXItMTtlbHNle2lmKCEoZT49aSkpYnJlYWs7dD1yKzF9cmV0dXJuIG5ldyBsdChyLGUtbyl9fWNsYXNzIGx0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5pbmRleD1lLHRoaXMucmVtYWluZGVyPXQsdGhpcy5fcHJlZml4U3VtSW5kZXhPZlJlc3VsdEJyYW5kPXZvaWQgMCx0aGlzLmluZGV4PWUsdGhpcy5yZW1haW5kZXI9dH19Y2xhc3MgdXR7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGluZXM9dCx0aGlzLl9lb2w9bix0aGlzLl92ZXJzaW9uSWQ9cix0aGlzLl9saW5lU3RhcnRzPW51bGwsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX2xpbmVzLmxlbmd0aD0wfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb25JZH1nZXRUZXh0KCl7cmV0dXJuIG51bGw9PT10aGlzLl9jYWNoZWRUZXh0VmFsdWUmJih0aGlzLl9jYWNoZWRUZXh0VmFsdWU9dGhpcy5fbGluZXMuam9pbih0aGlzLl9lb2wpKSx0aGlzLl9jYWNoZWRUZXh0VmFsdWV9b25FdmVudHMoZSl7ZS5lb2wmJmUuZW9sIT09dGhpcy5fZW9sJiYodGhpcy5fZW9sPWUuZW9sLHRoaXMuX2xpbmVTdGFydHM9bnVsbCk7Y29uc3QgdD1lLmNoYW5nZXM7Zm9yKGNvbnN0IGUgb2YgdCl0aGlzLl9hY2NlcHREZWxldGVSYW5nZShlLnJhbmdlKSx0aGlzLl9hY2NlcHRJbnNlcnRUZXh0KG5ldyBudChlLnJhbmdlLnN0YXJ0TGluZU51bWJlcixlLnJhbmdlLnN0YXJ0Q29sdW1uKSxlLnRleHQpO3RoaXMuX3ZlcnNpb25JZD1lLnZlcnNpb25JZCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1fZW5zdXJlTGluZVN0YXJ0cygpe2lmKCF0aGlzLl9saW5lU3RhcnRzKXtjb25zdCBlPXRoaXMuX2VvbC5sZW5ndGgsdD10aGlzLl9saW5lcy5sZW5ndGgsbj1uZXcgVWludDMyQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyluW3JdPXRoaXMuX2xpbmVzW3JdLmxlbmd0aCtlO3RoaXMuX2xpbmVTdGFydHM9bmV3IGF0KG4pfX1fc2V0TGluZVRleHQoZSx0KXt0aGlzLl9saW5lc1tlXT10LHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuc2V0VmFsdWUoZSx0aGlzLl9saW5lc1tlXS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aCl9X2FjY2VwdERlbGV0ZVJhbmdlKGUpe2lmKGUuc3RhcnRMaW5lTnVtYmVyIT09ZS5lbmRMaW5lTnVtYmVyKXRoaXMuX3NldExpbmVUZXh0KGUuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1tlLmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UoZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyLWUuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyhlLnN0YXJ0TGluZU51bWJlcixlLmVuZExpbmVOdW1iZXItZS5zdGFydExpbmVOdW1iZXIpO2Vsc2V7aWYoZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1uKXJldHVybjt0aGlzLl9zZXRMaW5lVGV4dChlLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKX19X2FjY2VwdEluc2VydFRleHQoZSx0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IG49dC5zcGxpdCgvXHJcbnxccnxcbi8pO2lmKDE9PT1uLmxlbmd0aClyZXR1cm4gdm9pZCB0aGlzLl9zZXRMaW5lVGV4dChlLmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5jb2x1bW4tMSkrblswXSt0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpKTtuW24ubGVuZ3RoLTFdKz10aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpLHRoaXMuX3NldExpbmVUZXh0KGUubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLmNvbHVtbi0xKStuWzBdKTtjb25zdCByPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aC0xKTtmb3IobGV0IHQ9MTt0PG4ubGVuZ3RoO3QrKyl0aGlzLl9saW5lcy5zcGxpY2UoZS5saW5lTnVtYmVyK3QtMSwwLG5bdF0pLHJbdC0xXT1uW3RdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoO3RoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuaW5zZXJ0VmFsdWVzKGUubGluZU51bWJlcixyKX19Y29uc3QgY3Q9ZnVuY3Rpb24oZT0iIil7bGV0IHQ9IigtP1xcZCpcXC5cXGRcXHcqKXwoW14iO2Zvcihjb25zdCBuIG9mImB+IUAjJCVeJiooKS09K1t7XX1cXHw7OidcIiwuPD4vPyIpZS5pbmRleE9mKG4pPj0wfHwodCs9IlxcIituKTtyZXR1cm4gdCs9Ilxcc10rKSIsbmV3IFJlZ0V4cCh0LCJnIil9KCk7Y29uc3QgaHQ9bmV3IGc7ZnVuY3Rpb24gZHQoZSx0LG4scixpKXtpZihpfHwoaT1sLmZpcnN0KGh0KSksbi5sZW5ndGg+aS5tYXhMZW4pe2xldCBvPWUtaS5tYXhMZW4vMjtyZXR1cm4gbzwwP289MDpyKz1vLGR0KGUsdCxuPW4uc3Vic3RyaW5nKG8sZStpLm1heExlbi8yKSxyLGkpfWNvbnN0IG89RGF0ZS5ub3coKSxzPWUtMS1yO2xldCBhPS0xLHU9bnVsbDtmb3IobGV0IGU9MTshKERhdGUubm93KCktbz49aS50aW1lQnVkZ2V0KTtlKyspe2NvbnN0IHI9cy1pLndpbmRvd1NpemUqZTt0Lmxhc3RJbmRleD1NYXRoLm1heCgwLHIpO2NvbnN0IG89ZnQodCxuLHMsYSk7aWYoIW8mJnUpYnJlYWs7aWYodT1vLHI8PTApYnJlYWs7YT1yfWlmKHUpe2NvbnN0IGU9e3dvcmQ6dVswXSxzdGFydENvbHVtbjpyKzErdS5pbmRleCxlbmRDb2x1bW46cisxK3UuaW5kZXgrdVswXS5sZW5ndGh9O3JldHVybiB0Lmxhc3RJbmRleD0wLGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZnQoZSx0LG4scil7bGV0IGk7Zm9yKDtpPWUuZXhlYyh0KTspe2NvbnN0IHQ9aS5pbmRleHx8MDtpZih0PD1uJiZlLmxhc3RJbmRleD49bilyZXR1cm4gaTtpZihyPjAmJnQ+cilyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH1odC51bnNoaWZ0KHttYXhMZW46MWUzLHdpbmRvd1NpemU6MTUsdGltZUJ1ZGdldDoxNTB9KTtjbGFzcyBtdHtjb25zdHJ1Y3RvcihlKXtjb25zdCB0PW90KGUpO3RoaXMuX2RlZmF1bHRWYWx1ZT10LHRoaXMuX2FzY2lpTWFwPW10Ll9jcmVhdGVBc2NpaU1hcCh0KSx0aGlzLl9tYXA9bmV3IE1hcH1zdGF0aWMgX2NyZWF0ZUFzY2lpTWFwKGUpe2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KTtyZXR1cm4gdC5maWxsKGUpLHR9c2V0KGUsdCl7Y29uc3Qgbj1vdCh0KTtlPj0wJiZlPDI1Nj90aGlzLl9hc2NpaU1hcFtlXT1uOnRoaXMuX21hcC5zZXQoZSxuKX1nZXQoZSl7cmV0dXJuIGU+PTAmJmU8MjU2P3RoaXMuX2FzY2lpTWFwW2VdOnRoaXMuX21hcC5nZXQoZSl8fHRoaXMuX2RlZmF1bHRWYWx1ZX1jbGVhcigpe3RoaXMuX2FzY2lpTWFwLmZpbGwodGhpcy5fZGVmYXVsdFZhbHVlKSx0aGlzLl9tYXAuY2xlYXIoKX19Y2xhc3MgZ3R7Y29uc3RydWN0b3IoZSx0LG4pe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZSp0KTtmb3IobGV0IGk9MCxvPWUqdDtpPG87aSsrKXJbaV09bjt0aGlzLl9kYXRhPXIsdGhpcy5yb3dzPWUsdGhpcy5jb2xzPXR9Z2V0KGUsdCl7cmV0dXJuIHRoaXMuX2RhdGFbZSp0aGlzLmNvbHMrdF19c2V0KGUsdCxuKXt0aGlzLl9kYXRhW2UqdGhpcy5jb2xzK3RdPW59fWNsYXNzIHB0e2NvbnN0cnVjdG9yKGUpe2xldCB0PTAsbj0wO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3RbaSxvLHNdPWVbcl07bz50JiYodD1vKSxpPm4mJihuPWkpLHM+biYmKG49cyl9dCsrLG4rKztjb25zdCByPW5ldyBndChuLHQsMCk7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdFtuLGksb109ZVt0XTtyLnNldChuLGksbyl9dGhpcy5fc3RhdGVzPXIsdGhpcy5fbWF4Q2hhckNvZGU9dH1uZXh0U3RhdGUoZSx0KXtyZXR1cm4gdDwwfHx0Pj10aGlzLl9tYXhDaGFyQ29kZT8wOnRoaXMuX3N0YXRlcy5nZXQoZSx0KX19bGV0IHZ0PW51bGw7bGV0IGJ0PW51bGw7Y2xhc3MgeXR7c3RhdGljIF9jcmVhdGVMaW5rKGUsdCxuLHIsaSl7bGV0IG89aS0xO2Rve2NvbnN0IG49dC5jaGFyQ29kZUF0KG8pO2lmKDIhPT1lLmdldChuKSlicmVhaztvLS19d2hpbGUobz5yKTtpZihyPjApe2NvbnN0IGU9dC5jaGFyQ29kZUF0KHItMSksbj10LmNoYXJDb2RlQXQobyk7KDQwPT09ZSYmNDE9PT1ufHw5MT09PWUmJjkzPT09bnx8MTIzPT09ZSYmMTI1PT09bikmJm8tLX1yZXR1cm57cmFuZ2U6e3N0YXJ0TGluZU51bWJlcjpuLHN0YXJ0Q29sdW1uOnIrMSxlbmRMaW5lTnVtYmVyOm4sZW5kQ29sdW1uOm8rMn0sdXJsOnQuc3Vic3RyaW5nKHIsbysxKX19c3RhdGljIGNvbXB1dGVMaW5rcyhlLHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXZ0JiYodnQ9bmV3IHB0KFtbMSwxMDQsMl0sWzEsNzIsMl0sWzEsMTAyLDZdLFsxLDcwLDZdLFsyLDExNiwzXSxbMiw4NCwzXSxbMywxMTYsNF0sWzMsODQsNF0sWzQsMTEyLDVdLFs0LDgwLDVdLFs1LDExNSw5XSxbNSw4Myw5XSxbNSw1OCwxMF0sWzYsMTA1LDddLFs2LDczLDddLFs3LDEwOCw4XSxbNyw3Niw4XSxbOCwxMDEsOV0sWzgsNjksOV0sWzksNTgsMTBdLFsxMCw0NywxMV0sWzExLDQ3LDEyXV0pKSx2dH0oKSl7Y29uc3Qgbj1mdW5jdGlvbigpe2lmKG51bGw9PT1idCl7YnQ9bmV3IG10KDApO2NvbnN0IGU9IiBcdDw+J1wi44CB44CC772h772k77yM77yO77ya77yb4oCY44CI44CM44CO44CU77yI77y7772b772i772j772d77y977yJ44CV44CP44CN44CJ4oCZ772A772e4oCmIjtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylidC5zZXQoZS5jaGFyQ29kZUF0KHQpLDEpO2NvbnN0IHQ9Ii4sOzoiO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWJ0LnNldCh0LmNoYXJDb2RlQXQoZSksMil9cmV0dXJuIGJ0fSgpLHI9W107Zm9yKGxldCBpPTEsbz1lLmdldExpbmVDb3VudCgpO2k8PW87aSsrKXtjb25zdCBvPWUuZ2V0TGluZUNvbnRlbnQoaSkscz1vLmxlbmd0aDtsZXQgYT0wLGw9MCx1PTAsYz0xLGg9ITEsZD0hMSxmPSExLG09ITE7Zm9yKDthPHM7KXtsZXQgZT0hMTtjb25zdCBzPW8uY2hhckNvZGVBdChhKTtpZigxMz09PWMpe2xldCB0O3N3aXRjaChzKXtjYXNlIDQwOmg9ITAsdD0wO2JyZWFrO2Nhc2UgNDE6dD1oPzA6MTticmVhaztjYXNlIDkxOmY9ITAsZD0hMCx0PTA7YnJlYWs7Y2FzZSA5MzpmPSExLHQ9ZD8wOjE7YnJlYWs7Y2FzZSAxMjM6bT0hMCx0PTA7YnJlYWs7Y2FzZSAxMjU6dD1tPzA6MTticmVhaztjYXNlIDM5OmNhc2UgMzQ6Y2FzZSA5Njp0PXU9PT1zPzE6Mzk9PT11fHwzND09PXV8fDk2PT09dT8wOjE7YnJlYWs7Y2FzZSA0Mjp0PTQyPT09dT8xOjA7YnJlYWs7Y2FzZSAxMjQ6dD0xMjQ9PT11PzE6MDticmVhaztjYXNlIDMyOnQ9Zj8wOjE7YnJlYWs7ZGVmYXVsdDp0PW4uZ2V0KHMpfTE9PT10JiYoci5wdXNoKHl0Ll9jcmVhdGVMaW5rKG4sbyxpLGwsYSkpLGU9ITApfWVsc2UgaWYoMTI9PT1jKXtsZXQgdDs5MT09PXM/KGQ9ITAsdD0wKTp0PW4uZ2V0KHMpLDE9PT10P2U9ITA6Yz0xM31lbHNlIGM9dC5uZXh0U3RhdGUoYyxzKSwwPT09YyYmKGU9ITApO2UmJihjPTEsaD0hMSxkPSExLG09ITEsbD1hKzEsdT1zKSxhKyt9MTM9PT1jJiZyLnB1c2goeXQuX2NyZWF0ZUxpbmsobixvLGksbCxzKSl9cmV0dXJuIHJ9fWNsYXNzIEN0e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGVmYXVsdFZhbHVlU2V0PVtbInRydWUiLCJmYWxzZSJdLFsiVHJ1ZSIsIkZhbHNlIl0sWyJQcml2YXRlIiwiUHVibGljIiwiRnJpZW5kIiwiUmVhZE9ubHkiLCJQYXJ0aWFsIiwiUHJvdGVjdGVkIiwiV3JpdGVPbmx5Il0sWyJwdWJsaWMiLCJwcm90ZWN0ZWQiLCJwcml2YXRlIl1dfW5hdmlnYXRlVmFsdWVTZXQoZSx0LG4scixpKXtpZihlJiZ0KXtjb25zdCBuPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KHQsaSk7aWYobilyZXR1cm57cmFuZ2U6ZSx2YWx1ZTpufX1pZihuJiZyKXtjb25zdCBlPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KHIsaSk7aWYoZSlyZXR1cm57cmFuZ2U6bix2YWx1ZTplfX1yZXR1cm4gbnVsbH1kb05hdmlnYXRlVmFsdWVTZXQoZSx0KXtjb25zdCBuPXRoaXMubnVtYmVyUmVwbGFjZShlLHQpO3JldHVybiBudWxsIT09bj9uOnRoaXMudGV4dFJlcGxhY2UoZSx0KX1udW1iZXJSZXBsYWNlKGUsdCl7Y29uc3Qgbj1NYXRoLnBvdygxMCxlLmxlbmd0aC0oZS5sYXN0SW5kZXhPZigiLiIpKzEpKTtsZXQgcj1OdW1iZXIoZSk7Y29uc3QgaT1wYXJzZUZsb2F0KGUpO3JldHVybiBpc05hTihyKXx8aXNOYU4oaSl8fHIhPT1pP251bGw6MCE9PXJ8fHQ/KHI9TWF0aC5mbG9vcihyKm4pLHIrPXQ/bjotbixTdHJpbmcoci9uKSk6bnVsbH10ZXh0UmVwbGFjZShlLHQpe3JldHVybiB0aGlzLnZhbHVlU2V0c1JlcGxhY2UodGhpcy5fZGVmYXVsdFZhbHVlU2V0LGUsdCl9dmFsdWVTZXRzUmVwbGFjZShlLHQsbil7bGV0IHI9bnVsbDtmb3IobGV0IGk9MCxvPWUubGVuZ3RoO251bGw9PT1yJiZpPG87aSsrKXI9dGhpcy52YWx1ZVNldFJlcGxhY2UoZVtpXSx0LG4pO3JldHVybiByfXZhbHVlU2V0UmVwbGFjZShlLHQsbil7bGV0IHI9ZS5pbmRleE9mKHQpO3JldHVybiByPj0wPyhyKz1uPzE6LTEscjwwP3I9ZS5sZW5ndGgtMTpyJT1lLmxlbmd0aCxlW3JdKTpudWxsfX1DdC5JTlNUQU5DRT1uZXcgQ3Q7Y29uc3QgX3Q9T2JqZWN0LmZyZWV6ZSgoZnVuY3Rpb24oZSx0KXtjb25zdCBuPXNldFRpbWVvdXQoZS5iaW5kKHQpLDApO3JldHVybntkaXNwb3NlKCl7Y2xlYXJUaW1lb3V0KG4pfX19KSk7dmFyIFN0OyFmdW5jdGlvbihlKXtlLmlzQ2FuY2VsbGF0aW9uVG9rZW49ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lLk5vbmV8fHQ9PT1lLkNhbmNlbGxlZHx8KHQgaW5zdGFuY2VvZiB3dHx8ISghdHx8Im9iamVjdCIhPXR5cGVvZiB0KSYmKCJib29sZWFuIj09dHlwZW9mIHQuaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKSl9LGUuTm9uZT1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMSxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpELk5vbmV9KSxlLkNhbmNlbGxlZD1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMCxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpfdH0pfShTdHx8KFN0PXt9KSk7Y2xhc3Mgd3R7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0NhbmNlbGxlZD0hMSx0aGlzLl9lbWl0dGVyPW51bGx9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP190Oih0aGlzLl9lbWl0dGVyfHwodGhpcy5fZW1pdHRlcj1uZXcgVSksdGhpcy5fZW1pdHRlci5ldmVudCl9ZGlzcG9zZSgpe3RoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmRpc3Bvc2UoKSx0aGlzLl9lbWl0dGVyPW51bGwpfX1jbGFzcyBBdHtjb25zdHJ1Y3RvcihlKXt0aGlzLl90b2tlbj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPWUmJmUub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQodGhpcy5jYW5jZWwsdGhpcyl9Z2V0IHRva2VuKCl7cmV0dXJuIHRoaXMuX3Rva2VufHwodGhpcy5fdG9rZW49bmV3IHd0KSx0aGlzLl90b2tlbn1jYW5jZWwoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIHd0JiZ0aGlzLl90b2tlbi5jYW5jZWwoKTp0aGlzLl90b2tlbj1TdC5DYW5jZWxsZWR9ZGlzcG9zZShlPSExKXt2YXIgdDtlJiZ0aGlzLmNhbmNlbCgpLG51bGw9PT0odD10aGlzLl9wYXJlbnRMaXN0ZW5lcil8fHZvaWQgMD09PXR8fHQuZGlzcG9zZSgpLHRoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2Ygd3QmJnRoaXMuX3Rva2VuLmRpc3Bvc2UoKTp0aGlzLl90b2tlbj1TdC5Ob25lfX1jbGFzcyB4dHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2tleUNvZGVUb1N0cj1bXSx0aGlzLl9zdHJUb0tleUNvZGU9T2JqZWN0LmNyZWF0ZShudWxsKX1kZWZpbmUoZSx0KXt0aGlzLl9rZXlDb2RlVG9TdHJbZV09dCx0aGlzLl9zdHJUb0tleUNvZGVbdC50b0xvd2VyQ2FzZSgpXT1lfWtleUNvZGVUb1N0cihlKXtyZXR1cm4gdGhpcy5fa2V5Q29kZVRvU3RyW2VdfXN0clRvS2V5Q29kZShlKXtyZXR1cm4gdGhpcy5fc3RyVG9LZXlDb2RlW2UudG9Mb3dlckNhc2UoKV18fDB9fWNvbnN0IEV0PW5ldyB4dCxMdD1uZXcgeHQsTnQ9bmV3IHh0LGt0PW5ldyBBcnJheSgyMzApLFJ0PU9iamVjdC5jcmVhdGUobnVsbCksVHQ9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgT3Q7IWZ1bmN0aW9uKCl7Y29uc3QgZT0iIix0PVtbMSwwLCJOb25lIiwwLCJ1bmtub3duIiwwLCJWS19VTktOT1dOIixlLGVdLFsxLDEsIkh5cGVyIiwwLGUsMCxlLGUsZV0sWzEsMiwiU3VwZXIiLDAsZSwwLGUsZSxlXSxbMSwzLCJGbiIsMCxlLDAsZSxlLGVdLFsxLDQsIkZuTG9jayIsMCxlLDAsZSxlLGVdLFsxLDUsIlN1c3BlbmQiLDAsZSwwLGUsZSxlXSxbMSw2LCJSZXN1bWUiLDAsZSwwLGUsZSxlXSxbMSw3LCJUdXJibyIsMCxlLDAsZSxlLGVdLFsxLDgsIlNsZWVwIiwwLGUsMCwiVktfU0xFRVAiLGUsZV0sWzEsOSwiV2FrZVVwIiwwLGUsMCxlLGUsZV0sWzAsMTAsIktleUEiLDMxLCJBIiw2NSwiVktfQSIsZSxlXSxbMCwxMSwiS2V5QiIsMzIsIkIiLDY2LCJWS19CIixlLGVdLFswLDEyLCJLZXlDIiwzMywiQyIsNjcsIlZLX0MiLGUsZV0sWzAsMTMsIktleUQiLDM0LCJEIiw2OCwiVktfRCIsZSxlXSxbMCwxNCwiS2V5RSIsMzUsIkUiLDY5LCJWS19FIixlLGVdLFswLDE1LCJLZXlGIiwzNiwiRiIsNzAsIlZLX0YiLGUsZV0sWzAsMTYsIktleUciLDM3LCJHIiw3MSwiVktfRyIsZSxlXSxbMCwxNywiS2V5SCIsMzgsIkgiLDcyLCJWS19IIixlLGVdLFswLDE4LCJLZXlJIiwzOSwiSSIsNzMsIlZLX0kiLGUsZV0sWzAsMTksIktleUoiLDQwLCJKIiw3NCwiVktfSiIsZSxlXSxbMCwyMCwiS2V5SyIsNDEsIksiLDc1LCJWS19LIixlLGVdLFswLDIxLCJLZXlMIiw0MiwiTCIsNzYsIlZLX0wiLGUsZV0sWzAsMjIsIktleU0iLDQzLCJNIiw3NywiVktfTSIsZSxlXSxbMCwyMywiS2V5TiIsNDQsIk4iLDc4LCJWS19OIixlLGVdLFswLDI0LCJLZXlPIiw0NSwiTyIsNzksIlZLX08iLGUsZV0sWzAsMjUsIktleVAiLDQ2LCJQIiw4MCwiVktfUCIsZSxlXSxbMCwyNiwiS2V5USIsNDcsIlEiLDgxLCJWS19RIixlLGVdLFswLDI3LCJLZXlSIiw0OCwiUiIsODIsIlZLX1IiLGUsZV0sWzAsMjgsIktleVMiLDQ5LCJTIiw4MywiVktfUyIsZSxlXSxbMCwyOSwiS2V5VCIsNTAsIlQiLDg0LCJWS19UIixlLGVdLFswLDMwLCJLZXlVIiw1MSwiVSIsODUsIlZLX1UiLGUsZV0sWzAsMzEsIktleVYiLDUyLCJWIiw4NiwiVktfViIsZSxlXSxbMCwzMiwiS2V5VyIsNTMsIlciLDg3LCJWS19XIixlLGVdLFswLDMzLCJLZXlYIiw1NCwiWCIsODgsIlZLX1giLGUsZV0sWzAsMzQsIktleVkiLDU1LCJZIiw4OSwiVktfWSIsZSxlXSxbMCwzNSwiS2V5WiIsNTYsIloiLDkwLCJWS19aIixlLGVdLFswLDM2LCJEaWdpdDEiLDIyLCIxIiw0OSwiVktfMSIsZSxlXSxbMCwzNywiRGlnaXQyIiwyMywiMiIsNTAsIlZLXzIiLGUsZV0sWzAsMzgsIkRpZ2l0MyIsMjQsIjMiLDUxLCJWS18zIixlLGVdLFswLDM5LCJEaWdpdDQiLDI1LCI0Iiw1MiwiVktfNCIsZSxlXSxbMCw0MCwiRGlnaXQ1IiwyNiwiNSIsNTMsIlZLXzUiLGUsZV0sWzAsNDEsIkRpZ2l0NiIsMjcsIjYiLDU0LCJWS182IixlLGVdLFswLDQyLCJEaWdpdDciLDI4LCI3Iiw1NSwiVktfNyIsZSxlXSxbMCw0MywiRGlnaXQ4IiwyOSwiOCIsNTYsIlZLXzgiLGUsZV0sWzAsNDQsIkRpZ2l0OSIsMzAsIjkiLDU3LCJWS185IixlLGVdLFswLDQ1LCJEaWdpdDAiLDIxLCIwIiw0OCwiVktfMCIsZSxlXSxbMSw0NiwiRW50ZXIiLDMsIkVudGVyIiwxMywiVktfUkVUVVJOIixlLGVdLFsxLDQ3LCJFc2NhcGUiLDksIkVzY2FwZSIsMjcsIlZLX0VTQ0FQRSIsZSxlXSxbMSw0OCwiQmFja3NwYWNlIiwxLCJCYWNrc3BhY2UiLDgsIlZLX0JBQ0siLGUsZV0sWzEsNDksIlRhYiIsMiwiVGFiIiw5LCJWS19UQUIiLGUsZV0sWzEsNTAsIlNwYWNlIiwxMCwiU3BhY2UiLDMyLCJWS19TUEFDRSIsZSxlXSxbMCw1MSwiTWludXMiLDg4LCItIiwxODksIlZLX09FTV9NSU5VUyIsIi0iLCJPRU1fTUlOVVMiXSxbMCw1MiwiRXF1YWwiLDg2LCI9IiwxODcsIlZLX09FTV9QTFVTIiwiPSIsIk9FTV9QTFVTIl0sWzAsNTMsIkJyYWNrZXRMZWZ0Iiw5MiwiWyIsMjE5LCJWS19PRU1fNCIsIlsiLCJPRU1fNCJdLFswLDU0LCJCcmFja2V0UmlnaHQiLDk0LCJdIiwyMjEsIlZLX09FTV82IiwiXSIsIk9FTV82Il0sWzAsNTUsIkJhY2tzbGFzaCIsOTMsIlxcIiwyMjAsIlZLX09FTV81IiwiXFwiLCJPRU1fNSJdLFswLDU2LCJJbnRsSGFzaCIsMCxlLDAsZSxlLGVdLFswLDU3LCJTZW1pY29sb24iLDg1LCI7IiwxODYsIlZLX09FTV8xIiwiOyIsIk9FTV8xIl0sWzAsNTgsIlF1b3RlIiw5NSwiJyIsMjIyLCJWS19PRU1fNyIsIiciLCJPRU1fNyJdLFswLDU5LCJCYWNrcXVvdGUiLDkxLCJgIiwxOTIsIlZLX09FTV8zIiwiYCIsIk9FTV8zIl0sWzAsNjAsIkNvbW1hIiw4NywiLCIsMTg4LCJWS19PRU1fQ09NTUEiLCIsIiwiT0VNX0NPTU1BIl0sWzAsNjEsIlBlcmlvZCIsODksIi4iLDE5MCwiVktfT0VNX1BFUklPRCIsIi4iLCJPRU1fUEVSSU9EIl0sWzAsNjIsIlNsYXNoIiw5MCwiLyIsMTkxLCJWS19PRU1fMiIsIi8iLCJPRU1fMiJdLFsxLDYzLCJDYXBzTG9jayIsOCwiQ2Fwc0xvY2siLDIwLCJWS19DQVBJVEFMIixlLGVdLFsxLDY0LCJGMSIsNTksIkYxIiwxMTIsIlZLX0YxIixlLGVdLFsxLDY1LCJGMiIsNjAsIkYyIiwxMTMsIlZLX0YyIixlLGVdLFsxLDY2LCJGMyIsNjEsIkYzIiwxMTQsIlZLX0YzIixlLGVdLFsxLDY3LCJGNCIsNjIsIkY0IiwxMTUsIlZLX0Y0IixlLGVdLFsxLDY4LCJGNSIsNjMsIkY1IiwxMTYsIlZLX0Y1IixlLGVdLFsxLDY5LCJGNiIsNjQsIkY2IiwxMTcsIlZLX0Y2IixlLGVdLFsxLDcwLCJGNyIsNjUsIkY3IiwxMTgsIlZLX0Y3IixlLGVdLFsxLDcxLCJGOCIsNjYsIkY4IiwxMTksIlZLX0Y4IixlLGVdLFsxLDcyLCJGOSIsNjcsIkY5IiwxMjAsIlZLX0Y5IixlLGVdLFsxLDczLCJGMTAiLDY4LCJGMTAiLDEyMSwiVktfRjEwIixlLGVdLFsxLDc0LCJGMTEiLDY5LCJGMTEiLDEyMiwiVktfRjExIixlLGVdLFsxLDc1LCJGMTIiLDcwLCJGMTIiLDEyMywiVktfRjEyIixlLGVdLFsxLDc2LCJQcmludFNjcmVlbiIsMCxlLDAsZSxlLGVdLFsxLDc3LCJTY3JvbGxMb2NrIiw4NCwiU2Nyb2xsTG9jayIsMTQ1LCJWS19TQ1JPTEwiLGUsZV0sWzEsNzgsIlBhdXNlIiw3LCJQYXVzZUJyZWFrIiwxOSwiVktfUEFVU0UiLGUsZV0sWzEsNzksIkluc2VydCIsMTksIkluc2VydCIsNDUsIlZLX0lOU0VSVCIsZSxlXSxbMSw4MCwiSG9tZSIsMTQsIkhvbWUiLDM2LCJWS19IT01FIixlLGVdLFsxLDgxLCJQYWdlVXAiLDExLCJQYWdlVXAiLDMzLCJWS19QUklPUiIsZSxlXSxbMSw4MiwiRGVsZXRlIiwyMCwiRGVsZXRlIiw0NiwiVktfREVMRVRFIixlLGVdLFsxLDgzLCJFbmQiLDEzLCJFbmQiLDM1LCJWS19FTkQiLGUsZV0sWzEsODQsIlBhZ2VEb3duIiwxMiwiUGFnZURvd24iLDM0LCJWS19ORVhUIixlLGVdLFsxLDg1LCJBcnJvd1JpZ2h0IiwxNywiUmlnaHRBcnJvdyIsMzksIlZLX1JJR0hUIiwiUmlnaHQiLGVdLFsxLDg2LCJBcnJvd0xlZnQiLDE1LCJMZWZ0QXJyb3ciLDM3LCJWS19MRUZUIiwiTGVmdCIsZV0sWzEsODcsIkFycm93RG93biIsMTgsIkRvd25BcnJvdyIsNDAsIlZLX0RPV04iLCJEb3duIixlXSxbMSw4OCwiQXJyb3dVcCIsMTYsIlVwQXJyb3ciLDM4LCJWS19VUCIsIlVwIixlXSxbMSw4OSwiTnVtTG9jayIsODMsIk51bUxvY2siLDE0NCwiVktfTlVNTE9DSyIsZSxlXSxbMSw5MCwiTnVtcGFkRGl2aWRlIiwxMTMsIk51bVBhZF9EaXZpZGUiLDExMSwiVktfRElWSURFIixlLGVdLFsxLDkxLCJOdW1wYWRNdWx0aXBseSIsMTA4LCJOdW1QYWRfTXVsdGlwbHkiLDEwNiwiVktfTVVMVElQTFkiLGUsZV0sWzEsOTIsIk51bXBhZFN1YnRyYWN0IiwxMTEsIk51bVBhZF9TdWJ0cmFjdCIsMTA5LCJWS19TVUJUUkFDVCIsZSxlXSxbMSw5MywiTnVtcGFkQWRkIiwxMDksIk51bVBhZF9BZGQiLDEwNywiVktfQUREIixlLGVdLFsxLDk0LCJOdW1wYWRFbnRlciIsMyxlLDAsZSxlLGVdLFsxLDk1LCJOdW1wYWQxIiw5OSwiTnVtUGFkMSIsOTcsIlZLX05VTVBBRDEiLGUsZV0sWzEsOTYsIk51bXBhZDIiLDEwMCwiTnVtUGFkMiIsOTgsIlZLX05VTVBBRDIiLGUsZV0sWzEsOTcsIk51bXBhZDMiLDEwMSwiTnVtUGFkMyIsOTksIlZLX05VTVBBRDMiLGUsZV0sWzEsOTgsIk51bXBhZDQiLDEwMiwiTnVtUGFkNCIsMTAwLCJWS19OVU1QQUQ0IixlLGVdLFsxLDk5LCJOdW1wYWQ1IiwxMDMsIk51bVBhZDUiLDEwMSwiVktfTlVNUEFENSIsZSxlXSxbMSwxMDAsIk51bXBhZDYiLDEwNCwiTnVtUGFkNiIsMTAyLCJWS19OVU1QQUQ2IixlLGVdLFsxLDEwMSwiTnVtcGFkNyIsMTA1LCJOdW1QYWQ3IiwxMDMsIlZLX05VTVBBRDciLGUsZV0sWzEsMTAyLCJOdW1wYWQ4IiwxMDYsIk51bVBhZDgiLDEwNCwiVktfTlVNUEFEOCIsZSxlXSxbMSwxMDMsIk51bXBhZDkiLDEwNywiTnVtUGFkOSIsMTA1LCJWS19OVU1QQUQ5IixlLGVdLFsxLDEwNCwiTnVtcGFkMCIsOTgsIk51bVBhZDAiLDk2LCJWS19OVU1QQUQwIixlLGVdLFsxLDEwNSwiTnVtcGFkRGVjaW1hbCIsMTEyLCJOdW1QYWRfRGVjaW1hbCIsMTEwLCJWS19ERUNJTUFMIixlLGVdLFswLDEwNiwiSW50bEJhY2tzbGFzaCIsOTcsIk9FTV8xMDIiLDIyNiwiVktfT0VNXzEwMiIsZSxlXSxbMSwxMDcsIkNvbnRleHRNZW51Iiw1OCwiQ29udGV4dE1lbnUiLDkzLGUsZSxlXSxbMSwxMDgsIlBvd2VyIiwwLGUsMCxlLGUsZV0sWzEsMTA5LCJOdW1wYWRFcXVhbCIsMCxlLDAsZSxlLGVdLFsxLDExMCwiRjEzIiw3MSwiRjEzIiwxMjQsIlZLX0YxMyIsZSxlXSxbMSwxMTEsIkYxNCIsNzIsIkYxNCIsMTI1LCJWS19GMTQiLGUsZV0sWzEsMTEyLCJGMTUiLDczLCJGMTUiLDEyNiwiVktfRjE1IixlLGVdLFsxLDExMywiRjE2Iiw3NCwiRjE2IiwxMjcsIlZLX0YxNiIsZSxlXSxbMSwxMTQsIkYxNyIsNzUsIkYxNyIsMTI4LCJWS19GMTciLGUsZV0sWzEsMTE1LCJGMTgiLDc2LCJGMTgiLDEyOSwiVktfRjE4IixlLGVdLFsxLDExNiwiRjE5Iiw3NywiRjE5IiwxMzAsIlZLX0YxOSIsZSxlXSxbMSwxMTcsIkYyMCIsNzgsIkYyMCIsMTMxLCJWS19GMjAiLGUsZV0sWzEsMTE4LCJGMjEiLDc5LCJGMjEiLDEzMiwiVktfRjIxIixlLGVdLFsxLDExOSwiRjIyIiw4MCwiRjIyIiwxMzMsIlZLX0YyMiIsZSxlXSxbMSwxMjAsIkYyMyIsODEsIkYyMyIsMTM0LCJWS19GMjMiLGUsZV0sWzEsMTIxLCJGMjQiLDgyLCJGMjQiLDEzNSwiVktfRjI0IixlLGVdLFsxLDEyMiwiT3BlbiIsMCxlLDAsZSxlLGVdLFsxLDEyMywiSGVscCIsMCxlLDAsZSxlLGVdLFsxLDEyNCwiU2VsZWN0IiwwLGUsMCxlLGUsZV0sWzEsMTI1LCJBZ2FpbiIsMCxlLDAsZSxlLGVdLFsxLDEyNiwiVW5kbyIsMCxlLDAsZSxlLGVdLFsxLDEyNywiQ3V0IiwwLGUsMCxlLGUsZV0sWzEsMTI4LCJDb3B5IiwwLGUsMCxlLGUsZV0sWzEsMTI5LCJQYXN0ZSIsMCxlLDAsZSxlLGVdLFsxLDEzMCwiRmluZCIsMCxlLDAsZSxlLGVdLFsxLDEzMSwiQXVkaW9Wb2x1bWVNdXRlIiwxMTcsIkF1ZGlvVm9sdW1lTXV0ZSIsMTczLCJWS19WT0xVTUVfTVVURSIsZSxlXSxbMSwxMzIsIkF1ZGlvVm9sdW1lVXAiLDExOCwiQXVkaW9Wb2x1bWVVcCIsMTc1LCJWS19WT0xVTUVfVVAiLGUsZV0sWzEsMTMzLCJBdWRpb1ZvbHVtZURvd24iLDExOSwiQXVkaW9Wb2x1bWVEb3duIiwxNzQsIlZLX1ZPTFVNRV9ET1dOIixlLGVdLFsxLDEzNCwiTnVtcGFkQ29tbWEiLDExMCwiTnVtUGFkX1NlcGFyYXRvciIsMTA4LCJWS19TRVBBUkFUT1IiLGUsZV0sWzAsMTM1LCJJbnRsUm8iLDExNSwiQUJOVF9DMSIsMTkzLCJWS19BQk5UX0MxIixlLGVdLFsxLDEzNiwiS2FuYU1vZGUiLDAsZSwwLGUsZSxlXSxbMCwxMzcsIkludGxZZW4iLDAsZSwwLGUsZSxlXSxbMSwxMzgsIkNvbnZlcnQiLDAsZSwwLGUsZSxlXSxbMSwxMzksIk5vbkNvbnZlcnQiLDAsZSwwLGUsZSxlXSxbMSwxNDAsIkxhbmcxIiwwLGUsMCxlLGUsZV0sWzEsMTQxLCJMYW5nMiIsMCxlLDAsZSxlLGVdLFsxLDE0MiwiTGFuZzMiLDAsZSwwLGUsZSxlXSxbMSwxNDMsIkxhbmc0IiwwLGUsMCxlLGUsZV0sWzEsMTQ0LCJMYW5nNSIsMCxlLDAsZSxlLGVdLFsxLDE0NSwiQWJvcnQiLDAsZSwwLGUsZSxlXSxbMSwxNDYsIlByb3BzIiwwLGUsMCxlLGUsZV0sWzEsMTQ3LCJOdW1wYWRQYXJlbkxlZnQiLDAsZSwwLGUsZSxlXSxbMSwxNDgsIk51bXBhZFBhcmVuUmlnaHQiLDAsZSwwLGUsZSxlXSxbMSwxNDksIk51bXBhZEJhY2tzcGFjZSIsMCxlLDAsZSxlLGVdLFsxLDE1MCwiTnVtcGFkTWVtb3J5U3RvcmUiLDAsZSwwLGUsZSxlXSxbMSwxNTEsIk51bXBhZE1lbW9yeVJlY2FsbCIsMCxlLDAsZSxlLGVdLFsxLDE1MiwiTnVtcGFkTWVtb3J5Q2xlYXIiLDAsZSwwLGUsZSxlXSxbMSwxNTMsIk51bXBhZE1lbW9yeUFkZCIsMCxlLDAsZSxlLGVdLFsxLDE1NCwiTnVtcGFkTWVtb3J5U3VidHJhY3QiLDAsZSwwLGUsZSxlXSxbMSwxNTUsIk51bXBhZENsZWFyIiwxMzEsIkNsZWFyIiwxMiwiVktfQ0xFQVIiLGUsZV0sWzEsMTU2LCJOdW1wYWRDbGVhckVudHJ5IiwwLGUsMCxlLGUsZV0sWzEsMCxlLDUsIkN0cmwiLDE3LCJWS19DT05UUk9MIixlLGVdLFsxLDAsZSw0LCJTaGlmdCIsMTYsIlZLX1NISUZUIixlLGVdLFsxLDAsZSw2LCJBbHQiLDE4LCJWS19NRU5VIixlLGVdLFsxLDAsZSw1NywiTWV0YSIsOTEsIlZLX0NPTU1BTkQiLGUsZV0sWzEsMTU3LCJDb250cm9sTGVmdCIsNSxlLDAsIlZLX0xDT05UUk9MIixlLGVdLFsxLDE1OCwiU2hpZnRMZWZ0Iiw0LGUsMCwiVktfTFNISUZUIixlLGVdLFsxLDE1OSwiQWx0TGVmdCIsNixlLDAsIlZLX0xNRU5VIixlLGVdLFsxLDE2MCwiTWV0YUxlZnQiLDU3LGUsMCwiVktfTFdJTiIsZSxlXSxbMSwxNjEsIkNvbnRyb2xSaWdodCIsNSxlLDAsIlZLX1JDT05UUk9MIixlLGVdLFsxLDE2MiwiU2hpZnRSaWdodCIsNCxlLDAsIlZLX1JTSElGVCIsZSxlXSxbMSwxNjMsIkFsdFJpZ2h0Iiw2LGUsMCwiVktfUk1FTlUiLGUsZV0sWzEsMTY0LCJNZXRhUmlnaHQiLDU3LGUsMCwiVktfUldJTiIsZSxlXSxbMSwxNjUsIkJyaWdodG5lc3NVcCIsMCxlLDAsZSxlLGVdLFsxLDE2NiwiQnJpZ2h0bmVzc0Rvd24iLDAsZSwwLGUsZSxlXSxbMSwxNjcsIk1lZGlhUGxheSIsMCxlLDAsZSxlLGVdLFsxLDE2OCwiTWVkaWFSZWNvcmQiLDAsZSwwLGUsZSxlXSxbMSwxNjksIk1lZGlhRmFzdEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMSwxNzAsIk1lZGlhUmV3aW5kIiwwLGUsMCxlLGUsZV0sWzEsMTcxLCJNZWRpYVRyYWNrTmV4dCIsMTI0LCJNZWRpYVRyYWNrTmV4dCIsMTc2LCJWS19NRURJQV9ORVhUX1RSQUNLIixlLGVdLFsxLDE3MiwiTWVkaWFUcmFja1ByZXZpb3VzIiwxMjUsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTc3LCJWS19NRURJQV9QUkVWX1RSQUNLIixlLGVdLFsxLDE3MywiTWVkaWFTdG9wIiwxMjYsIk1lZGlhU3RvcCIsMTc4LCJWS19NRURJQV9TVE9QIixlLGVdLFsxLDE3NCwiRWplY3QiLDAsZSwwLGUsZSxlXSxbMSwxNzUsIk1lZGlhUGxheVBhdXNlIiwxMjcsIk1lZGlhUGxheVBhdXNlIiwxNzksIlZLX01FRElBX1BMQVlfUEFVU0UiLGUsZV0sWzEsMTc2LCJNZWRpYVNlbGVjdCIsMTI4LCJMYXVuY2hNZWRpYVBsYXllciIsMTgxLCJWS19NRURJQV9MQVVOQ0hfTUVESUFfU0VMRUNUIixlLGVdLFsxLDE3NywiTGF1bmNoTWFpbCIsMTI5LCJMYXVuY2hNYWlsIiwxODAsIlZLX01FRElBX0xBVU5DSF9NQUlMIixlLGVdLFsxLDE3OCwiTGF1bmNoQXBwMiIsMTMwLCJMYXVuY2hBcHAyIiwxODMsIlZLX01FRElBX0xBVU5DSF9BUFAyIixlLGVdLFsxLDE3OSwiTGF1bmNoQXBwMSIsMCxlLDAsIlZLX01FRElBX0xBVU5DSF9BUFAxIixlLGVdLFsxLDE4MCwiU2VsZWN0VGFzayIsMCxlLDAsZSxlLGVdLFsxLDE4MSwiTGF1bmNoU2NyZWVuU2F2ZXIiLDAsZSwwLGUsZSxlXSxbMSwxODIsIkJyb3dzZXJTZWFyY2giLDEyMCwiQnJvd3NlclNlYXJjaCIsMTcwLCJWS19CUk9XU0VSX1NFQVJDSCIsZSxlXSxbMSwxODMsIkJyb3dzZXJIb21lIiwxMjEsIkJyb3dzZXJIb21lIiwxNzIsIlZLX0JST1dTRVJfSE9NRSIsZSxlXSxbMSwxODQsIkJyb3dzZXJCYWNrIiwxMjIsIkJyb3dzZXJCYWNrIiwxNjYsIlZLX0JST1dTRVJfQkFDSyIsZSxlXSxbMSwxODUsIkJyb3dzZXJGb3J3YXJkIiwxMjMsIkJyb3dzZXJGb3J3YXJkIiwxNjcsIlZLX0JST1dTRVJfRk9SV0FSRCIsZSxlXSxbMSwxODYsIkJyb3dzZXJTdG9wIiwwLGUsMCwiVktfQlJPV1NFUl9TVE9QIixlLGVdLFsxLDE4NywiQnJvd3NlclJlZnJlc2giLDAsZSwwLCJWS19CUk9XU0VSX1JFRlJFU0giLGUsZV0sWzEsMTg4LCJCcm93c2VyRmF2b3JpdGVzIiwwLGUsMCwiVktfQlJPV1NFUl9GQVZPUklURVMiLGUsZV0sWzEsMTg5LCJab29tVG9nZ2xlIiwwLGUsMCxlLGUsZV0sWzEsMTkwLCJNYWlsUmVwbHkiLDAsZSwwLGUsZSxlXSxbMSwxOTEsIk1haWxGb3J3YXJkIiwwLGUsMCxlLGUsZV0sWzEsMTkyLCJNYWlsU2VuZCIsMCxlLDAsZSxlLGVdLFsxLDAsZSwxMTQsIktleUluQ29tcG9zaXRpb24iLDIyOSxlLGUsZV0sWzEsMCxlLDExNiwiQUJOVF9DMiIsMTk0LCJWS19BQk5UX0MyIixlLGVdLFsxLDAsZSw5NiwiT0VNXzgiLDIyMywiVktfT0VNXzgiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19LQU5BIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEFOR1VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSlVOSkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19GSU5BTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0hBTkpBIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfS0FOSkkiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19DT05WRVJUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTk9OQ09OVkVSVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FDQ0VQVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX01PREVDSEFOR0UiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19TRUxFQ1QiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QUklOVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0VYRUNVVEUiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19TTkFQU0hPVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0hFTFAiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19BUFBTIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUFJPQ0VTU0tFWSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BBQ0tFVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0RCRV9TQkNTQ0hBUiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0RCRV9EQkNTQ0hBUiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FUVE4iLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19DUlNFTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0VYU0VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVJFT0YiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QTEFZIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfWk9PTSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX05PTkFNRSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BBMSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX09FTV9DTEVBUiIsZSxlXV0sbj1bXSxyPVtdO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0W3QsaSxvLHMsYSxsLHUsYyxoXT1lO2lmKHJbaV18fChyW2ldPSEwLFJ0W29dPWksVHRbby50b0xvd2VyQ2FzZSgpXT1pKSwhbltzXSl7aWYobltzXT0hMCwhYSl0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyByZXByZXNlbnRhdGlvbiBtaXNzaW5nIGZvciBrZXkgY29kZSAke3N9IGFyb3VuZCBzY2FuIGNvZGUgJHtvfWApO0V0LmRlZmluZShzLGEpLEx0LmRlZmluZShzLGN8fGEpLE50LmRlZmluZShzLGh8fGN8fGEpfWwmJihrdFtsXT1zKX19KCksZnVuY3Rpb24oZSl7ZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gRXQua2V5Q29kZVRvU3RyKGUpfSxlLmZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0LnN0clRvS2V5Q29kZShlKX0sZS50b1VzZXJTZXR0aW5nc1VTPWZ1bmN0aW9uKGUpe3JldHVybiBMdC5rZXlDb2RlVG9TdHIoZSl9LGUudG9Vc2VyU2V0dGluZ3NHZW5lcmFsPWZ1bmN0aW9uKGUpe3JldHVybiBOdC5rZXlDb2RlVG9TdHIoZSl9LGUuZnJvbVVzZXJTZXR0aW5ncz1mdW5jdGlvbihlKXtyZXR1cm4gTHQuc3RyVG9LZXlDb2RlKGUpfHxOdC5zdHJUb0tleUNvZGUoZSl9LGUudG9FbGVjdHJvbkFjY2VsZXJhdG9yPWZ1bmN0aW9uKGUpe2lmKGU+PTk4JiZlPD0xMTMpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2UgMTY6cmV0dXJuIlVwIjtjYXNlIDE4OnJldHVybiJEb3duIjtjYXNlIDE1OnJldHVybiJMZWZ0IjtjYXNlIDE3OnJldHVybiJSaWdodCJ9cmV0dXJuIEV0LmtleUNvZGVUb1N0cihlKX19KE90fHwoT3Q9e30pKTtjbGFzcyBNdCBleHRlbmRzIHJ0e2NvbnN0cnVjdG9yKGUsdCxuLHIpe3N1cGVyKGUsdCxuLHIpLHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj10LHRoaXMucG9zaXRpb25MaW5lTnVtYmVyPW4sdGhpcy5wb3NpdGlvbkNvbHVtbj1yfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLnBvc2l0aW9uTGluZU51bWJlcisiLCIrdGhpcy5wb3NpdGlvbkNvbHVtbisiXSJ9ZXF1YWxzU2VsZWN0aW9uKGUpe3JldHVybiBNdC5zZWxlY3Rpb25zRXF1YWwodGhpcyxlKX1zdGF0aWMgc2VsZWN0aW9uc0VxdWFsKGUsdCl7cmV0dXJuIGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJmUuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10LnNlbGVjdGlvblN0YXJ0Q29sdW1uJiZlLnBvc2l0aW9uTGluZU51bWJlcj09PXQucG9zaXRpb25MaW5lTnVtYmVyJiZlLnBvc2l0aW9uQ29sdW1uPT09dC5wb3NpdGlvbkNvbHVtbn1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10aGlzLnN0YXJ0TGluZU51bWJlciYmdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj09PXRoaXMuc3RhcnRDb2x1bW4/MDoxfXNldEVuZFBvc2l0aW9uKGUsdCl7cmV0dXJuIDA9PT10aGlzLmdldERpcmVjdGlvbigpP25ldyBNdCh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLGUsdCk6bmV3IE10KGUsdCx0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uKX1nZXRQb3NpdGlvbigpe3JldHVybiBuZXcgbnQodGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIsdGhpcy5wb3NpdGlvbkNvbHVtbil9Z2V0U2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gbmV3IG50KHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4pfXNldFN0YXJ0UG9zaXRpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuZ2V0RGlyZWN0aW9uKCk/bmV3IE10KGUsdCx0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pOm5ldyBNdCh0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4sZSx0KX1zdGF0aWMgZnJvbVBvc2l0aW9ucyhlLHQ9ZSl7cmV0dXJuIG5ldyBNdChlLmxpbmVOdW1iZXIsZS5jb2x1bW4sdC5saW5lTnVtYmVyLHQuY29sdW1uKX1zdGF0aWMgZnJvbVJhbmdlKGUsdCl7cmV0dXJuIDA9PT10P25ldyBNdChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbik6bmV3IE10KGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbixlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgbGlmdFNlbGVjdGlvbihlKXtyZXR1cm4gbmV3IE10KGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLGUuc2VsZWN0aW9uU3RhcnRDb2x1bW4sZS5wb3NpdGlvbkxpbmVOdW1iZXIsZS5wb3NpdGlvbkNvbHVtbil9c3RhdGljIHNlbGVjdGlvbnNBcnJFcXVhbChlLHQpe2lmKGUmJiF0fHwhZSYmdClyZXR1cm4hMTtpZighZSYmIXQpcmV0dXJuITA7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoIXRoaXMuc2VsZWN0aW9uc0VxdWFsKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9c3RhdGljIGlzSVNlbGVjdGlvbihlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0Q29sdW1uJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25MaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25Db2x1bW59c3RhdGljIGNyZWF0ZVdpdGhEaXJlY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gMD09PWk/bmV3IE10KGUsdCxuLHIpOm5ldyBNdChuLHIsZSx0KX19Y29uc3QgSXQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBQdChlLHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Y29uc3Qgbj1JdFt0XTtpZih2b2lkIDA9PT1uKXRocm93IG5ldyBFcnJvcihgJHtlfSByZWZlcmVuY2VzIGFuIHVua25vd24gY29kaWNvbjogJHt0fWApO3Q9bn1yZXR1cm4gSXRbZV09dCx7aWQ6ZX19Y29uc3QgRnQ9e2FkZDpQdCgiYWRkIiw2ZTQpLHBsdXM6UHQoInBsdXMiLDZlNCksZ2lzdE5ldzpQdCgiZ2lzdC1uZXciLDZlNCkscmVwb0NyZWF0ZTpQdCgicmVwby1jcmVhdGUiLDZlNCksbGlnaHRidWxiOlB0KCJsaWdodGJ1bGIiLDYwMDAxKSxsaWdodEJ1bGI6UHQoImxpZ2h0LWJ1bGIiLDYwMDAxKSxyZXBvOlB0KCJyZXBvIiw2MDAwMikscmVwb0RlbGV0ZTpQdCgicmVwby1kZWxldGUiLDYwMDAyKSxnaXN0Rm9yazpQdCgiZ2lzdC1mb3JrIiw2MDAwMykscmVwb0ZvcmtlZDpQdCgicmVwby1mb3JrZWQiLDYwMDAzKSxnaXRQdWxsUmVxdWVzdDpQdCgiZ2l0LXB1bGwtcmVxdWVzdCIsNjAwMDQpLGdpdFB1bGxSZXF1ZXN0QWJhbmRvbmVkOlB0KCJnaXQtcHVsbC1yZXF1ZXN0LWFiYW5kb25lZCIsNjAwMDQpLHJlY29yZEtleXM6UHQoInJlY29yZC1rZXlzIiw2MDAwNSksa2V5Ym9hcmQ6UHQoImtleWJvYXJkIiw2MDAwNSksdGFnOlB0KCJ0YWciLDYwMDA2KSx0YWdBZGQ6UHQoInRhZy1hZGQiLDYwMDA2KSx0YWdSZW1vdmU6UHQoInRhZy1yZW1vdmUiLDYwMDA2KSxwZXJzb246UHQoInBlcnNvbiIsNjAwMDcpLHBlcnNvbkZvbGxvdzpQdCgicGVyc29uLWZvbGxvdyIsNjAwMDcpLHBlcnNvbk91dGxpbmU6UHQoInBlcnNvbi1vdXRsaW5lIiw2MDAwNykscGVyc29uRmlsbGVkOlB0KCJwZXJzb24tZmlsbGVkIiw2MDAwNyksZ2l0QnJhbmNoOlB0KCJnaXQtYnJhbmNoIiw2MDAwOCksZ2l0QnJhbmNoQ3JlYXRlOlB0KCJnaXQtYnJhbmNoLWNyZWF0ZSIsNjAwMDgpLGdpdEJyYW5jaERlbGV0ZTpQdCgiZ2l0LWJyYW5jaC1kZWxldGUiLDYwMDA4KSxzb3VyY2VDb250cm9sOlB0KCJzb3VyY2UtY29udHJvbCIsNjAwMDgpLG1pcnJvcjpQdCgibWlycm9yIiw2MDAwOSksbWlycm9yUHVibGljOlB0KCJtaXJyb3ItcHVibGljIiw2MDAwOSksc3RhcjpQdCgic3RhciIsNjAwMTApLHN0YXJBZGQ6UHQoInN0YXItYWRkIiw2MDAxMCksc3RhckRlbGV0ZTpQdCgic3Rhci1kZWxldGUiLDYwMDEwKSxzdGFyRW1wdHk6UHQoInN0YXItZW1wdHkiLDYwMDEwKSxjb21tZW50OlB0KCJjb21tZW50Iiw2MDAxMSksY29tbWVudEFkZDpQdCgiY29tbWVudC1hZGQiLDYwMDExKSxhbGVydDpQdCgiYWxlcnQiLDYwMDEyKSx3YXJuaW5nOlB0KCJ3YXJuaW5nIiw2MDAxMiksc2VhcmNoOlB0KCJzZWFyY2giLDYwMDEzKSxzZWFyY2hTYXZlOlB0KCJzZWFyY2gtc2F2ZSIsNjAwMTMpLGxvZ091dDpQdCgibG9nLW91dCIsNjAwMTQpLHNpZ25PdXQ6UHQoInNpZ24tb3V0Iiw2MDAxNCksbG9nSW46UHQoImxvZy1pbiIsNjAwMTUpLHNpZ25JbjpQdCgic2lnbi1pbiIsNjAwMTUpLGV5ZTpQdCgiZXllIiw2MDAxNiksZXllVW53YXRjaDpQdCgiZXllLXVud2F0Y2giLDYwMDE2KSxleWVXYXRjaDpQdCgiZXllLXdhdGNoIiw2MDAxNiksY2lyY2xlRmlsbGVkOlB0KCJjaXJjbGUtZmlsbGVkIiw2MDAxNykscHJpbWl0aXZlRG90OlB0KCJwcmltaXRpdmUtZG90Iiw2MDAxNyksY2xvc2VEaXJ0eTpQdCgiY2xvc2UtZGlydHkiLDYwMDE3KSxkZWJ1Z0JyZWFrcG9pbnQ6UHQoImRlYnVnLWJyZWFrcG9pbnQiLDYwMDE3KSxkZWJ1Z0JyZWFrcG9pbnREaXNhYmxlZDpQdCgiZGVidWctYnJlYWtwb2ludC1kaXNhYmxlZCIsNjAwMTcpLGRlYnVnSGludDpQdCgiZGVidWctaGludCIsNjAwMTcpLHByaW1pdGl2ZVNxdWFyZTpQdCgicHJpbWl0aXZlLXNxdWFyZSIsNjAwMTgpLGVkaXQ6UHQoImVkaXQiLDYwMDE5KSxwZW5jaWw6UHQoInBlbmNpbCIsNjAwMTkpLGluZm86UHQoImluZm8iLDYwMDIwKSxpc3N1ZU9wZW5lZDpQdCgiaXNzdWUtb3BlbmVkIiw2MDAyMCksZ2lzdFByaXZhdGU6UHQoImdpc3QtcHJpdmF0ZSIsNjAwMjEpLGdpdEZvcmtQcml2YXRlOlB0KCJnaXQtZm9yay1wcml2YXRlIiw2MDAyMSksbG9jazpQdCgibG9jayIsNjAwMjEpLG1pcnJvclByaXZhdGU6UHQoIm1pcnJvci1wcml2YXRlIiw2MDAyMSksY2xvc2U6UHQoImNsb3NlIiw2MDAyMikscmVtb3ZlQ2xvc2U6UHQoInJlbW92ZS1jbG9zZSIsNjAwMjIpLHg6UHQoIngiLDYwMDIyKSxyZXBvU3luYzpQdCgicmVwby1zeW5jIiw2MDAyMyksc3luYzpQdCgic3luYyIsNjAwMjMpLGNsb25lOlB0KCJjbG9uZSIsNjAwMjQpLGRlc2t0b3BEb3dubG9hZDpQdCgiZGVza3RvcC1kb3dubG9hZCIsNjAwMjQpLGJlYWtlcjpQdCgiYmVha2VyIiw2MDAyNSksbWljcm9zY29wZTpQdCgibWljcm9zY29wZSIsNjAwMjUpLHZtOlB0KCJ2bSIsNjAwMjYpLGRldmljZURlc2t0b3A6UHQoImRldmljZS1kZXNrdG9wIiw2MDAyNiksZmlsZTpQdCgiZmlsZSIsNjAwMjcpLGZpbGVUZXh0OlB0KCJmaWxlLXRleHQiLDYwMDI3KSxtb3JlOlB0KCJtb3JlIiw2MDAyOCksZWxsaXBzaXM6UHQoImVsbGlwc2lzIiw2MDAyOCksa2ViYWJIb3Jpem9udGFsOlB0KCJrZWJhYi1ob3Jpem9udGFsIiw2MDAyOCksbWFpbFJlcGx5OlB0KCJtYWlsLXJlcGx5Iiw2MDAyOSkscmVwbHk6UHQoInJlcGx5Iiw2MDAyOSksb3JnYW5pemF0aW9uOlB0KCJvcmdhbml6YXRpb24iLDYwMDMwKSxvcmdhbml6YXRpb25GaWxsZWQ6UHQoIm9yZ2FuaXphdGlvbi1maWxsZWQiLDYwMDMwKSxvcmdhbml6YXRpb25PdXRsaW5lOlB0KCJvcmdhbml6YXRpb24tb3V0bGluZSIsNjAwMzApLG5ld0ZpbGU6UHQoIm5ldy1maWxlIiw2MDAzMSksZmlsZUFkZDpQdCgiZmlsZS1hZGQiLDYwMDMxKSxuZXdGb2xkZXI6UHQoIm5ldy1mb2xkZXIiLDYwMDMyKSxmaWxlRGlyZWN0b3J5Q3JlYXRlOlB0KCJmaWxlLWRpcmVjdG9yeS1jcmVhdGUiLDYwMDMyKSx0cmFzaDpQdCgidHJhc2giLDYwMDMzKSx0cmFzaGNhbjpQdCgidHJhc2hjYW4iLDYwMDMzKSxoaXN0b3J5OlB0KCJoaXN0b3J5Iiw2MDAzNCksY2xvY2s6UHQoImNsb2NrIiw2MDAzNCksZm9sZGVyOlB0KCJmb2xkZXIiLDYwMDM1KSxmaWxlRGlyZWN0b3J5OlB0KCJmaWxlLWRpcmVjdG9yeSIsNjAwMzUpLHN5bWJvbEZvbGRlcjpQdCgic3ltYm9sLWZvbGRlciIsNjAwMzUpLGxvZ29HaXRodWI6UHQoImxvZ28tZ2l0aHViIiw2MDAzNiksbWFya0dpdGh1YjpQdCgibWFyay1naXRodWIiLDYwMDM2KSxnaXRodWI6UHQoImdpdGh1YiIsNjAwMzYpLHRlcm1pbmFsOlB0KCJ0ZXJtaW5hbCIsNjAwMzcpLGNvbnNvbGU6UHQoImNvbnNvbGUiLDYwMDM3KSxyZXBsOlB0KCJyZXBsIiw2MDAzNyksemFwOlB0KCJ6YXAiLDYwMDM4KSxzeW1ib2xFdmVudDpQdCgic3ltYm9sLWV2ZW50Iiw2MDAzOCksZXJyb3I6UHQoImVycm9yIiw2MDAzOSksc3RvcDpQdCgic3RvcCIsNjAwMzkpLHZhcmlhYmxlOlB0KCJ2YXJpYWJsZSIsNjAwNDApLHN5bWJvbFZhcmlhYmxlOlB0KCJzeW1ib2wtdmFyaWFibGUiLDYwMDQwKSxhcnJheTpQdCgiYXJyYXkiLDYwMDQyKSxzeW1ib2xBcnJheTpQdCgic3ltYm9sLWFycmF5Iiw2MDA0Miksc3ltYm9sTW9kdWxlOlB0KCJzeW1ib2wtbW9kdWxlIiw2MDA0Myksc3ltYm9sUGFja2FnZTpQdCgic3ltYm9sLXBhY2thZ2UiLDYwMDQzKSxzeW1ib2xOYW1lc3BhY2U6UHQoInN5bWJvbC1uYW1lc3BhY2UiLDYwMDQzKSxzeW1ib2xPYmplY3Q6UHQoInN5bWJvbC1vYmplY3QiLDYwMDQzKSxzeW1ib2xNZXRob2Q6UHQoInN5bWJvbC1tZXRob2QiLDYwMDQ0KSxzeW1ib2xGdW5jdGlvbjpQdCgic3ltYm9sLWZ1bmN0aW9uIiw2MDA0NCksc3ltYm9sQ29uc3RydWN0b3I6UHQoInN5bWJvbC1jb25zdHJ1Y3RvciIsNjAwNDQpLHN5bWJvbEJvb2xlYW46UHQoInN5bWJvbC1ib29sZWFuIiw2MDA0Nyksc3ltYm9sTnVsbDpQdCgic3ltYm9sLW51bGwiLDYwMDQ3KSxzeW1ib2xOdW1lcmljOlB0KCJzeW1ib2wtbnVtZXJpYyIsNjAwNDgpLHN5bWJvbE51bWJlcjpQdCgic3ltYm9sLW51bWJlciIsNjAwNDgpLHN5bWJvbFN0cnVjdHVyZTpQdCgic3ltYm9sLXN0cnVjdHVyZSIsNjAwNDkpLHN5bWJvbFN0cnVjdDpQdCgic3ltYm9sLXN0cnVjdCIsNjAwNDkpLHN5bWJvbFBhcmFtZXRlcjpQdCgic3ltYm9sLXBhcmFtZXRlciIsNjAwNTApLHN5bWJvbFR5cGVQYXJhbWV0ZXI6UHQoInN5bWJvbC10eXBlLXBhcmFtZXRlciIsNjAwNTApLHN5bWJvbEtleTpQdCgic3ltYm9sLWtleSIsNjAwNTEpLHN5bWJvbFRleHQ6UHQoInN5bWJvbC10ZXh0Iiw2MDA1MSksc3ltYm9sUmVmZXJlbmNlOlB0KCJzeW1ib2wtcmVmZXJlbmNlIiw2MDA1MiksZ29Ub0ZpbGU6UHQoImdvLXRvLWZpbGUiLDYwMDUyKSxzeW1ib2xFbnVtOlB0KCJzeW1ib2wtZW51bSIsNjAwNTMpLHN5bWJvbFZhbHVlOlB0KCJzeW1ib2wtdmFsdWUiLDYwMDUzKSxzeW1ib2xSdWxlcjpQdCgic3ltYm9sLXJ1bGVyIiw2MDA1NCksc3ltYm9sVW5pdDpQdCgic3ltYm9sLXVuaXQiLDYwMDU0KSxhY3RpdmF0ZUJyZWFrcG9pbnRzOlB0KCJhY3RpdmF0ZS1icmVha3BvaW50cyIsNjAwNTUpLGFyY2hpdmU6UHQoImFyY2hpdmUiLDYwMDU2KSxhcnJvd0JvdGg6UHQoImFycm93LWJvdGgiLDYwMDU3KSxhcnJvd0Rvd246UHQoImFycm93LWRvd24iLDYwMDU4KSxhcnJvd0xlZnQ6UHQoImFycm93LWxlZnQiLDYwMDU5KSxhcnJvd1JpZ2h0OlB0KCJhcnJvdy1yaWdodCIsNjAwNjApLGFycm93U21hbGxEb3duOlB0KCJhcnJvdy1zbWFsbC1kb3duIiw2MDA2MSksYXJyb3dTbWFsbExlZnQ6UHQoImFycm93LXNtYWxsLWxlZnQiLDYwMDYyKSxhcnJvd1NtYWxsUmlnaHQ6UHQoImFycm93LXNtYWxsLXJpZ2h0Iiw2MDA2MyksYXJyb3dTbWFsbFVwOlB0KCJhcnJvdy1zbWFsbC11cCIsNjAwNjQpLGFycm93VXA6UHQoImFycm93LXVwIiw2MDA2NSksYmVsbDpQdCgiYmVsbCIsNjAwNjYpLGJvbGQ6UHQoImJvbGQiLDYwMDY3KSxib29rOlB0KCJib29rIiw2MDA2OCksYm9va21hcms6UHQoImJvb2ttYXJrIiw2MDA2OSksZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxVbnZlcmlmaWVkOlB0KCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLXVudmVyaWZpZWQiLDYwMDcwKSxkZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbDpQdCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbCIsNjAwNzEpLGRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsRGlzYWJsZWQ6UHQoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtZGlzYWJsZWQiLDYwMDcxKSxkZWJ1Z0JyZWFrcG9pbnREYXRhVW52ZXJpZmllZDpQdCgiZGVidWctYnJlYWtwb2ludC1kYXRhLXVudmVyaWZpZWQiLDYwMDcyKSxkZWJ1Z0JyZWFrcG9pbnREYXRhOlB0KCJkZWJ1Zy1icmVha3BvaW50LWRhdGEiLDYwMDczKSxkZWJ1Z0JyZWFrcG9pbnREYXRhRGlzYWJsZWQ6UHQoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS1kaXNhYmxlZCIsNjAwNzMpLGRlYnVnQnJlYWtwb2ludExvZ1VudmVyaWZpZWQ6UHQoImRlYnVnLWJyZWFrcG9pbnQtbG9nLXVudmVyaWZpZWQiLDYwMDc0KSxkZWJ1Z0JyZWFrcG9pbnRMb2c6UHQoImRlYnVnLWJyZWFrcG9pbnQtbG9nIiw2MDA3NSksZGVidWdCcmVha3BvaW50TG9nRGlzYWJsZWQ6UHQoImRlYnVnLWJyZWFrcG9pbnQtbG9nLWRpc2FibGVkIiw2MDA3NSksYnJpZWZjYXNlOlB0KCJicmllZmNhc2UiLDYwMDc2KSxicm9hZGNhc3Q6UHQoImJyb2FkY2FzdCIsNjAwNzcpLGJyb3dzZXI6UHQoImJyb3dzZXIiLDYwMDc4KSxidWc6UHQoImJ1ZyIsNjAwNzkpLGNhbGVuZGFyOlB0KCJjYWxlbmRhciIsNjAwODApLGNhc2VTZW5zaXRpdmU6UHQoImNhc2Utc2Vuc2l0aXZlIiw2MDA4MSksY2hlY2s6UHQoImNoZWNrIiw2MDA4MiksY2hlY2tsaXN0OlB0KCJjaGVja2xpc3QiLDYwMDgzKSxjaGV2cm9uRG93bjpQdCgiY2hldnJvbi1kb3duIiw2MDA4NCksZHJvcERvd25CdXR0b246UHQoImRyb3AtZG93bi1idXR0b24iLDYwMDg0KSxjaGV2cm9uTGVmdDpQdCgiY2hldnJvbi1sZWZ0Iiw2MDA4NSksY2hldnJvblJpZ2h0OlB0KCJjaGV2cm9uLXJpZ2h0Iiw2MDA4NiksY2hldnJvblVwOlB0KCJjaGV2cm9uLXVwIiw2MDA4NyksY2hyb21lQ2xvc2U6UHQoImNocm9tZS1jbG9zZSIsNjAwODgpLGNocm9tZU1heGltaXplOlB0KCJjaHJvbWUtbWF4aW1pemUiLDYwMDg5KSxjaHJvbWVNaW5pbWl6ZTpQdCgiY2hyb21lLW1pbmltaXplIiw2MDA5MCksY2hyb21lUmVzdG9yZTpQdCgiY2hyb21lLXJlc3RvcmUiLDYwMDkxKSxjaXJjbGU6UHQoImNpcmNsZSIsNjAwOTIpLGNpcmNsZU91dGxpbmU6UHQoImNpcmNsZS1vdXRsaW5lIiw2MDA5MiksZGVidWdCcmVha3BvaW50VW52ZXJpZmllZDpQdCgiZGVidWctYnJlYWtwb2ludC11bnZlcmlmaWVkIiw2MDA5MiksY2lyY2xlU2xhc2g6UHQoImNpcmNsZS1zbGFzaCIsNjAwOTMpLGNpcmN1aXRCb2FyZDpQdCgiY2lyY3VpdC1ib2FyZCIsNjAwOTQpLGNsZWFyQWxsOlB0KCJjbGVhci1hbGwiLDYwMDk1KSxjbGlwcHk6UHQoImNsaXBweSIsNjAwOTYpLGNsb3NlQWxsOlB0KCJjbG9zZS1hbGwiLDYwMDk3KSxjbG91ZERvd25sb2FkOlB0KCJjbG91ZC1kb3dubG9hZCIsNjAwOTgpLGNsb3VkVXBsb2FkOlB0KCJjbG91ZC11cGxvYWQiLDYwMDk5KSxjb2RlOlB0KCJjb2RlIiw2MDEwMCksY29sbGFwc2VBbGw6UHQoImNvbGxhcHNlLWFsbCIsNjAxMDEpLGNvbG9yTW9kZTpQdCgiY29sb3ItbW9kZSIsNjAxMDIpLGNvbW1lbnREaXNjdXNzaW9uOlB0KCJjb21tZW50LWRpc2N1c3Npb24iLDYwMTAzKSxjb21wYXJlQ2hhbmdlczpQdCgiY29tcGFyZS1jaGFuZ2VzIiw2MDE1NyksY3JlZGl0Q2FyZDpQdCgiY3JlZGl0LWNhcmQiLDYwMTA1KSxkYXNoOlB0KCJkYXNoIiw2MDEwOCksZGFzaGJvYXJkOlB0KCJkYXNoYm9hcmQiLDYwMTA5KSxkYXRhYmFzZTpQdCgiZGF0YWJhc2UiLDYwMTEwKSxkZWJ1Z0NvbnRpbnVlOlB0KCJkZWJ1Zy1jb250aW51ZSIsNjAxMTEpLGRlYnVnRGlzY29ubmVjdDpQdCgiZGVidWctZGlzY29ubmVjdCIsNjAxMTIpLGRlYnVnUGF1c2U6UHQoImRlYnVnLXBhdXNlIiw2MDExMyksZGVidWdSZXN0YXJ0OlB0KCJkZWJ1Zy1yZXN0YXJ0Iiw2MDExNCksZGVidWdTdGFydDpQdCgiZGVidWctc3RhcnQiLDYwMTE1KSxkZWJ1Z1N0ZXBJbnRvOlB0KCJkZWJ1Zy1zdGVwLWludG8iLDYwMTE2KSxkZWJ1Z1N0ZXBPdXQ6UHQoImRlYnVnLXN0ZXAtb3V0Iiw2MDExNyksZGVidWdTdGVwT3ZlcjpQdCgiZGVidWctc3RlcC1vdmVyIiw2MDExOCksZGVidWdTdG9wOlB0KCJkZWJ1Zy1zdG9wIiw2MDExOSksZGVidWc6UHQoImRlYnVnIiw2MDEyMCksZGV2aWNlQ2FtZXJhVmlkZW86UHQoImRldmljZS1jYW1lcmEtdmlkZW8iLDYwMTIxKSxkZXZpY2VDYW1lcmE6UHQoImRldmljZS1jYW1lcmEiLDYwMTIyKSxkZXZpY2VNb2JpbGU6UHQoImRldmljZS1tb2JpbGUiLDYwMTIzKSxkaWZmQWRkZWQ6UHQoImRpZmYtYWRkZWQiLDYwMTI0KSxkaWZmSWdub3JlZDpQdCgiZGlmZi1pZ25vcmVkIiw2MDEyNSksZGlmZk1vZGlmaWVkOlB0KCJkaWZmLW1vZGlmaWVkIiw2MDEyNiksZGlmZlJlbW92ZWQ6UHQoImRpZmYtcmVtb3ZlZCIsNjAxMjcpLGRpZmZSZW5hbWVkOlB0KCJkaWZmLXJlbmFtZWQiLDYwMTI4KSxkaWZmOlB0KCJkaWZmIiw2MDEyOSksZGlzY2FyZDpQdCgiZGlzY2FyZCIsNjAxMzApLGVkaXRvckxheW91dDpQdCgiZWRpdG9yLWxheW91dCIsNjAxMzEpLGVtcHR5V2luZG93OlB0KCJlbXB0eS13aW5kb3ciLDYwMTMyKSxleGNsdWRlOlB0KCJleGNsdWRlIiw2MDEzMyksZXh0ZW5zaW9uczpQdCgiZXh0ZW5zaW9ucyIsNjAxMzQpLGV5ZUNsb3NlZDpQdCgiZXllLWNsb3NlZCIsNjAxMzUpLGZpbGVCaW5hcnk6UHQoImZpbGUtYmluYXJ5Iiw2MDEzNiksZmlsZUNvZGU6UHQoImZpbGUtY29kZSIsNjAxMzcpLGZpbGVNZWRpYTpQdCgiZmlsZS1tZWRpYSIsNjAxMzgpLGZpbGVQZGY6UHQoImZpbGUtcGRmIiw2MDEzOSksZmlsZVN1Ym1vZHVsZTpQdCgiZmlsZS1zdWJtb2R1bGUiLDYwMTQwKSxmaWxlU3ltbGlua0RpcmVjdG9yeTpQdCgiZmlsZS1zeW1saW5rLWRpcmVjdG9yeSIsNjAxNDEpLGZpbGVTeW1saW5rRmlsZTpQdCgiZmlsZS1zeW1saW5rLWZpbGUiLDYwMTQyKSxmaWxlWmlwOlB0KCJmaWxlLXppcCIsNjAxNDMpLGZpbGVzOlB0KCJmaWxlcyIsNjAxNDQpLGZpbHRlcjpQdCgiZmlsdGVyIiw2MDE0NSksZmxhbWU6UHQoImZsYW1lIiw2MDE0NiksZm9sZERvd246UHQoImZvbGQtZG93biIsNjAxNDcpLGZvbGRVcDpQdCgiZm9sZC11cCIsNjAxNDgpLGZvbGQ6UHQoImZvbGQiLDYwMTQ5KSxmb2xkZXJBY3RpdmU6UHQoImZvbGRlci1hY3RpdmUiLDYwMTUwKSxmb2xkZXJPcGVuZWQ6UHQoImZvbGRlci1vcGVuZWQiLDYwMTUxKSxnZWFyOlB0KCJnZWFyIiw2MDE1MiksZ2lmdDpQdCgiZ2lmdCIsNjAxNTMpLGdpc3RTZWNyZXQ6UHQoImdpc3Qtc2VjcmV0Iiw2MDE1NCksZ2lzdDpQdCgiZ2lzdCIsNjAxNTUpLGdpdENvbW1pdDpQdCgiZ2l0LWNvbW1pdCIsNjAxNTYpLGdpdENvbXBhcmU6UHQoImdpdC1jb21wYXJlIiw2MDE1NyksZ2l0TWVyZ2U6UHQoImdpdC1tZXJnZSIsNjAxNTgpLGdpdGh1YkFjdGlvbjpQdCgiZ2l0aHViLWFjdGlvbiIsNjAxNTkpLGdpdGh1YkFsdDpQdCgiZ2l0aHViLWFsdCIsNjAxNjApLGdsb2JlOlB0KCJnbG9iZSIsNjAxNjEpLGdyYWJiZXI6UHQoImdyYWJiZXIiLDYwMTYyKSxncmFwaDpQdCgiZ3JhcGgiLDYwMTYzKSxncmlwcGVyOlB0KCJncmlwcGVyIiw2MDE2NCksaGVhcnQ6UHQoImhlYXJ0Iiw2MDE2NSksaG9tZTpQdCgiaG9tZSIsNjAxNjYpLGhvcml6b250YWxSdWxlOlB0KCJob3Jpem9udGFsLXJ1bGUiLDYwMTY3KSxodWJvdDpQdCgiaHVib3QiLDYwMTY4KSxpbmJveDpQdCgiaW5ib3giLDYwMTY5KSxpc3N1ZUNsb3NlZDpQdCgiaXNzdWUtY2xvc2VkIiw2MDMyNCksaXNzdWVSZW9wZW5lZDpQdCgiaXNzdWUtcmVvcGVuZWQiLDYwMTcxKSxpc3N1ZXM6UHQoImlzc3VlcyIsNjAxNzIpLGl0YWxpYzpQdCgiaXRhbGljIiw2MDE3MyksamVyc2V5OlB0KCJqZXJzZXkiLDYwMTc0KSxqc29uOlB0KCJqc29uIiw2MDE3NSksYnJhY2tldDpQdCgiYnJhY2tldCIsNjAxNzUpLGtlYmFiVmVydGljYWw6UHQoImtlYmFiLXZlcnRpY2FsIiw2MDE3Niksa2V5OlB0KCJrZXkiLDYwMTc3KSxsYXc6UHQoImxhdyIsNjAxNzgpLGxpZ2h0YnVsYkF1dG9maXg6UHQoImxpZ2h0YnVsYi1hdXRvZml4Iiw2MDE3OSksbGlua0V4dGVybmFsOlB0KCJsaW5rLWV4dGVybmFsIiw2MDE4MCksbGluazpQdCgibGluayIsNjAxODEpLGxpc3RPcmRlcmVkOlB0KCJsaXN0LW9yZGVyZWQiLDYwMTgyKSxsaXN0VW5vcmRlcmVkOlB0KCJsaXN0LXVub3JkZXJlZCIsNjAxODMpLGxpdmVTaGFyZTpQdCgibGl2ZS1zaGFyZSIsNjAxODQpLGxvYWRpbmc6UHQoImxvYWRpbmciLDYwMTg1KSxsb2NhdGlvbjpQdCgibG9jYXRpb24iLDYwMTg2KSxtYWlsUmVhZDpQdCgibWFpbC1yZWFkIiw2MDE4NyksbWFpbDpQdCgibWFpbCIsNjAxODgpLG1hcmtkb3duOlB0KCJtYXJrZG93biIsNjAxODkpLG1lZ2FwaG9uZTpQdCgibWVnYXBob25lIiw2MDE5MCksbWVudGlvbjpQdCgibWVudGlvbiIsNjAxOTEpLG1pbGVzdG9uZTpQdCgibWlsZXN0b25lIiw2MDE5MiksbW9ydGFyQm9hcmQ6UHQoIm1vcnRhci1ib2FyZCIsNjAxOTMpLG1vdmU6UHQoIm1vdmUiLDYwMTk0KSxtdWx0aXBsZVdpbmRvd3M6UHQoIm11bHRpcGxlLXdpbmRvd3MiLDYwMTk1KSxtdXRlOlB0KCJtdXRlIiw2MDE5Niksbm9OZXdsaW5lOlB0KCJuby1uZXdsaW5lIiw2MDE5Nyksbm90ZTpQdCgibm90ZSIsNjAxOTgpLG9jdG9mYWNlOlB0KCJvY3RvZmFjZSIsNjAxOTkpLG9wZW5QcmV2aWV3OlB0KCJvcGVuLXByZXZpZXciLDYwMjAwKSxwYWNrYWdlXzpQdCgicGFja2FnZSIsNjAyMDEpLHBhaW50Y2FuOlB0KCJwYWludGNhbiIsNjAyMDIpLHBpbjpQdCgicGluIiw2MDIwMykscGxheTpQdCgicGxheSIsNjAyMDQpLHJ1bjpQdCgicnVuIiw2MDIwNCkscGx1ZzpQdCgicGx1ZyIsNjAyMDUpLHByZXNlcnZlQ2FzZTpQdCgicHJlc2VydmUtY2FzZSIsNjAyMDYpLHByZXZpZXc6UHQoInByZXZpZXciLDYwMjA3KSxwcm9qZWN0OlB0KCJwcm9qZWN0Iiw2MDIwOCkscHVsc2U6UHQoInB1bHNlIiw2MDIwOSkscXVlc3Rpb246UHQoInF1ZXN0aW9uIiw2MDIxMCkscXVvdGU6UHQoInF1b3RlIiw2MDIxMSkscmFkaW9Ub3dlcjpQdCgicmFkaW8tdG93ZXIiLDYwMjEyKSxyZWFjdGlvbnM6UHQoInJlYWN0aW9ucyIsNjAyMTMpLHJlZmVyZW5jZXM6UHQoInJlZmVyZW5jZXMiLDYwMjE0KSxyZWZyZXNoOlB0KCJyZWZyZXNoIiw2MDIxNSkscmVnZXg6UHQoInJlZ2V4Iiw2MDIxNikscmVtb3RlRXhwbG9yZXI6UHQoInJlbW90ZS1leHBsb3JlciIsNjAyMTcpLHJlbW90ZTpQdCgicmVtb3RlIiw2MDIxOCkscmVtb3ZlOlB0KCJyZW1vdmUiLDYwMjE5KSxyZXBsYWNlQWxsOlB0KCJyZXBsYWNlLWFsbCIsNjAyMjApLHJlcGxhY2U6UHQoInJlcGxhY2UiLDYwMjIxKSxyZXBvQ2xvbmU6UHQoInJlcG8tY2xvbmUiLDYwMjIyKSxyZXBvRm9yY2VQdXNoOlB0KCJyZXBvLWZvcmNlLXB1c2giLDYwMjIzKSxyZXBvUHVsbDpQdCgicmVwby1wdWxsIiw2MDIyNCkscmVwb1B1c2g6UHQoInJlcG8tcHVzaCIsNjAyMjUpLHJlcG9ydDpQdCgicmVwb3J0Iiw2MDIyNikscmVxdWVzdENoYW5nZXM6UHQoInJlcXVlc3QtY2hhbmdlcyIsNjAyMjcpLHJvY2tldDpQdCgicm9ja2V0Iiw2MDIyOCkscm9vdEZvbGRlck9wZW5lZDpQdCgicm9vdC1mb2xkZXItb3BlbmVkIiw2MDIyOSkscm9vdEZvbGRlcjpQdCgicm9vdC1mb2xkZXIiLDYwMjMwKSxyc3M6UHQoInJzcyIsNjAyMzEpLHJ1Ynk6UHQoInJ1YnkiLDYwMjMyKSxzYXZlQWxsOlB0KCJzYXZlLWFsbCIsNjAyMzMpLHNhdmVBczpQdCgic2F2ZS1hcyIsNjAyMzQpLHNhdmU6UHQoInNhdmUiLDYwMjM1KSxzY3JlZW5GdWxsOlB0KCJzY3JlZW4tZnVsbCIsNjAyMzYpLHNjcmVlbk5vcm1hbDpQdCgic2NyZWVuLW5vcm1hbCIsNjAyMzcpLHNlYXJjaFN0b3A6UHQoInNlYXJjaC1zdG9wIiw2MDIzOCksc2VydmVyOlB0KCJzZXJ2ZXIiLDYwMjQwKSxzZXR0aW5nc0dlYXI6UHQoInNldHRpbmdzLWdlYXIiLDYwMjQxKSxzZXR0aW5nczpQdCgic2V0dGluZ3MiLDYwMjQyKSxzaGllbGQ6UHQoInNoaWVsZCIsNjAyNDMpLHNtaWxleTpQdCgic21pbGV5Iiw2MDI0NCksc29ydFByZWNlZGVuY2U6UHQoInNvcnQtcHJlY2VkZW5jZSIsNjAyNDUpLHNwbGl0SG9yaXpvbnRhbDpQdCgic3BsaXQtaG9yaXpvbnRhbCIsNjAyNDYpLHNwbGl0VmVydGljYWw6UHQoInNwbGl0LXZlcnRpY2FsIiw2MDI0Nyksc3F1aXJyZWw6UHQoInNxdWlycmVsIiw2MDI0OCksc3RhckZ1bGw6UHQoInN0YXItZnVsbCIsNjAyNDkpLHN0YXJIYWxmOlB0KCJzdGFyLWhhbGYiLDYwMjUwKSxzeW1ib2xDbGFzczpQdCgic3ltYm9sLWNsYXNzIiw2MDI1MSksc3ltYm9sQ29sb3I6UHQoInN5bWJvbC1jb2xvciIsNjAyNTIpLHN5bWJvbEN1c3RvbUNvbG9yOlB0KCJzeW1ib2wtY3VzdG9tY29sb3IiLDYwMjUyKSxzeW1ib2xDb25zdGFudDpQdCgic3ltYm9sLWNvbnN0YW50Iiw2MDI1Myksc3ltYm9sRW51bU1lbWJlcjpQdCgic3ltYm9sLWVudW0tbWVtYmVyIiw2MDI1NCksc3ltYm9sRmllbGQ6UHQoInN5bWJvbC1maWVsZCIsNjAyNTUpLHN5bWJvbEZpbGU6UHQoInN5bWJvbC1maWxlIiw2MDI1Niksc3ltYm9sSW50ZXJmYWNlOlB0KCJzeW1ib2wtaW50ZXJmYWNlIiw2MDI1Nyksc3ltYm9sS2V5d29yZDpQdCgic3ltYm9sLWtleXdvcmQiLDYwMjU4KSxzeW1ib2xNaXNjOlB0KCJzeW1ib2wtbWlzYyIsNjAyNTkpLHN5bWJvbE9wZXJhdG9yOlB0KCJzeW1ib2wtb3BlcmF0b3IiLDYwMjYwKSxzeW1ib2xQcm9wZXJ0eTpQdCgic3ltYm9sLXByb3BlcnR5Iiw2MDI2MSksd3JlbmNoOlB0KCJ3cmVuY2giLDYwMjYxKSx3cmVuY2hTdWJhY3Rpb246UHQoIndyZW5jaC1zdWJhY3Rpb24iLDYwMjYxKSxzeW1ib2xTbmlwcGV0OlB0KCJzeW1ib2wtc25pcHBldCIsNjAyNjIpLHRhc2tsaXN0OlB0KCJ0YXNrbGlzdCIsNjAyNjMpLHRlbGVzY29wZTpQdCgidGVsZXNjb3BlIiw2MDI2NCksdGV4dFNpemU6UHQoInRleHQtc2l6ZSIsNjAyNjUpLHRocmVlQmFyczpQdCgidGhyZWUtYmFycyIsNjAyNjYpLHRodW1ic2Rvd246UHQoInRodW1ic2Rvd24iLDYwMjY3KSx0aHVtYnN1cDpQdCgidGh1bWJzdXAiLDYwMjY4KSx0b29sczpQdCgidG9vbHMiLDYwMjY5KSx0cmlhbmdsZURvd246UHQoInRyaWFuZ2xlLWRvd24iLDYwMjcwKSx0cmlhbmdsZUxlZnQ6UHQoInRyaWFuZ2xlLWxlZnQiLDYwMjcxKSx0cmlhbmdsZVJpZ2h0OlB0KCJ0cmlhbmdsZS1yaWdodCIsNjAyNzIpLHRyaWFuZ2xlVXA6UHQoInRyaWFuZ2xlLXVwIiw2MDI3MyksdHdpdHRlcjpQdCgidHdpdHRlciIsNjAyNzQpLHVuZm9sZDpQdCgidW5mb2xkIiw2MDI3NSksdW5sb2NrOlB0KCJ1bmxvY2siLDYwMjc2KSx1bm11dGU6UHQoInVubXV0ZSIsNjAyNzcpLHVudmVyaWZpZWQ6UHQoInVudmVyaWZpZWQiLDYwMjc4KSx2ZXJpZmllZDpQdCgidmVyaWZpZWQiLDYwMjc5KSx2ZXJzaW9uczpQdCgidmVyc2lvbnMiLDYwMjgwKSx2bUFjdGl2ZTpQdCgidm0tYWN0aXZlIiw2MDI4MSksdm1PdXRsaW5lOlB0KCJ2bS1vdXRsaW5lIiw2MDI4Miksdm1SdW5uaW5nOlB0KCJ2bS1ydW5uaW5nIiw2MDI4Myksd2F0Y2g6UHQoIndhdGNoIiw2MDI4NCksd2hpdGVzcGFjZTpQdCgid2hpdGVzcGFjZSIsNjAyODUpLHdob2xlV29yZDpQdCgid2hvbGUtd29yZCIsNjAyODYpLHdpbmRvdzpQdCgid2luZG93Iiw2MDI4Nyksd29yZFdyYXA6UHQoIndvcmQtd3JhcCIsNjAyODgpLHpvb21JbjpQdCgiem9vbS1pbiIsNjAyODkpLHpvb21PdXQ6UHQoInpvb20tb3V0Iiw2MDI5MCksbGlzdEZpbHRlcjpQdCgibGlzdC1maWx0ZXIiLDYwMjkxKSxsaXN0RmxhdDpQdCgibGlzdC1mbGF0Iiw2MDI5MiksbGlzdFNlbGVjdGlvbjpQdCgibGlzdC1zZWxlY3Rpb24iLDYwMjkzKSxzZWxlY3Rpb246UHQoInNlbGVjdGlvbiIsNjAyOTMpLGxpc3RUcmVlOlB0KCJsaXN0LXRyZWUiLDYwMjk0KSxkZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvblVudmVyaWZpZWQ6UHQoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tdW52ZXJpZmllZCIsNjAyOTUpLGRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uOlB0KCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uIiw2MDI5NiksZGVidWdCcmVha3BvaW50RnVuY3Rpb25EaXNhYmxlZDpQdCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbi1kaXNhYmxlZCIsNjAyOTYpLGRlYnVnU3RhY2tmcmFtZUFjdGl2ZTpQdCgiZGVidWctc3RhY2tmcmFtZS1hY3RpdmUiLDYwMjk3KSxjaXJjbGVTbWFsbEZpbGxlZDpQdCgiY2lyY2xlLXNtYWxsLWZpbGxlZCIsNjAyOTgpLGRlYnVnU3RhY2tmcmFtZURvdDpQdCgiZGVidWctc3RhY2tmcmFtZS1kb3QiLDYwMjk4KSxkZWJ1Z1N0YWNrZnJhbWU6UHQoImRlYnVnLXN0YWNrZnJhbWUiLDYwMjk5KSxkZWJ1Z1N0YWNrZnJhbWVGb2N1c2VkOlB0KCJkZWJ1Zy1zdGFja2ZyYW1lLWZvY3VzZWQiLDYwMjk5KSxkZWJ1Z0JyZWFrcG9pbnRVbnN1cHBvcnRlZDpQdCgiZGVidWctYnJlYWtwb2ludC11bnN1cHBvcnRlZCIsNjAzMDApLHN5bWJvbFN0cmluZzpQdCgic3ltYm9sLXN0cmluZyIsNjAzMDEpLGRlYnVnUmV2ZXJzZUNvbnRpbnVlOlB0KCJkZWJ1Zy1yZXZlcnNlLWNvbnRpbnVlIiw2MDMwMiksZGVidWdTdGVwQmFjazpQdCgiZGVidWctc3RlcC1iYWNrIiw2MDMwMyksZGVidWdSZXN0YXJ0RnJhbWU6UHQoImRlYnVnLXJlc3RhcnQtZnJhbWUiLDYwMzA0KSxjYWxsSW5jb21pbmc6UHQoImNhbGwtaW5jb21pbmciLDYwMzA2KSxjYWxsT3V0Z29pbmc6UHQoImNhbGwtb3V0Z29pbmciLDYwMzA3KSxtZW51OlB0KCJtZW51Iiw2MDMwOCksZXhwYW5kQWxsOlB0KCJleHBhbmQtYWxsIiw2MDMwOSksZmVlZGJhY2s6UHQoImZlZWRiYWNrIiw2MDMxMCksZ3JvdXBCeVJlZlR5cGU6UHQoImdyb3VwLWJ5LXJlZi10eXBlIiw2MDMxMSksdW5ncm91cEJ5UmVmVHlwZTpQdCgidW5ncm91cC1ieS1yZWYtdHlwZSIsNjAzMTIpLGFjY291bnQ6UHQoImFjY291bnQiLDYwMzEzKSxiZWxsRG90OlB0KCJiZWxsLWRvdCIsNjAzMTQpLGRlYnVnQ29uc29sZTpQdCgiZGVidWctY29uc29sZSIsNjAzMTUpLGxpYnJhcnk6UHQoImxpYnJhcnkiLDYwMzE2KSxvdXRwdXQ6UHQoIm91dHB1dCIsNjAzMTcpLHJ1bkFsbDpQdCgicnVuLWFsbCIsNjAzMTgpLHN5bmNJZ25vcmVkOlB0KCJzeW5jLWlnbm9yZWQiLDYwMzE5KSxwaW5uZWQ6UHQoInBpbm5lZCIsNjAzMjApLGdpdGh1YkludmVydGVkOlB0KCJnaXRodWItaW52ZXJ0ZWQiLDYwMzIxKSxkZWJ1Z0FsdDpQdCgiZGVidWctYWx0Iiw2MDMwNSksc2VydmVyUHJvY2VzczpQdCgic2VydmVyLXByb2Nlc3MiLDYwMzIyKSxzZXJ2ZXJFbnZpcm9ubWVudDpQdCgic2VydmVyLWVudmlyb25tZW50Iiw2MDMyMykscGFzczpQdCgicGFzcyIsNjAzMjQpLHN0b3BDaXJjbGU6UHQoInN0b3AtY2lyY2xlIiw2MDMyNSkscGxheUNpcmNsZTpQdCgicGxheS1jaXJjbGUiLDYwMzI2KSxyZWNvcmQ6UHQoInJlY29yZCIsNjAzMjcpLGRlYnVnQWx0U21hbGw6UHQoImRlYnVnLWFsdC1zbWFsbCIsNjAzMjgpLHZtQ29ubmVjdDpQdCgidm0tY29ubmVjdCIsNjAzMjkpLGNsb3VkOlB0KCJjbG91ZCIsNjAzMzApLG1lcmdlOlB0KCJtZXJnZSIsNjAzMzEpLGV4cG9ydEljb246UHQoImV4cG9ydCIsNjAzMzIpLGdyYXBoTGVmdDpQdCgiZ3JhcGgtbGVmdCIsNjAzMzMpLG1hZ25ldDpQdCgibWFnbmV0Iiw2MDMzNCksbm90ZWJvb2s6UHQoIm5vdGVib29rIiw2MDMzNSkscmVkbzpQdCgicmVkbyIsNjAzMzYpLGNoZWNrQWxsOlB0KCJjaGVjay1hbGwiLDYwMzM3KSxwaW5uZWREaXJ0eTpQdCgicGlubmVkLWRpcnR5Iiw2MDMzOCkscGFzc0ZpbGxlZDpQdCgicGFzcy1maWxsZWQiLDYwMzM5KSxjaXJjbGVMYXJnZUZpbGxlZDpQdCgiY2lyY2xlLWxhcmdlLWZpbGxlZCIsNjAzNDApLGNpcmNsZUxhcmdlOlB0KCJjaXJjbGUtbGFyZ2UiLDYwMzQxKSxjaXJjbGVMYXJnZU91dGxpbmU6UHQoImNpcmNsZS1sYXJnZS1vdXRsaW5lIiw2MDM0MSksY29tYmluZTpQdCgiY29tYmluZSIsNjAzNDIpLGdhdGhlcjpQdCgiZ2F0aGVyIiw2MDM0MiksdGFibGU6UHQoInRhYmxlIiw2MDM0MyksdmFyaWFibGVHcm91cDpQdCgidmFyaWFibGUtZ3JvdXAiLDYwMzQ0KSx0eXBlSGllcmFyY2h5OlB0KCJ0eXBlLWhpZXJhcmNoeSIsNjAzNDUpLHR5cGVIaWVyYXJjaHlTdWI6UHQoInR5cGUtaGllcmFyY2h5LXN1YiIsNjAzNDYpLHR5cGVIaWVyYXJjaHlTdXBlcjpQdCgidHlwZS1oaWVyYXJjaHktc3VwZXIiLDYwMzQ3KSxnaXRQdWxsUmVxdWVzdENyZWF0ZTpQdCgiZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUiLDYwMzQ4KSxydW5BYm92ZTpQdCgicnVuLWFib3ZlIiw2MDM0OSkscnVuQmVsb3c6UHQoInJ1bi1iZWxvdyIsNjAzNTApLG5vdGVib29rVGVtcGxhdGU6UHQoIm5vdGVib29rLXRlbXBsYXRlIiw2MDM1MSksZGVidWdSZXJ1bjpQdCgiZGVidWctcmVydW4iLDYwMzUyKSx3b3Jrc3BhY2VUcnVzdGVkOlB0KCJ3b3Jrc3BhY2UtdHJ1c3RlZCIsNjAzNTMpLHdvcmtzcGFjZVVudHJ1c3RlZDpQdCgid29ya3NwYWNlLXVudHJ1c3RlZCIsNjAzNTQpLHdvcmtzcGFjZVVuc3BlY2lmaWVkOlB0KCJ3b3Jrc3BhY2UtdW5zcGVjaWZpZWQiLDYwMzU1KSx0ZXJtaW5hbENtZDpQdCgidGVybWluYWwtY21kIiw2MDM1NiksdGVybWluYWxEZWJpYW46UHQoInRlcm1pbmFsLWRlYmlhbiIsNjAzNTcpLHRlcm1pbmFsTGludXg6UHQoInRlcm1pbmFsLWxpbnV4Iiw2MDM1OCksdGVybWluYWxQb3dlcnNoZWxsOlB0KCJ0ZXJtaW5hbC1wb3dlcnNoZWxsIiw2MDM1OSksdGVybWluYWxUbXV4OlB0KCJ0ZXJtaW5hbC10bXV4Iiw2MDM2MCksdGVybWluYWxVYnVudHU6UHQoInRlcm1pbmFsLXVidW50dSIsNjAzNjEpLHRlcm1pbmFsQmFzaDpQdCgidGVybWluYWwtYmFzaCIsNjAzNjIpLGFycm93U3dhcDpQdCgiYXJyb3ctc3dhcCIsNjAzNjMpLGNvcHk6UHQoImNvcHkiLDYwMzY0KSxwZXJzb25BZGQ6UHQoInBlcnNvbi1hZGQiLDYwMzY1KSxmaWx0ZXJGaWxsZWQ6UHQoImZpbHRlci1maWxsZWQiLDYwMzY2KSx3YW5kOlB0KCJ3YW5kIiw2MDM2NyksZGVidWdMaW5lQnlMaW5lOlB0KCJkZWJ1Zy1saW5lLWJ5LWxpbmUiLDYwMzY4KSxpbnNwZWN0OlB0KCJpbnNwZWN0Iiw2MDM2OSksbGF5ZXJzOlB0KCJsYXllcnMiLDYwMzcwKSxsYXllcnNEb3Q6UHQoImxheWVycy1kb3QiLDYwMzcxKSxsYXllcnNBY3RpdmU6UHQoImxheWVycy1hY3RpdmUiLDYwMzcyKSxjb21wYXNzOlB0KCJjb21wYXNzIiw2MDM3MyksY29tcGFzc0RvdDpQdCgiY29tcGFzcy1kb3QiLDYwMzc0KSxjb21wYXNzQWN0aXZlOlB0KCJjb21wYXNzLWFjdGl2ZSIsNjAzNzUpLGF6dXJlOlB0KCJhenVyZSIsNjAzNzYpLGlzc3VlRHJhZnQ6UHQoImlzc3VlLWRyYWZ0Iiw2MDM3NyksZ2l0UHVsbFJlcXVlc3RDbG9zZWQ6UHQoImdpdC1wdWxsLXJlcXVlc3QtY2xvc2VkIiw2MDM3OCksZ2l0UHVsbFJlcXVlc3REcmFmdDpQdCgiZ2l0LXB1bGwtcmVxdWVzdC1kcmFmdCIsNjAzNzkpLGRlYnVnQWxsOlB0KCJkZWJ1Zy1hbGwiLDYwMzgwKSxkZWJ1Z0NvdmVyYWdlOlB0KCJkZWJ1Zy1jb3ZlcmFnZSIsNjAzODEpLHJ1bkVycm9yczpQdCgicnVuLWVycm9ycyIsNjAzODIpLGZvbGRlckxpYnJhcnk6UHQoImZvbGRlci1saWJyYXJ5Iiw2MDM4MyksZGVidWdDb250aW51ZVNtYWxsOlB0KCJkZWJ1Zy1jb250aW51ZS1zbWFsbCIsNjAzODQpLGJlYWtlclN0b3A6UHQoImJlYWtlci1zdG9wIiw2MDM4NSksZ3JhcGhMaW5lOlB0KCJncmFwaC1saW5lIiw2MDM4NiksZ3JhcGhTY2F0dGVyOlB0KCJncmFwaC1zY2F0dGVyIiw2MDM4NykscGllQ2hhcnQ6UHQoInBpZS1jaGFydCIsNjAzODgpLGJyYWNrZXREb3Q6UHQoImJyYWNrZXQtZG90Iiw2MDM4OSksYnJhY2tldEVycm9yOlB0KCJicmFja2V0LWVycm9yIiw2MDM5MCksbG9ja1NtYWxsOlB0KCJsb2NrLXNtYWxsIiw2MDM5MSksYXp1cmVEZXZvcHM6UHQoImF6dXJlLWRldm9wcyIsNjAzOTIpLHZlcmlmaWVkRmlsbGVkOlB0KCJ2ZXJpZmllZC1maWxsZWQiLDYwMzkzKSxuZXdMaW5lOlB0KCJuZXdsaW5lIiw2MDM5NCksbGF5b3V0OlB0KCJsYXlvdXQiLDYwMzk1KSxsYXlvdXRBY3Rpdml0eWJhckxlZnQ6UHQoImxheW91dC1hY3Rpdml0eWJhci1sZWZ0Iiw2MDM5NiksbGF5b3V0QWN0aXZpdHliYXJSaWdodDpQdCgibGF5b3V0LWFjdGl2aXR5YmFyLXJpZ2h0Iiw2MDM5NyksbGF5b3V0UGFuZWxMZWZ0OlB0KCJsYXlvdXQtcGFuZWwtbGVmdCIsNjAzOTgpLGxheW91dFBhbmVsQ2VudGVyOlB0KCJsYXlvdXQtcGFuZWwtY2VudGVyIiw2MDM5OSksbGF5b3V0UGFuZWxKdXN0aWZ5OlB0KCJsYXlvdXQtcGFuZWwtanVzdGlmeSIsNjA0MDApLGxheW91dFBhbmVsUmlnaHQ6UHQoImxheW91dC1wYW5lbC1yaWdodCIsNjA0MDEpLGxheW91dFBhbmVsOlB0KCJsYXlvdXQtcGFuZWwiLDYwNDAyKSxsYXlvdXRTaWRlYmFyTGVmdDpQdCgibGF5b3V0LXNpZGViYXItbGVmdCIsNjA0MDMpLGxheW91dFNpZGViYXJSaWdodDpQdCgibGF5b3V0LXNpZGViYXItcmlnaHQiLDYwNDA0KSxsYXlvdXRTdGF0dXNiYXI6UHQoImxheW91dC1zdGF0dXNiYXIiLDYwNDA1KSxsYXlvdXRNZW51YmFyOlB0KCJsYXlvdXQtbWVudWJhciIsNjA0MDYpLGxheW91dENlbnRlcmVkOlB0KCJsYXlvdXQtY2VudGVyZWQiLDYwNDA3KSxsYXlvdXRTaWRlYmFyUmlnaHRPZmY6UHQoImxheW91dC1zaWRlYmFyLXJpZ2h0LW9mZiIsNjA0MTYpLGxheW91dFBhbmVsT2ZmOlB0KCJsYXlvdXQtcGFuZWwtb2ZmIiw2MDQxNyksbGF5b3V0U2lkZWJhckxlZnRPZmY6UHQoImxheW91dC1zaWRlYmFyLWxlZnQtb2ZmIiw2MDQxOCksdGFyZ2V0OlB0KCJ0YXJnZXQiLDYwNDA4KSxpbmRlbnQ6UHQoImluZGVudCIsNjA0MDkpLHJlY29yZFNtYWxsOlB0KCJyZWNvcmQtc21hbGwiLDYwNDEwKSxlcnJvclNtYWxsOlB0KCJlcnJvci1zbWFsbCIsNjA0MTEpLGFycm93Q2lyY2xlRG93bjpQdCgiYXJyb3ctY2lyY2xlLWRvd24iLDYwNDEyKSxhcnJvd0NpcmNsZUxlZnQ6UHQoImFycm93LWNpcmNsZS1sZWZ0Iiw2MDQxMyksYXJyb3dDaXJjbGVSaWdodDpQdCgiYXJyb3ctY2lyY2xlLXJpZ2h0Iiw2MDQxNCksYXJyb3dDaXJjbGVVcDpQdCgiYXJyb3ctY2lyY2xlLXVwIiw2MDQxNSksaGVhcnRGaWxsZWQ6UHQoImhlYXJ0LWZpbGxlZCIsNjA0MjApLG1hcDpQdCgibWFwIiw2MDQyMSksbWFwRmlsbGVkOlB0KCJtYXAtZmlsbGVkIiw2MDQyMiksY2lyY2xlU21hbGw6UHQoImNpcmNsZS1zbWFsbCIsNjA0MjMpLGJlbGxTbGFzaDpQdCgiYmVsbC1zbGFzaCIsNjA0MjQpLGJlbGxTbGFzaERvdDpQdCgiYmVsbC1zbGFzaC1kb3QiLDYwNDI1KSxjb21tZW50VW5yZXNvbHZlZDpQdCgiY29tbWVudC11bnJlc29sdmVkIiw2MDQyNiksZ2l0UHVsbFJlcXVlc3RHb1RvQ2hhbmdlczpQdCgiZ2l0LXB1bGwtcmVxdWVzdC1nby10by1jaGFuZ2VzIiw2MDQyNyksZ2l0UHVsbFJlcXVlc3ROZXdDaGFuZ2VzOlB0KCJnaXQtcHVsbC1yZXF1ZXN0LW5ldy1jaGFuZ2VzIiw2MDQyOCksc2VhcmNoRnV6enk6UHQoInNlYXJjaC1mdXp6eSIsNjA0MjkpLGNvbW1lbnREcmFmdDpQdCgiY29tbWVudC1kcmFmdCIsNjA0MzApLHNlbmQ6UHQoInNlbmQiLDYwNDMxKSxzcGFya2xlOlB0KCJzcGFya2xlIiw2MDQzMiksaW5zZXJ0OlB0KCJpbnNlcnQiLDYwNDMzKSxkaWFsb2dFcnJvcjpQdCgiZGlhbG9nLWVycm9yIiwiZXJyb3IiKSxkaWFsb2dXYXJuaW5nOlB0KCJkaWFsb2ctd2FybmluZyIsIndhcm5pbmciKSxkaWFsb2dJbmZvOlB0KCJkaWFsb2ctaW5mbyIsImluZm8iKSxkaWFsb2dDbG9zZTpQdCgiZGlhbG9nLWNsb3NlIiwiY2xvc2UiKSx0cmVlSXRlbUV4cGFuZGVkOlB0KCJ0cmVlLWl0ZW0tZXhwYW5kZWQiLCJjaGV2cm9uLWRvd24iKSx0cmVlRmlsdGVyT25UeXBlT246UHQoInRyZWUtZmlsdGVyLW9uLXR5cGUtb24iLCJsaXN0LWZpbHRlciIpLHRyZWVGaWx0ZXJPblR5cGVPZmY6UHQoInRyZWUtZmlsdGVyLW9uLXR5cGUtb2ZmIiwibGlzdC1zZWxlY3Rpb24iKSx0cmVlRmlsdGVyQ2xlYXI6UHQoInRyZWUtZmlsdGVyLWNsZWFyIiwiY2xvc2UiKSx0cmVlSXRlbUxvYWRpbmc6UHQoInRyZWUtaXRlbS1sb2FkaW5nIiwibG9hZGluZyIpLG1lbnVTZWxlY3Rpb246UHQoIm1lbnUtc2VsZWN0aW9uIiwiY2hlY2siKSxtZW51U3VibWVudTpQdCgibWVudS1zdWJtZW51IiwiY2hldnJvbi1yaWdodCIpLG1lbnVCYXJNb3JlOlB0KCJtZW51YmFyLW1vcmUiLCJtb3JlIiksc2Nyb2xsYmFyQnV0dG9uTGVmdDpQdCgic2Nyb2xsYmFyLWJ1dHRvbi1sZWZ0IiwidHJpYW5nbGUtbGVmdCIpLHNjcm9sbGJhckJ1dHRvblJpZ2h0OlB0KCJzY3JvbGxiYXItYnV0dG9uLXJpZ2h0IiwidHJpYW5nbGUtcmlnaHQiKSxzY3JvbGxiYXJCdXR0b25VcDpQdCgic2Nyb2xsYmFyLWJ1dHRvbi11cCIsInRyaWFuZ2xlLXVwIiksc2Nyb2xsYmFyQnV0dG9uRG93bjpQdCgic2Nyb2xsYmFyLWJ1dHRvbi1kb3duIiwidHJpYW5nbGUtZG93biIpLHRvb2xCYXJNb3JlOlB0KCJ0b29sYmFyLW1vcmUiLCJtb3JlIikscXVpY2tJbnB1dEJhY2s6UHQoInF1aWNrLWlucHV0LWJhY2siLCJhcnJvdy1sZWZ0Iil9O3ZhciBWdCxEdCxLdCxqdCxxdCxCdCxVdCwkdCxXdCxIdCx6dCxHdCxKdCxYdCxadCxZdCxRdCxlbix0bixubixybixvbixzbixhbixsbix1bixjbixobixkbixmbixtbixnbixwbix2bixibix5bixDbixfbixTbix3bixBbix4bixFbixMbixObixrbixSbixUbixPbixNbixJbj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtsKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7bChyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBsKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWwoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX07Y2xhc3MgUG4gZXh0ZW5kcyBke2dldCBpc1Jlc29sdmVkKCl7cmV0dXJuIHRoaXMuX2lzUmVzb2x2ZWR9Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKCksdGhpcy5fcmVnaXN0cnk9ZSx0aGlzLl9sYW5ndWFnZUlkPXQsdGhpcy5fZmFjdG9yeT1uLHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5fcmVzb2x2ZVByb21pc2U9bnVsbCx0aGlzLl9pc1Jlc29sdmVkPSExfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkPSEwLHN1cGVyLmRpc3Bvc2UoKX1yZXNvbHZlKCl7cmV0dXJuIEluKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVQcm9taXNlfHwodGhpcy5fcmVzb2x2ZVByb21pc2U9dGhpcy5fY3JlYXRlKCkpLHRoaXMuX3Jlc29sdmVQcm9taXNlfSkpfV9jcmVhdGUoKXtyZXR1cm4gSW4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX2ZhY3RvcnkudG9rZW5pemF0aW9uU3VwcG9ydDt0aGlzLl9pc1Jlc29sdmVkPSEwLGUmJiF0aGlzLl9pc0Rpc3Bvc2VkJiZ0aGlzLl9yZWdpc3Rlcih0aGlzLl9yZWdpc3RyeS5yZWdpc3Rlcih0aGlzLl9sYW5ndWFnZUlkLGUpKX0pKX19Y2xhc3MgRm57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMub2Zmc2V0PWUsdGhpcy50eXBlPXQsdGhpcy5sYW5ndWFnZT1uLHRoaXMuX3Rva2VuQnJhbmQ9dm9pZCAwfXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMub2Zmc2V0KyIsICIrdGhpcy50eXBlKyIpIn19IWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLEZ0LnN5bWJvbE1ldGhvZCksdC5zZXQoMSxGdC5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMixGdC5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoMyxGdC5zeW1ib2xGaWVsZCksdC5zZXQoNCxGdC5zeW1ib2xWYXJpYWJsZSksdC5zZXQoNSxGdC5zeW1ib2xDbGFzcyksdC5zZXQoNixGdC5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDcsRnQuc3ltYm9sSW50ZXJmYWNlKSx0LnNldCg4LEZ0LnN5bWJvbE1vZHVsZSksdC5zZXQoOSxGdC5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoMTAsRnQuc3ltYm9sRXZlbnQpLHQuc2V0KDExLEZ0LnN5bWJvbE9wZXJhdG9yKSx0LnNldCgxMixGdC5zeW1ib2xVbml0KSx0LnNldCgxMyxGdC5zeW1ib2xWYWx1ZSksdC5zZXQoMTUsRnQuc3ltYm9sRW51bSksdC5zZXQoMTQsRnQuc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE1LEZ0LnN5bWJvbEVudW0pLHQuc2V0KDE2LEZ0LnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDE3LEZ0LnN5bWJvbEtleXdvcmQpLHQuc2V0KDI3LEZ0LnN5bWJvbFNuaXBwZXQpLHQuc2V0KDE4LEZ0LnN5bWJvbFRleHQpLHQuc2V0KDE5LEZ0LnN5bWJvbENvbG9yKSx0LnNldCgyMCxGdC5zeW1ib2xGaWxlKSx0LnNldCgyMSxGdC5zeW1ib2xSZWZlcmVuY2UpLHQuc2V0KDIyLEZ0LnN5bWJvbEN1c3RvbUNvbG9yKSx0LnNldCgyMyxGdC5zeW1ib2xGb2xkZXIpLHQuc2V0KDI0LEZ0LnN5bWJvbFR5cGVQYXJhbWV0ZXIpLHQuc2V0KDI1LEZ0LmFjY291bnQpLHQuc2V0KDI2LEZ0Lmlzc3VlcyksZS50b0ljb249ZnVuY3Rpb24oZSl7bGV0IG49dC5nZXQoZSk7cmV0dXJuIG58fChjb25zb2xlLmluZm8oIk5vIGNvZGljb24gZm91bmQgZm9yIENvbXBsZXRpb25JdGVtS2luZCAiK2UpLG49RnQuc3ltYm9sUHJvcGVydHkpLG59O2NvbnN0IG49bmV3IE1hcDtuLnNldCgibWV0aG9kIiwwKSxuLnNldCgiZnVuY3Rpb24iLDEpLG4uc2V0KCJjb25zdHJ1Y3RvciIsMiksbi5zZXQoImZpZWxkIiwzKSxuLnNldCgidmFyaWFibGUiLDQpLG4uc2V0KCJjbGFzcyIsNSksbi5zZXQoInN0cnVjdCIsNiksbi5zZXQoImludGVyZmFjZSIsNyksbi5zZXQoIm1vZHVsZSIsOCksbi5zZXQoInByb3BlcnR5Iiw5KSxuLnNldCgiZXZlbnQiLDEwKSxuLnNldCgib3BlcmF0b3IiLDExKSxuLnNldCgidW5pdCIsMTIpLG4uc2V0KCJ2YWx1ZSIsMTMpLG4uc2V0KCJjb25zdGFudCIsMTQpLG4uc2V0KCJlbnVtIiwxNSksbi5zZXQoImVudW0tbWVtYmVyIiwxNiksbi5zZXQoImVudW1NZW1iZXIiLDE2KSxuLnNldCgia2V5d29yZCIsMTcpLG4uc2V0KCJzbmlwcGV0IiwyNyksbi5zZXQoInRleHQiLDE4KSxuLnNldCgiY29sb3IiLDE5KSxuLnNldCgiZmlsZSIsMjApLG4uc2V0KCJyZWZlcmVuY2UiLDIxKSxuLnNldCgiY3VzdG9tY29sb3IiLDIyKSxuLnNldCgiZm9sZGVyIiwyMyksbi5zZXQoInR5cGUtcGFyYW1ldGVyIiwyNCksbi5zZXQoInR5cGVQYXJhbWV0ZXIiLDI0KSxuLnNldCgiYWNjb3VudCIsMjUpLG4uc2V0KCJpc3N1ZSIsMjYpLGUuZnJvbVN0cmluZz1mdW5jdGlvbihlLHQpe2xldCByPW4uZ2V0KGUpO3JldHVybiB2b2lkIDAhPT1yfHx0fHwocj05KSxyfX0oVnR8fChWdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KER0fHwoRHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KEt0fHwoS3Q9e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifShqdHx8KGp0PXt9KSksZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3Quc2V0KDAsRnQuc3ltYm9sRmlsZSksdC5zZXQoMSxGdC5zeW1ib2xNb2R1bGUpLHQuc2V0KDIsRnQuc3ltYm9sTmFtZXNwYWNlKSx0LnNldCgzLEZ0LnN5bWJvbFBhY2thZ2UpLHQuc2V0KDQsRnQuc3ltYm9sQ2xhc3MpLHQuc2V0KDUsRnQuc3ltYm9sTWV0aG9kKSx0LnNldCg2LEZ0LnN5bWJvbFByb3BlcnR5KSx0LnNldCg3LEZ0LnN5bWJvbEZpZWxkKSx0LnNldCg4LEZ0LnN5bWJvbENvbnN0cnVjdG9yKSx0LnNldCg5LEZ0LnN5bWJvbEVudW0pLHQuc2V0KDEwLEZ0LnN5bWJvbEludGVyZmFjZSksdC5zZXQoMTEsRnQuc3ltYm9sRnVuY3Rpb24pLHQuc2V0KDEyLEZ0LnN5bWJvbFZhcmlhYmxlKSx0LnNldCgxMyxGdC5zeW1ib2xDb25zdGFudCksdC5zZXQoMTQsRnQuc3ltYm9sU3RyaW5nKSx0LnNldCgxNSxGdC5zeW1ib2xOdW1iZXIpLHQuc2V0KDE2LEZ0LnN5bWJvbEJvb2xlYW4pLHQuc2V0KDE3LEZ0LnN5bWJvbEFycmF5KSx0LnNldCgxOCxGdC5zeW1ib2xPYmplY3QpLHQuc2V0KDE5LEZ0LnN5bWJvbEtleSksdC5zZXQoMjAsRnQuc3ltYm9sTnVsbCksdC5zZXQoMjEsRnQuc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMjIsRnQuc3ltYm9sU3RydWN0KSx0LnNldCgyMyxGdC5zeW1ib2xFdmVudCksdC5zZXQoMjQsRnQuc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDI1LEZ0LnN5bWJvbFR5cGVQYXJhbWV0ZXIpLGUudG9JY29uPWZ1bmN0aW9uKGUpe2xldCBuPXQuZ2V0KGUpO3JldHVybiBufHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBTeW1ib2xLaW5kICIrZSksbj1GdC5zeW1ib2xQcm9wZXJ0eSksbn19KHF0fHwocXQ9e30pKSxmdW5jdGlvbihlKXtlLmlzPWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCJvYmplY3QiIT10eXBlb2YgZSkmJigic3RyaW5nIj09dHlwZW9mIGUuaWQmJiJzdHJpbmciPT10eXBlb2YgZS50aXRsZSl9fShCdHx8KEJ0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KFV0fHwoVXQ9e30pKSxuZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cz1uZXcgTWFwLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwLHRoaXMuX29uRGlkQ2hhbmdlPW5ldyBVLHRoaXMub25EaWRDaGFuZ2U9dGhpcy5fb25EaWRDaGFuZ2UuZXZlbnQsdGhpcy5fY29sb3JNYXA9bnVsbH1oYW5kbGVDaGFuZ2UoZSl7dGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczplLGNoYW5nZWRDb2xvck1hcDohMX0pfXJlZ2lzdGVyKGUsdCl7cmV0dXJuIHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLnNldChlLHQpLHRoaXMuaGFuZGxlQ2hhbmdlKFtlXSksYygoKCk9Pnt0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5nZXQoZSk9PT10JiYodGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuZGVsZXRlKGUpLHRoaXMuaGFuZGxlQ2hhbmdlKFtlXSkpfSkpfWdldChlKXtyZXR1cm4gdGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuZ2V0KGUpfHxudWxsfXJlZ2lzdGVyRmFjdG9yeShlLHQpe3ZhciBuO251bGw9PT0obj10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpKXx8dm9pZCAwPT09bnx8bi5kaXNwb3NlKCk7Y29uc3Qgcj1uZXcgUG4odGhpcyxlLHQpO3JldHVybiB0aGlzLl9mYWN0b3JpZXMuc2V0KGUsciksYygoKCk9Pntjb25zdCB0PXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSk7dCYmdD09PXImJih0aGlzLl9mYWN0b3JpZXMuZGVsZXRlKGUpLHQuZGlzcG9zZSgpKX0pKX1nZXRPckNyZWF0ZShlKXtyZXR1cm4gSW4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXRoaXMuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3Qgbj10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3JldHVybiFufHxuLmlzUmVzb2x2ZWQ/bnVsbDooeWllbGQgbi5yZXNvbHZlKCksdGhpcy5nZXQoZSkpfSkpfWlzUmVzb2x2ZWQoZSl7aWYodGhpcy5nZXQoZSkpcmV0dXJuITA7Y29uc3QgdD10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3JldHVybiEodCYmIXQuaXNSZXNvbHZlZCl9c2V0Q29sb3JNYXAoZSl7dGhpcy5fY29sb3JNYXA9ZSx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOkFycmF5LmZyb20odGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMua2V5cygpKSxjaGFuZ2VkQ29sb3JNYXA6ITB9KX1nZXRDb2xvck1hcCgpe3JldHVybiB0aGlzLl9jb2xvck1hcH1nZXREZWZhdWx0QmFja2dyb3VuZCgpe3JldHVybiB0aGlzLl9jb2xvck1hcCYmdGhpcy5fY29sb3JNYXAubGVuZ3RoPjI/dGhpcy5fY29sb3JNYXBbMl06bnVsbH19LGZ1bmN0aW9uKGUpe2VbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuRGlzYWJsZWQ9MV09IkRpc2FibGVkIixlW2UuRW5hYmxlZD0yXT0iRW5hYmxlZCJ9KCR0fHwoJHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5BdXRvPTJdPSJBdXRvIn0oV3R8fChXdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuS2VlcFdoaXRlc3BhY2U9MV09IktlZXBXaGl0ZXNwYWNlIixlW2UuSW5zZXJ0QXNTbmlwcGV0PTRdPSJJbnNlcnRBc1NuaXBwZXQifShIdHx8KEh0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLk1ldGhvZD0wXT0iTWV0aG9kIixlW2UuRnVuY3Rpb249MV09IkZ1bmN0aW9uIixlW2UuQ29uc3RydWN0b3I9Ml09IkNvbnN0cnVjdG9yIixlW2UuRmllbGQ9M109IkZpZWxkIixlW2UuVmFyaWFibGU9NF09IlZhcmlhYmxlIixlW2UuQ2xhc3M9NV09IkNsYXNzIixlW2UuU3RydWN0PTZdPSJTdHJ1Y3QiLGVbZS5JbnRlcmZhY2U9N109IkludGVyZmFjZSIsZVtlLk1vZHVsZT04XT0iTW9kdWxlIixlW2UuUHJvcGVydHk9OV09IlByb3BlcnR5IixlW2UuRXZlbnQ9MTBdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTExXT0iT3BlcmF0b3IiLGVbZS5Vbml0PTEyXT0iVW5pdCIsZVtlLlZhbHVlPTEzXT0iVmFsdWUiLGVbZS5Db25zdGFudD0xNF09IkNvbnN0YW50IixlW2UuRW51bT0xNV09IkVudW0iLGVbZS5FbnVtTWVtYmVyPTE2XT0iRW51bU1lbWJlciIsZVtlLktleXdvcmQ9MTddPSJLZXl3b3JkIixlW2UuVGV4dD0xOF09IlRleHQiLGVbZS5Db2xvcj0xOV09IkNvbG9yIixlW2UuRmlsZT0yMF09IkZpbGUiLGVbZS5SZWZlcmVuY2U9MjFdPSJSZWZlcmVuY2UiLGVbZS5DdXN0b21jb2xvcj0yMl09IkN1c3RvbWNvbG9yIixlW2UuRm9sZGVyPTIzXT0iRm9sZGVyIixlW2UuVHlwZVBhcmFtZXRlcj0yNF09IlR5cGVQYXJhbWV0ZXIiLGVbZS5Vc2VyPTI1XT0iVXNlciIsZVtlLklzc3VlPTI2XT0iSXNzdWUiLGVbZS5TbmlwcGV0PTI3XT0iU25pcHBldCJ9KHp0fHwoenQ9e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KEd0fHwoR3Q9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTFdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucz0yXT0iVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucyJ9KEp0fHwoSnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuRVhBQ1Q9MF09IkVYQUNUIixlW2UuQUJPVkU9MV09IkFCT1ZFIixlW2UuQkVMT1c9Ml09IkJFTE9XIn0oWHR8fChYdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob3RTZXQ9MF09Ik5vdFNldCIsZVtlLkNvbnRlbnRGbHVzaD0xXT0iQ29udGVudEZsdXNoIixlW2UuUmVjb3ZlckZyb21NYXJrZXJzPTJdPSJSZWNvdmVyRnJvbU1hcmtlcnMiLGVbZS5FeHBsaWNpdD0zXT0iRXhwbGljaXQiLGVbZS5QYXN0ZT00XT0iUGFzdGUiLGVbZS5VbmRvPTVdPSJVbmRvIixlW2UuUmVkbz02XT0iUmVkbyJ9KFp0fHwoWnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KFl0fHwoWXQ9e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifShRdHx8KFF0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwPTFdPSJLZWVwIixlW2UuQnJhY2tldHM9Ml09IkJyYWNrZXRzIixlW2UuQWR2YW5jZWQ9M109IkFkdmFuY2VkIixlW2UuRnVsbD00XT0iRnVsbCJ9KGVufHwoZW49e30pKSxmdW5jdGlvbihlKXtlW2UuYWNjZXB0U3VnZ2VzdGlvbk9uQ29tbWl0Q2hhcmFjdGVyPTBdPSJhY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXIiLGVbZS5hY2NlcHRTdWdnZXN0aW9uT25FbnRlcj0xXT0iYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXIiLGVbZS5hY2Nlc3NpYmlsaXR5U3VwcG9ydD0yXT0iYWNjZXNzaWJpbGl0eVN1cHBvcnQiLGVbZS5hY2Nlc3NpYmlsaXR5UGFnZVNpemU9M109ImFjY2Vzc2liaWxpdHlQYWdlU2l6ZSIsZVtlLmFyaWFMYWJlbD00XT0iYXJpYUxhYmVsIixlW2UuYXV0b0Nsb3NpbmdCcmFja2V0cz01XT0iYXV0b0Nsb3NpbmdCcmFja2V0cyIsZVtlLnNjcmVlblJlYWRlckFubm91bmNlSW5saW5lU3VnZ2VzdGlvbj02XT0ic2NyZWVuUmVhZGVyQW5ub3VuY2VJbmxpbmVTdWdnZXN0aW9uIixlW2UuYXV0b0Nsb3NpbmdEZWxldGU9N109ImF1dG9DbG9zaW5nRGVsZXRlIixlW2UuYXV0b0Nsb3NpbmdPdmVydHlwZT04XT0iYXV0b0Nsb3NpbmdPdmVydHlwZSIsZVtlLmF1dG9DbG9zaW5nUXVvdGVzPTldPSJhdXRvQ2xvc2luZ1F1b3RlcyIsZVtlLmF1dG9JbmRlbnQ9MTBdPSJhdXRvSW5kZW50IixlW2UuYXV0b21hdGljTGF5b3V0PTExXT0iYXV0b21hdGljTGF5b3V0IixlW2UuYXV0b1N1cnJvdW5kPTEyXT0iYXV0b1N1cnJvdW5kIixlW2UuYnJhY2tldFBhaXJDb2xvcml6YXRpb249MTNdPSJicmFja2V0UGFpckNvbG9yaXphdGlvbiIsZVtlLmd1aWRlcz0xNF09Imd1aWRlcyIsZVtlLmNvZGVMZW5zPTE1XT0iY29kZUxlbnMiLGVbZS5jb2RlTGVuc0ZvbnRGYW1pbHk9MTZdPSJjb2RlTGVuc0ZvbnRGYW1pbHkiLGVbZS5jb2RlTGVuc0ZvbnRTaXplPTE3XT0iY29kZUxlbnNGb250U2l6ZSIsZVtlLmNvbG9yRGVjb3JhdG9ycz0xOF09ImNvbG9yRGVjb3JhdG9ycyIsZVtlLmNvbG9yRGVjb3JhdG9yc0xpbWl0PTE5XT0iY29sb3JEZWNvcmF0b3JzTGltaXQiLGVbZS5jb2x1bW5TZWxlY3Rpb249MjBdPSJjb2x1bW5TZWxlY3Rpb24iLGVbZS5jb21tZW50cz0yMV09ImNvbW1lbnRzIixlW2UuY29udGV4dG1lbnU9MjJdPSJjb250ZXh0bWVudSIsZVtlLmNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nPTIzXT0iY29weVdpdGhTeW50YXhIaWdobGlnaHRpbmciLGVbZS5jdXJzb3JCbGlua2luZz0yNF09ImN1cnNvckJsaW5raW5nIixlW2UuY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb249MjVdPSJjdXJzb3JTbW9vdGhDYXJldEFuaW1hdGlvbiIsZVtlLmN1cnNvclN0eWxlPTI2XT0iY3Vyc29yU3R5bGUiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzPTI3XT0iY3Vyc29yU3Vycm91bmRpbmdMaW5lcyIsZVtlLmN1cnNvclN1cnJvdW5kaW5nTGluZXNTdHlsZT0yOF09ImN1cnNvclN1cnJvdW5kaW5nTGluZXNTdHlsZSIsZVtlLmN1cnNvcldpZHRoPTI5XT0iY3Vyc29yV2lkdGgiLGVbZS5kaXNhYmxlTGF5ZXJIaW50aW5nPTMwXT0iZGlzYWJsZUxheWVySGludGluZyIsZVtlLmRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zPTMxXT0iZGlzYWJsZU1vbm9zcGFjZU9wdGltaXphdGlvbnMiLGVbZS5kb21SZWFkT25seT0zMl09ImRvbVJlYWRPbmx5IixlW2UuZHJhZ0FuZERyb3A9MzNdPSJkcmFnQW5kRHJvcCIsZVtlLmRyb3BJbnRvRWRpdG9yPTM0XT0iZHJvcEludG9FZGl0b3IiLGVbZS5lbXB0eVNlbGVjdGlvbkNsaXBib2FyZD0zNV09ImVtcHR5U2VsZWN0aW9uQ2xpcGJvYXJkIixlW2UuZXhwZXJpbWVudGFsV2hpdGVzcGFjZVJlbmRlcmluZz0zNl09ImV4cGVyaW1lbnRhbFdoaXRlc3BhY2VSZW5kZXJpbmciLGVbZS5leHRyYUVkaXRvckNsYXNzTmFtZT0zN109ImV4dHJhRWRpdG9yQ2xhc3NOYW1lIixlW2UuZmFzdFNjcm9sbFNlbnNpdGl2aXR5PTM4XT0iZmFzdFNjcm9sbFNlbnNpdGl2aXR5IixlW2UuZmluZD0zOV09ImZpbmQiLGVbZS5maXhlZE92ZXJmbG93V2lkZ2V0cz00MF09ImZpeGVkT3ZlcmZsb3dXaWRnZXRzIixlW2UuZm9sZGluZz00MV09ImZvbGRpbmciLGVbZS5mb2xkaW5nU3RyYXRlZ3k9NDJdPSJmb2xkaW5nU3RyYXRlZ3kiLGVbZS5mb2xkaW5nSGlnaGxpZ2h0PTQzXT0iZm9sZGluZ0hpZ2hsaWdodCIsZVtlLmZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0PTQ0XT0iZm9sZGluZ0ltcG9ydHNCeURlZmF1bHQiLGVbZS5mb2xkaW5nTWF4aW11bVJlZ2lvbnM9NDVdPSJmb2xkaW5nTWF4aW11bVJlZ2lvbnMiLGVbZS51bmZvbGRPbkNsaWNrQWZ0ZXJFbmRPZkxpbmU9NDZdPSJ1bmZvbGRPbkNsaWNrQWZ0ZXJFbmRPZkxpbmUiLGVbZS5mb250RmFtaWx5PTQ3XT0iZm9udEZhbWlseSIsZVtlLmZvbnRJbmZvPTQ4XT0iZm9udEluZm8iLGVbZS5mb250TGlnYXR1cmVzPTQ5XT0iZm9udExpZ2F0dXJlcyIsZVtlLmZvbnRTaXplPTUwXT0iZm9udFNpemUiLGVbZS5mb250V2VpZ2h0PTUxXT0iZm9udFdlaWdodCIsZVtlLmZvbnRWYXJpYXRpb25zPTUyXT0iZm9udFZhcmlhdGlvbnMiLGVbZS5mb3JtYXRPblBhc3RlPTUzXT0iZm9ybWF0T25QYXN0ZSIsZVtlLmZvcm1hdE9uVHlwZT01NF09ImZvcm1hdE9uVHlwZSIsZVtlLmdseXBoTWFyZ2luPTU1XT0iZ2x5cGhNYXJnaW4iLGVbZS5nb3RvTG9jYXRpb249NTZdPSJnb3RvTG9jYXRpb24iLGVbZS5oaWRlQ3Vyc29ySW5PdmVydmlld1J1bGVyPTU3XT0iaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlciIsZVtlLmhvdmVyPTU4XT0iaG92ZXIiLGVbZS5pbkRpZmZFZGl0b3I9NTldPSJpbkRpZmZFZGl0b3IiLGVbZS5pbmxpbmVTdWdnZXN0PTYwXT0iaW5saW5lU3VnZ2VzdCIsZVtlLmxldHRlclNwYWNpbmc9NjFdPSJsZXR0ZXJTcGFjaW5nIixlW2UubGlnaHRidWxiPTYyXT0ibGlnaHRidWxiIixlW2UubGluZURlY29yYXRpb25zV2lkdGg9NjNdPSJsaW5lRGVjb3JhdGlvbnNXaWR0aCIsZVtlLmxpbmVIZWlnaHQ9NjRdPSJsaW5lSGVpZ2h0IixlW2UubGluZU51bWJlcnM9NjVdPSJsaW5lTnVtYmVycyIsZVtlLmxpbmVOdW1iZXJzTWluQ2hhcnM9NjZdPSJsaW5lTnVtYmVyc01pbkNoYXJzIixlW2UubGlua2VkRWRpdGluZz02N109ImxpbmtlZEVkaXRpbmciLGVbZS5saW5rcz02OF09ImxpbmtzIixlW2UubWF0Y2hCcmFja2V0cz02OV09Im1hdGNoQnJhY2tldHMiLGVbZS5taW5pbWFwPTcwXT0ibWluaW1hcCIsZVtlLm1vdXNlU3R5bGU9NzFdPSJtb3VzZVN0eWxlIixlW2UubW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5PTcyXT0ibW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5IixlW2UubW91c2VXaGVlbFpvb209NzNdPSJtb3VzZVdoZWVsWm9vbSIsZVtlLm11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZz03NF09Im11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZyIsZVtlLm11bHRpQ3Vyc29yTW9kaWZpZXI9NzVdPSJtdWx0aUN1cnNvck1vZGlmaWVyIixlW2UubXVsdGlDdXJzb3JQYXN0ZT03Nl09Im11bHRpQ3Vyc29yUGFzdGUiLGVbZS5tdWx0aUN1cnNvckxpbWl0PTc3XT0ibXVsdGlDdXJzb3JMaW1pdCIsZVtlLm9jY3VycmVuY2VzSGlnaGxpZ2h0PTc4XT0ib2NjdXJyZW5jZXNIaWdobGlnaHQiLGVbZS5vdmVydmlld1J1bGVyQm9yZGVyPTc5XT0ib3ZlcnZpZXdSdWxlckJvcmRlciIsZVtlLm92ZXJ2aWV3UnVsZXJMYW5lcz04MF09Im92ZXJ2aWV3UnVsZXJMYW5lcyIsZVtlLnBhZGRpbmc9ODFdPSJwYWRkaW5nIixlW2UucGFzdGVBcz04Ml09InBhc3RlQXMiLGVbZS5wYXJhbWV0ZXJIaW50cz04M109InBhcmFtZXRlckhpbnRzIixlW2UucGVla1dpZGdldERlZmF1bHRGb2N1cz04NF09InBlZWtXaWRnZXREZWZhdWx0Rm9jdXMiLGVbZS5kZWZpbml0aW9uTGlua09wZW5zSW5QZWVrPTg1XT0iZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlayIsZVtlLnF1aWNrU3VnZ2VzdGlvbnM9ODZdPSJxdWlja1N1Z2dlc3Rpb25zIixlW2UucXVpY2tTdWdnZXN0aW9uc0RlbGF5PTg3XT0icXVpY2tTdWdnZXN0aW9uc0RlbGF5IixlW2UucmVhZE9ubHk9ODhdPSJyZWFkT25seSIsZVtlLnJlbmFtZU9uVHlwZT04OV09InJlbmFtZU9uVHlwZSIsZVtlLnJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzPTkwXT0icmVuZGVyQ29udHJvbENoYXJhY3RlcnMiLGVbZS5yZW5kZXJGaW5hbE5ld2xpbmU9OTFdPSJyZW5kZXJGaW5hbE5ld2xpbmUiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0PTkyXT0icmVuZGVyTGluZUhpZ2hsaWdodCIsZVtlLnJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzPTkzXT0icmVuZGVyTGluZUhpZ2hsaWdodE9ubHlXaGVuRm9jdXMiLGVbZS5yZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnM9OTRdPSJyZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnMiLGVbZS5yZW5kZXJXaGl0ZXNwYWNlPTk1XT0icmVuZGVyV2hpdGVzcGFjZSIsZVtlLnJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmc9OTZdPSJyZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nIixlW2Uucm91bmRlZFNlbGVjdGlvbj05N109InJvdW5kZWRTZWxlY3Rpb24iLGVbZS5ydWxlcnM9OThdPSJydWxlcnMiLGVbZS5zY3JvbGxiYXI9OTldPSJzY3JvbGxiYXIiLGVbZS5zY3JvbGxCZXlvbmRMYXN0Q29sdW1uPTEwMF09InNjcm9sbEJleW9uZExhc3RDb2x1bW4iLGVbZS5zY3JvbGxCZXlvbmRMYXN0TGluZT0xMDFdPSJzY3JvbGxCZXlvbmRMYXN0TGluZSIsZVtlLnNjcm9sbFByZWRvbWluYW50QXhpcz0xMDJdPSJzY3JvbGxQcmVkb21pbmFudEF4aXMiLGVbZS5zZWxlY3Rpb25DbGlwYm9hcmQ9MTAzXT0ic2VsZWN0aW9uQ2xpcGJvYXJkIixlW2Uuc2VsZWN0aW9uSGlnaGxpZ2h0PTEwNF09InNlbGVjdGlvbkhpZ2hsaWdodCIsZVtlLnNlbGVjdE9uTGluZU51bWJlcnM9MTA1XT0ic2VsZWN0T25MaW5lTnVtYmVycyIsZVtlLnNob3dGb2xkaW5nQ29udHJvbHM9MTA2XT0ic2hvd0ZvbGRpbmdDb250cm9scyIsZVtlLnNob3dVbnVzZWQ9MTA3XT0ic2hvd1VudXNlZCIsZVtlLnNuaXBwZXRTdWdnZXN0aW9ucz0xMDhdPSJzbmlwcGV0U3VnZ2VzdGlvbnMiLGVbZS5zbWFydFNlbGVjdD0xMDldPSJzbWFydFNlbGVjdCIsZVtlLnNtb290aFNjcm9sbGluZz0xMTBdPSJzbW9vdGhTY3JvbGxpbmciLGVbZS5zdGlja3lTY3JvbGw9MTExXT0ic3RpY2t5U2Nyb2xsIixlW2Uuc3RpY2t5VGFiU3RvcHM9MTEyXT0ic3RpY2t5VGFiU3RvcHMiLGVbZS5zdG9wUmVuZGVyaW5nTGluZUFmdGVyPTExM109InN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXIiLGVbZS5zdWdnZXN0PTExNF09InN1Z2dlc3QiLGVbZS5zdWdnZXN0Rm9udFNpemU9MTE1XT0ic3VnZ2VzdEZvbnRTaXplIixlW2Uuc3VnZ2VzdExpbmVIZWlnaHQ9MTE2XT0ic3VnZ2VzdExpbmVIZWlnaHQiLGVbZS5zdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycz0xMTddPSJzdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycyIsZVtlLnN1Z2dlc3RTZWxlY3Rpb249MTE4XT0ic3VnZ2VzdFNlbGVjdGlvbiIsZVtlLnRhYkNvbXBsZXRpb249MTE5XT0idGFiQ29tcGxldGlvbiIsZVtlLnRhYkluZGV4PTEyMF09InRhYkluZGV4IixlW2UudW5pY29kZUhpZ2hsaWdodGluZz0xMjFdPSJ1bmljb2RlSGlnaGxpZ2h0aW5nIixlW2UudW51c3VhbExpbmVUZXJtaW5hdG9ycz0xMjJdPSJ1bnVzdWFsTGluZVRlcm1pbmF0b3JzIixlW2UudXNlU2hhZG93RE9NPTEyM109InVzZVNoYWRvd0RPTSIsZVtlLnVzZVRhYlN0b3BzPTEyNF09InVzZVRhYlN0b3BzIixlW2Uud29yZEJyZWFrPTEyNV09IndvcmRCcmVhayIsZVtlLndvcmRTZXBhcmF0b3JzPTEyNl09IndvcmRTZXBhcmF0b3JzIixlW2Uud29yZFdyYXA9MTI3XT0id29yZFdyYXAiLGVbZS53b3JkV3JhcEJyZWFrQWZ0ZXJDaGFyYWN0ZXJzPTEyOF09IndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnMiLGVbZS53b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycz0xMjldPSJ3b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQ29sdW1uPTEzMF09IndvcmRXcmFwQ29sdW1uIixlW2Uud29yZFdyYXBPdmVycmlkZTE9MTMxXT0id29yZFdyYXBPdmVycmlkZTEiLGVbZS53b3JkV3JhcE92ZXJyaWRlMj0xMzJdPSJ3b3JkV3JhcE92ZXJyaWRlMiIsZVtlLndyYXBwaW5nSW5kZW50PTEzM109IndyYXBwaW5nSW5kZW50IixlW2Uud3JhcHBpbmdTdHJhdGVneT0xMzRdPSJ3cmFwcGluZ1N0cmF0ZWd5IixlW2Uuc2hvd0RlcHJlY2F0ZWQ9MTM1XT0ic2hvd0RlcHJlY2F0ZWQiLGVbZS5pbmxheUhpbnRzPTEzNl09ImlubGF5SGludHMiLGVbZS5lZGl0b3JDbGFzc05hbWU9MTM3XT0iZWRpdG9yQ2xhc3NOYW1lIixlW2UucGl4ZWxSYXRpbz0xMzhdPSJwaXhlbFJhdGlvIixlW2UudGFiRm9jdXNNb2RlPTEzOV09InRhYkZvY3VzTW9kZSIsZVtlLmxheW91dEluZm89MTQwXT0ibGF5b3V0SW5mbyIsZVtlLndyYXBwaW5nSW5mbz0xNDFdPSJ3cmFwcGluZ0luZm8iLGVbZS5kZWZhdWx0Q29sb3JEZWNvcmF0b3JzPTE0Ml09ImRlZmF1bHRDb2xvckRlY29yYXRvcnMifSh0bnx8KHRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRleHREZWZpbmVkPTBdPSJUZXh0RGVmaW5lZCIsZVtlLkxGPTFdPSJMRiIsZVtlLkNSTEY9Ml09IkNSTEYifShubnx8KG5uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxGPTBdPSJMRiIsZVtlLkNSTEY9MV09IkNSTEYifShybnx8KHJuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5SaWdodD0yXT0iUmlnaHQifShvbnx8KG9uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5JbmRlbnQ9MV09IkluZGVudCIsZVtlLkluZGVudE91dGRlbnQ9Ml09IkluZGVudE91dGRlbnQiLGVbZS5PdXRkZW50PTNdPSJPdXRkZW50In0oc258fChzbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Cb3RoPTBdPSJCb3RoIixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTGVmdD0yXT0iTGVmdCIsZVtlLk5vbmU9M109Ik5vbmUifShhbnx8KGFuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KGxufHwobG49e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifSh1bnx8KHVuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRlcGVuZHNPbktiTGF5b3V0PS0xXT0iRGVwZW5kc09uS2JMYXlvdXQiLGVbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuQmFja3NwYWNlPTFdPSJCYWNrc3BhY2UiLGVbZS5UYWI9Ml09IlRhYiIsZVtlLkVudGVyPTNdPSJFbnRlciIsZVtlLlNoaWZ0PTRdPSJTaGlmdCIsZVtlLkN0cmw9NV09IkN0cmwiLGVbZS5BbHQ9Nl09IkFsdCIsZVtlLlBhdXNlQnJlYWs9N109IlBhdXNlQnJlYWsiLGVbZS5DYXBzTG9jaz04XT0iQ2Fwc0xvY2siLGVbZS5Fc2NhcGU9OV09IkVzY2FwZSIsZVtlLlNwYWNlPTEwXT0iU3BhY2UiLGVbZS5QYWdlVXA9MTFdPSJQYWdlVXAiLGVbZS5QYWdlRG93bj0xMl09IlBhZ2VEb3duIixlW2UuRW5kPTEzXT0iRW5kIixlW2UuSG9tZT0xNF09IkhvbWUiLGVbZS5MZWZ0QXJyb3c9MTVdPSJMZWZ0QXJyb3ciLGVbZS5VcEFycm93PTE2XT0iVXBBcnJvdyIsZVtlLlJpZ2h0QXJyb3c9MTddPSJSaWdodEFycm93IixlW2UuRG93bkFycm93PTE4XT0iRG93bkFycm93IixlW2UuSW5zZXJ0PTE5XT0iSW5zZXJ0IixlW2UuRGVsZXRlPTIwXT0iRGVsZXRlIixlW2UuRGlnaXQwPTIxXT0iRGlnaXQwIixlW2UuRGlnaXQxPTIyXT0iRGlnaXQxIixlW2UuRGlnaXQyPTIzXT0iRGlnaXQyIixlW2UuRGlnaXQzPTI0XT0iRGlnaXQzIixlW2UuRGlnaXQ0PTI1XT0iRGlnaXQ0IixlW2UuRGlnaXQ1PTI2XT0iRGlnaXQ1IixlW2UuRGlnaXQ2PTI3XT0iRGlnaXQ2IixlW2UuRGlnaXQ3PTI4XT0iRGlnaXQ3IixlW2UuRGlnaXQ4PTI5XT0iRGlnaXQ4IixlW2UuRGlnaXQ5PTMwXT0iRGlnaXQ5IixlW2UuS2V5QT0zMV09IktleUEiLGVbZS5LZXlCPTMyXT0iS2V5QiIsZVtlLktleUM9MzNdPSJLZXlDIixlW2UuS2V5RD0zNF09IktleUQiLGVbZS5LZXlFPTM1XT0iS2V5RSIsZVtlLktleUY9MzZdPSJLZXlGIixlW2UuS2V5Rz0zN109IktleUciLGVbZS5LZXlIPTM4XT0iS2V5SCIsZVtlLktleUk9MzldPSJLZXlJIixlW2UuS2V5Sj00MF09IktleUoiLGVbZS5LZXlLPTQxXT0iS2V5SyIsZVtlLktleUw9NDJdPSJLZXlMIixlW2UuS2V5TT00M109IktleU0iLGVbZS5LZXlOPTQ0XT0iS2V5TiIsZVtlLktleU89NDVdPSJLZXlPIixlW2UuS2V5UD00Nl09IktleVAiLGVbZS5LZXlRPTQ3XT0iS2V5USIsZVtlLktleVI9NDhdPSJLZXlSIixlW2UuS2V5Uz00OV09IktleVMiLGVbZS5LZXlUPTUwXT0iS2V5VCIsZVtlLktleVU9NTFdPSJLZXlVIixlW2UuS2V5Vj01Ml09IktleVYiLGVbZS5LZXlXPTUzXT0iS2V5VyIsZVtlLktleVg9NTRdPSJLZXlYIixlW2UuS2V5WT01NV09IktleVkiLGVbZS5LZXlaPTU2XT0iS2V5WiIsZVtlLk1ldGE9NTddPSJNZXRhIixlW2UuQ29udGV4dE1lbnU9NThdPSJDb250ZXh0TWVudSIsZVtlLkYxPTU5XT0iRjEiLGVbZS5GMj02MF09IkYyIixlW2UuRjM9NjFdPSJGMyIsZVtlLkY0PTYyXT0iRjQiLGVbZS5GNT02M109IkY1IixlW2UuRjY9NjRdPSJGNiIsZVtlLkY3PTY1XT0iRjciLGVbZS5GOD02Nl09IkY4IixlW2UuRjk9NjddPSJGOSIsZVtlLkYxMD02OF09IkYxMCIsZVtlLkYxMT02OV09IkYxMSIsZVtlLkYxMj03MF09IkYxMiIsZVtlLkYxMz03MV09IkYxMyIsZVtlLkYxND03Ml09IkYxNCIsZVtlLkYxNT03M109IkYxNSIsZVtlLkYxNj03NF09IkYxNiIsZVtlLkYxNz03NV09IkYxNyIsZVtlLkYxOD03Nl09IkYxOCIsZVtlLkYxOT03N109IkYxOSIsZVtlLkYyMD03OF09IkYyMCIsZVtlLkYyMT03OV09IkYyMSIsZVtlLkYyMj04MF09IkYyMiIsZVtlLkYyMz04MV09IkYyMyIsZVtlLkYyND04Ml09IkYyNCIsZVtlLk51bUxvY2s9ODNdPSJOdW1Mb2NrIixlW2UuU2Nyb2xsTG9jaz04NF09IlNjcm9sbExvY2siLGVbZS5TZW1pY29sb249ODVdPSJTZW1pY29sb24iLGVbZS5FcXVhbD04Nl09IkVxdWFsIixlW2UuQ29tbWE9ODddPSJDb21tYSIsZVtlLk1pbnVzPTg4XT0iTWludXMiLGVbZS5QZXJpb2Q9ODldPSJQZXJpb2QiLGVbZS5TbGFzaD05MF09IlNsYXNoIixlW2UuQmFja3F1b3RlPTkxXT0iQmFja3F1b3RlIixlW2UuQnJhY2tldExlZnQ9OTJdPSJCcmFja2V0TGVmdCIsZVtlLkJhY2tzbGFzaD05M109IkJhY2tzbGFzaCIsZVtlLkJyYWNrZXRSaWdodD05NF09IkJyYWNrZXRSaWdodCIsZVtlLlF1b3RlPTk1XT0iUXVvdGUiLGVbZS5PRU1fOD05Nl09Ik9FTV84IixlW2UuSW50bEJhY2tzbGFzaD05N109IkludGxCYWNrc2xhc2giLGVbZS5OdW1wYWQwPTk4XT0iTnVtcGFkMCIsZVtlLk51bXBhZDE9OTldPSJOdW1wYWQxIixlW2UuTnVtcGFkMj0xMDBdPSJOdW1wYWQyIixlW2UuTnVtcGFkMz0xMDFdPSJOdW1wYWQzIixlW2UuTnVtcGFkND0xMDJdPSJOdW1wYWQ0IixlW2UuTnVtcGFkNT0xMDNdPSJOdW1wYWQ1IixlW2UuTnVtcGFkNj0xMDRdPSJOdW1wYWQ2IixlW2UuTnVtcGFkNz0xMDVdPSJOdW1wYWQ3IixlW2UuTnVtcGFkOD0xMDZdPSJOdW1wYWQ4IixlW2UuTnVtcGFkOT0xMDddPSJOdW1wYWQ5IixlW2UuTnVtcGFkTXVsdGlwbHk9MTA4XT0iTnVtcGFkTXVsdGlwbHkiLGVbZS5OdW1wYWRBZGQ9MTA5XT0iTnVtcGFkQWRkIixlW2UuTlVNUEFEX1NFUEFSQVRPUj0xMTBdPSJOVU1QQURfU0VQQVJBVE9SIixlW2UuTnVtcGFkU3VidHJhY3Q9MTExXT0iTnVtcGFkU3VidHJhY3QiLGVbZS5OdW1wYWREZWNpbWFsPTExMl09Ik51bXBhZERlY2ltYWwiLGVbZS5OdW1wYWREaXZpZGU9MTEzXT0iTnVtcGFkRGl2aWRlIixlW2UuS0VZX0lOX0NPTVBPU0lUSU9OPTExNF09IktFWV9JTl9DT01QT1NJVElPTiIsZVtlLkFCTlRfQzE9MTE1XT0iQUJOVF9DMSIsZVtlLkFCTlRfQzI9MTE2XT0iQUJOVF9DMiIsZVtlLkF1ZGlvVm9sdW1lTXV0ZT0xMTddPSJBdWRpb1ZvbHVtZU11dGUiLGVbZS5BdWRpb1ZvbHVtZVVwPTExOF09IkF1ZGlvVm9sdW1lVXAiLGVbZS5BdWRpb1ZvbHVtZURvd249MTE5XT0iQXVkaW9Wb2x1bWVEb3duIixlW2UuQnJvd3NlclNlYXJjaD0xMjBdPSJCcm93c2VyU2VhcmNoIixlW2UuQnJvd3NlckhvbWU9MTIxXT0iQnJvd3NlckhvbWUiLGVbZS5Ccm93c2VyQmFjaz0xMjJdPSJCcm93c2VyQmFjayIsZVtlLkJyb3dzZXJGb3J3YXJkPTEyM109IkJyb3dzZXJGb3J3YXJkIixlW2UuTWVkaWFUcmFja05leHQ9MTI0XT0iTWVkaWFUcmFja05leHQiLGVbZS5NZWRpYVRyYWNrUHJldmlvdXM9MTI1XT0iTWVkaWFUcmFja1ByZXZpb3VzIixlW2UuTWVkaWFTdG9wPTEyNl09Ik1lZGlhU3RvcCIsZVtlLk1lZGlhUGxheVBhdXNlPTEyN109Ik1lZGlhUGxheVBhdXNlIixlW2UuTGF1bmNoTWVkaWFQbGF5ZXI9MTI4XT0iTGF1bmNoTWVkaWFQbGF5ZXIiLGVbZS5MYXVuY2hNYWlsPTEyOV09IkxhdW5jaE1haWwiLGVbZS5MYXVuY2hBcHAyPTEzMF09IkxhdW5jaEFwcDIiLGVbZS5DbGVhcj0xMzFdPSJDbGVhciIsZVtlLk1BWF9WQUxVRT0xMzJdPSJNQVhfVkFMVUUifShjbnx8KGNuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkhpbnQ9MV09IkhpbnQiLGVbZS5JbmZvPTJdPSJJbmZvIixlW2UuV2FybmluZz00XT0iV2FybmluZyIsZVtlLkVycm9yPThdPSJFcnJvciJ9KGhufHwoaG49e30pKSxmdW5jdGlvbihlKXtlW2UuVW5uZWNlc3Nhcnk9MV09IlVubmVjZXNzYXJ5IixlW2UuRGVwcmVjYXRlZD0yXT0iRGVwcmVjYXRlZCJ9KGRufHwoZG49e30pKSxmdW5jdGlvbihlKXtlW2UuSW5saW5lPTFdPSJJbmxpbmUiLGVbZS5HdXR0ZXI9Ml09Ikd1dHRlciJ9KGZufHwoZm49e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTj0wXT0iVU5LTk9XTiIsZVtlLlRFWFRBUkVBPTFdPSJURVhUQVJFQSIsZVtlLkdVVFRFUl9HTFlQSF9NQVJHSU49Ml09IkdVVFRFUl9HTFlQSF9NQVJHSU4iLGVbZS5HVVRURVJfTElORV9OVU1CRVJTPTNdPSJHVVRURVJfTElORV9OVU1CRVJTIixlW2UuR1VUVEVSX0xJTkVfREVDT1JBVElPTlM9NF09IkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TIixlW2UuR1VUVEVSX1ZJRVdfWk9ORT01XT0iR1VUVEVSX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfVEVYVD02XT0iQ09OVEVOVF9URVhUIixlW2UuQ09OVEVOVF9FTVBUWT03XT0iQ09OVEVOVF9FTVBUWSIsZVtlLkNPTlRFTlRfVklFV19aT05FPThdPSJDT05URU5UX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfV0lER0VUPTldPSJDT05URU5UX1dJREdFVCIsZVtlLk9WRVJWSUVXX1JVTEVSPTEwXT0iT1ZFUlZJRVdfUlVMRVIiLGVbZS5TQ1JPTExCQVI9MTFdPSJTQ1JPTExCQVIiLGVbZS5PVkVSTEFZX1dJREdFVD0xMl09Ik9WRVJMQVlfV0lER0VUIixlW2UuT1VUU0lERV9FRElUT1I9MTNdPSJPVVRTSURFX0VESVRPUiJ9KG1ufHwobW49e30pKSxmdW5jdGlvbihlKXtlW2UuVE9QX1JJR0hUX0NPUk5FUj0wXT0iVE9QX1JJR0hUX0NPUk5FUiIsZVtlLkJPVFRPTV9SSUdIVF9DT1JORVI9MV09IkJPVFRPTV9SSUdIVF9DT1JORVIiLGVbZS5UT1BfQ0VOVEVSPTJdPSJUT1BfQ0VOVEVSIn0oZ258fChnbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0ocG58fChwbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTBdPSJMZWZ0IixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTm9uZT0yXT0iTm9uZSIsZVtlLkxlZnRPZkluamVjdGVkVGV4dD0zXT0iTGVmdE9mSW5qZWN0ZWRUZXh0IixlW2UuUmlnaHRPZkluamVjdGVkVGV4dD00XT0iUmlnaHRPZkluamVjdGVkVGV4dCJ9KHZufHwodm49e30pKSxmdW5jdGlvbihlKXtlW2UuT2ZmPTBdPSJPZmYiLGVbZS5Pbj0xXT0iT24iLGVbZS5SZWxhdGl2ZT0yXT0iUmVsYXRpdmUiLGVbZS5JbnRlcnZhbD0zXT0iSW50ZXJ2YWwiLGVbZS5DdXN0b209NF09IkN1c3RvbSJ9KGJufHwoYm49e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlRleHQ9MV09IlRleHQiLGVbZS5CbG9ja3M9Ml09IkJsb2NrcyJ9KHlufHwoeW49e30pKSxmdW5jdGlvbihlKXtlW2UuU21vb3RoPTBdPSJTbW9vdGgiLGVbZS5JbW1lZGlhdGU9MV09IkltbWVkaWF0ZSJ9KENufHwoQ249e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0bz0xXT0iQXV0byIsZVtlLkhpZGRlbj0yXT0iSGlkZGVuIixlW2UuVmlzaWJsZT0zXT0iVmlzaWJsZSJ9KF9ufHwoX249e30pKSxmdW5jdGlvbihlKXtlW2UuTFRSPTBdPSJMVFIiLGVbZS5SVEw9MV09IlJUTCJ9KFNufHwoU249e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KHdufHwod249e30pKSxmdW5jdGlvbihlKXtlW2UuRmlsZT0wXT0iRmlsZSIsZVtlLk1vZHVsZT0xXT0iTW9kdWxlIixlW2UuTmFtZXNwYWNlPTJdPSJOYW1lc3BhY2UiLGVbZS5QYWNrYWdlPTNdPSJQYWNrYWdlIixlW2UuQ2xhc3M9NF09IkNsYXNzIixlW2UuTWV0aG9kPTVdPSJNZXRob2QiLGVbZS5Qcm9wZXJ0eT02XT0iUHJvcGVydHkiLGVbZS5GaWVsZD03XT0iRmllbGQiLGVbZS5Db25zdHJ1Y3Rvcj04XT0iQ29uc3RydWN0b3IiLGVbZS5FbnVtPTldPSJFbnVtIixlW2UuSW50ZXJmYWNlPTEwXT0iSW50ZXJmYWNlIixlW2UuRnVuY3Rpb249MTFdPSJGdW5jdGlvbiIsZVtlLlZhcmlhYmxlPTEyXT0iVmFyaWFibGUiLGVbZS5Db25zdGFudD0xM109IkNvbnN0YW50IixlW2UuU3RyaW5nPTE0XT0iU3RyaW5nIixlW2UuTnVtYmVyPTE1XT0iTnVtYmVyIixlW2UuQm9vbGVhbj0xNl09IkJvb2xlYW4iLGVbZS5BcnJheT0xN109IkFycmF5IixlW2UuT2JqZWN0PTE4XT0iT2JqZWN0IixlW2UuS2V5PTE5XT0iS2V5IixlW2UuTnVsbD0yMF09Ik51bGwiLGVbZS5FbnVtTWVtYmVyPTIxXT0iRW51bU1lbWJlciIsZVtlLlN0cnVjdD0yMl09IlN0cnVjdCIsZVtlLkV2ZW50PTIzXT0iRXZlbnQiLGVbZS5PcGVyYXRvcj0yNF09Ik9wZXJhdG9yIixlW2UuVHlwZVBhcmFtZXRlcj0yNV09IlR5cGVQYXJhbWV0ZXIifShBbnx8KEFuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRlcHJlY2F0ZWQ9MV09IkRlcHJlY2F0ZWQifSh4bnx8KHhuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkhpZGRlbj0wXT0iSGlkZGVuIixlW2UuQmxpbms9MV09IkJsaW5rIixlW2UuU21vb3RoPTJdPSJTbW9vdGgiLGVbZS5QaGFzZT0zXT0iUGhhc2UiLGVbZS5FeHBhbmQ9NF09IkV4cGFuZCIsZVtlLlNvbGlkPTVdPSJTb2xpZCJ9KEVufHwoRW49e30pKSxmdW5jdGlvbihlKXtlW2UuTGluZT0xXT0iTGluZSIsZVtlLkJsb2NrPTJdPSJCbG9jayIsZVtlLlVuZGVybGluZT0zXT0iVW5kZXJsaW5lIixlW2UuTGluZVRoaW49NF09IkxpbmVUaGluIixlW2UuQmxvY2tPdXRsaW5lPTVdPSJCbG9ja091dGxpbmUiLGVbZS5VbmRlcmxpbmVUaGluPTZdPSJVbmRlcmxpbmVUaGluIn0oTG58fChMbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTBdPSJBbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTFdPSJOZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlPTJdPSJHcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyPTNdPSJHcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXIifShObnx8KE5uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5TYW1lPTFdPSJTYW1lIixlW2UuSW5kZW50PTJdPSJJbmRlbnQiLGVbZS5EZWVwSW5kZW50PTNdPSJEZWVwSW5kZW50In0oa258fChrbj17fSkpO2NsYXNzIFZue3N0YXRpYyBjaG9yZChlLHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybihlfCg2NTUzNSZ0KTw8MTY+Pj4wKT4+PjB9KGUsdCl9fWZ1bmN0aW9uIERuKGUsdCxuLHIsaSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoMD09PXIpcmV0dXJuITA7Y29uc3Qgbz10LmNoYXJDb2RlQXQoci0xKTtpZigwIT09ZS5nZXQobykpcmV0dXJuITA7aWYoMTM9PT1vfHwxMD09PW8pcmV0dXJuITA7aWYoaT4wKXtjb25zdCBuPXQuY2hhckNvZGVBdChyKTtpZigwIT09ZS5nZXQobikpcmV0dXJuITB9cmV0dXJuITF9KGUsdCwwLHIsaSkmJmZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYocitpPT09bilyZXR1cm4hMDtjb25zdCBvPXQuY2hhckNvZGVBdChyK2kpO2lmKDAhPT1lLmdldChvKSlyZXR1cm4hMDtpZigxMz09PW98fDEwPT09bylyZXR1cm4hMDtpZihpPjApe2NvbnN0IG49dC5jaGFyQ29kZUF0KHIraS0xKTtpZigwIT09ZS5nZXQobikpcmV0dXJuITB9cmV0dXJuITF9KGUsdCxuLHIsaSl9Vm4uQ3RybENtZD0yMDQ4LFZuLlNoaWZ0PTEwMjQsVm4uQWx0PTUxMixWbi5XaW5DdHJsPTI1NixmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KFJufHwoUm49e30pKSxmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLlJpZ2h0PTJdPSJSaWdodCJ9KFRufHwoVG49e30pKSxmdW5jdGlvbihlKXtlW2UuSW5saW5lPTFdPSJJbmxpbmUiLGVbZS5HdXR0ZXI9Ml09Ikd1dHRlciJ9KE9ufHwoT249e30pKSxmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0oTW58fChNbj17fSkpO2NsYXNzIEtue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fd29yZFNlcGFyYXRvcnM9ZSx0aGlzLl9zZWFyY2hSZWdleD10LHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9cmVzZXQoZSl7dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4PWUsdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1uZXh0KGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG47ZG97aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCt0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9PT10KXJldHVybiBudWxsO2lmKG49dGhpcy5fc2VhcmNoUmVnZXguZXhlYyhlKSwhbilyZXR1cm4gbnVsbDtjb25zdCByPW4uaW5kZXgsaT1uWzBdLmxlbmd0aDtpZihyPT09dGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCYmaT09PXRoaXMuX3ByZXZNYXRjaExlbmd0aCl7aWYoMD09PWkpe1koZSx0LHRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCk+NjU1MzU/dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0yOnRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9MTtjb250aW51ZX1yZXR1cm4gbnVsbH1pZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PXIsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPWksIXRoaXMuX3dvcmRTZXBhcmF0b3JzfHxEbih0aGlzLl93b3JkU2VwYXJhdG9ycyxlLHQscixpKSlyZXR1cm4gbn13aGlsZShuKTtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gam4oZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiBxbihlKXtlKCl8fChlKCksdChuZXcgcygiQXNzZXJ0aW9uIEZhaWxlZCIpKSl9ZnVuY3Rpb24gQm4oZSx0KXtsZXQgbj0wO2Zvcig7bjxlLmxlbmd0aC0xOyl7aWYoIXQoZVtuXSxlW24rMV0pKXJldHVybiExO24rK31yZXR1cm4hMH1jbGFzcyBVbntzdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKGUsdCxuKXtjb25zdCByPW4/bi5zdGFydExpbmVOdW1iZXI6MSxpPW4/bi5lbmRMaW5lTnVtYmVyOmUuZ2V0TGluZUNvdW50KCksbz1uZXcgJG4odCkscz1vLmdldENhbmRpZGF0ZUNvZGVQb2ludHMoKTtsZXQgYTt2YXIgbCx1O2E9ImFsbE5vbkJhc2ljQXNjaWkiPT09cz9uZXcgUmVnRXhwKCJbXlxcdFxcblxcclxceDIwLVxceDdFXSIsImciKTpuZXcgUmVnRXhwKCIiKyhsPUFycmF5LmZyb20ocyksYFske3U9bC5tYXAoKGU9PlN0cmluZy5mcm9tQ29kZVBvaW50KGUpKSkuam9pbigiIiksdS5yZXBsYWNlKC9bXFxce1x9XCpcK1w/XHxcXlwkXC5cW1xdXChcKV0vZywiXFwkJiIpfV1gKSwiZyIpO2NvbnN0IGM9bmV3IEtuKG51bGwsYSksaD1bXTtsZXQgZCxmPSExLG09MCxnPTAscD0wO2U6Zm9yKGxldCB0PXIsbj1pO3Q8PW47dCsrKXtjb25zdCBuPWUuZ2V0TGluZUNvbnRlbnQodCkscj1uLmxlbmd0aDtjLnJlc2V0KDApO2Rve2lmKGQ9Yy5uZXh0KG4pLGQpe2xldCBlPWQuaW5kZXgsaT1kLmluZGV4K2RbMF0ubGVuZ3RoO2lmKGU+MCl7WihuLmNoYXJDb2RlQXQoZS0xKSkmJmUtLX1pZihpKzE8cil7WihuLmNoYXJDb2RlQXQoaS0xKSkmJmkrK31jb25zdCBzPW4uc3Vic3RyaW5nKGUsaSk7bGV0IGE9ZHQoZSsxLGN0LG4sMCk7YSYmYS5lbmRDb2x1bW48PWUrMSYmKGE9bnVsbCk7Y29uc3QgbD1vLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkocyxhP2Eud29yZDpudWxsKTtpZigwIT09bCl7Mz09PWw/bSsrOjI9PT1sP2crKzoxPT09bD9wKys6am4oKTtjb25zdCBuPTFlMztpZihoLmxlbmd0aD49bil7Zj0hMDticmVhayBlfWgucHVzaChuZXcgcnQodCxlKzEsdCxpKzEpKX19fXdoaWxlKGQpfXJldHVybntyYW5nZXM6aCxoYXNNb3JlOmYsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6bSxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDpnLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDpwfX1zdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRSZWFzb24oZSx0KXtjb25zdCBuPW5ldyAkbih0KTtzd2l0Y2gobi5zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKGUsbnVsbCkpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDI6cmV0dXJue2tpbmQ6MX07Y2FzZSAzOntjb25zdCByPWUuY29kZVBvaW50QXQoMCksaT1uLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0UHJpbWFyeUNvbmZ1c2FibGUociksbz1lZS5nZXRMb2NhbGVzKCkuZmlsdGVyKChlPT4hZWUuZ2V0SW5zdGFuY2UobmV3IFNldChbLi4udC5hbGxvd2VkTG9jYWxlcyxlXSkpLmlzQW1iaWd1b3VzKHIpKSk7cmV0dXJue2tpbmQ6MCxjb25mdXNhYmxlV2l0aDpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSxub3RBbWJpZ3VvdXNJbkxvY2FsZXM6b319Y2FzZSAxOnJldHVybntraW5kOjJ9fX19Y2xhc3MgJG57Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWUsdGhpcy5hbGxvd2VkQ29kZVBvaW50cz1uZXcgU2V0KGUuYWxsb3dlZENvZGVQb2ludHMpLHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycz1lZS5nZXRJbnN0YW5jZShuZXcgU2V0KGUuYWxsb3dlZExvY2FsZXMpKX1nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCl7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuImFsbE5vbkJhc2ljQXNjaWkiO2NvbnN0IGU9bmV3IFNldDtpZih0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiB0ZS5jb2RlUG9pbnRzKVduKFN0cmluZy5mcm9tQ29kZVBvaW50KHQpKXx8ZS5hZGQodCk7aWYodGhpcy5vcHRpb25zLmFtYmlndW91c0NoYXJhY3RlcnMpZm9yKGNvbnN0IHQgb2YgdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCkpZS5hZGQodCk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5hbGxvd2VkQ29kZVBvaW50cyllLmRlbGV0ZSh0KTtyZXR1cm4gZX1zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKGUsdCl7Y29uc3Qgbj1lLmNvZGVQb2ludEF0KDApO2lmKHRoaXMuYWxsb3dlZENvZGVQb2ludHMuaGFzKG4pKXJldHVybiAwO2lmKHRoaXMub3B0aW9ucy5ub25CYXNpY0FTQ0lJKXJldHVybiAxO2xldCByPSExLGk9ITE7aWYodClmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PWUuY29kZVBvaW50QXQoMCksbj0obz1lLFEudGVzdChvKSk7cj1yfHxuLG58fHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyh0KXx8dGUuaXNJbnZpc2libGVDaGFyYWN0ZXIodCl8fChpPSEwKX12YXIgbztyZXR1cm4hciYmaT8wOnRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzJiYhV24oZSkmJnRlLmlzSW52aXNpYmxlQ2hhcmFjdGVyKG4pPzI6dGhpcy5vcHRpb25zLmFtYmlndW91c0NoYXJhY3RlcnMmJnRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyhuKT8zOjB9fWZ1bmN0aW9uIFduKGUpe3JldHVybiIgIj09PWV8fCJcbiI9PT1lfHwiXHQiPT09ZX1jbGFzcyBIbntzdGF0aWMgZnJvbVJhbmdlKGUpe3JldHVybiBuZXcgSG4oZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyKX1zdGF0aWMgam9pbk1hbnkoZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybltdO2xldCB0PWVbMF07Zm9yKGxldCBuPTE7bjxlLmxlbmd0aDtuKyspdD10aGlzLmpvaW4odCxlW25dKTtyZXR1cm4gdH1zdGF0aWMgam9pbihlLHQpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDtpZigwPT09dC5sZW5ndGgpcmV0dXJuIGU7Y29uc3Qgbj1bXTtsZXQgcj0wLGk9MCxvPW51bGw7Zm9yKDtyPGUubGVuZ3RofHxpPHQubGVuZ3RoOyl7bGV0IHM9bnVsbDtpZihyPGUubGVuZ3RoJiZpPHQubGVuZ3RoKXtjb25zdCBuPWVbcl0sbz10W2ldO24uc3RhcnRMaW5lTnVtYmVyPG8uc3RhcnRMaW5lTnVtYmVyPyhzPW4scisrKToocz1vLGkrKyl9ZWxzZSByPGUubGVuZ3RoPyhzPWVbcl0scisrKToocz10W2ldLGkrKyk7bnVsbD09PW8/bz1zOm8uZW5kTGluZU51bWJlckV4Y2x1c2l2ZT49cy5zdGFydExpbmVOdW1iZXI/bz1uZXcgSG4oby5zdGFydExpbmVOdW1iZXIsTWF0aC5tYXgoby5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLHMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkpOihuLnB1c2gobyksbz1zKX1yZXR1cm4gbnVsbCE9PW8mJm4ucHVzaChvKSxufXN0YXRpYyBvZkxlbmd0aChlLHQpe3JldHVybiBuZXcgSG4oZSxlK3QpfWNvbnN0cnVjdG9yKGUsdCl7aWYoZT50KXRocm93IG5ldyBzKGBzdGFydExpbmVOdW1iZXIgJHtlfSBjYW5ub3QgYmUgYWZ0ZXIgZW5kTGluZU51bWJlckV4Y2x1c2l2ZSAke3R9YCk7dGhpcy5zdGFydExpbmVOdW1iZXI9ZSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9dH1jb250YWlucyhlKXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PWUmJmU8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWdldCBpc0VtcHR5KCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPT09dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWRlbHRhKGUpe3JldHVybiBuZXcgSG4odGhpcy5zdGFydExpbmVOdW1iZXIrZSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrZSl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtdGhpcy5zdGFydExpbmVOdW1iZXJ9am9pbihlKXtyZXR1cm4gbmV3IEhuKE1hdGgubWluKHRoaXMuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRMaW5lTnVtYmVyKSxNYXRoLm1heCh0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSl9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy5zdGFydExpbmVOdW1iZXJ9LCR7dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfSlgfWludGVyc2VjdChlKXtjb25zdCB0PU1hdGgubWF4KHRoaXMuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRMaW5lTnVtYmVyKSxuPU1hdGgubWluKHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpO2lmKHQ8PW4pcmV0dXJuIG5ldyBIbih0LG4pfWludGVyc2VjdHNTdHJpY3QoZSl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPGUuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmZS5zdGFydExpbmVOdW1iZXI8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfW92ZXJsYXBPclRvdWNoKGUpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjw9ZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZlLnN0YXJ0TGluZU51bWJlcjw9dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWVxdWFscyhlKXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09ZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfXRvSW5jbHVzaXZlUmFuZ2UoKXtyZXR1cm4gdGhpcy5pc0VtcHR5P251bGw6bmV3IHJ0KHRoaXMuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpfXRvRXhjbHVzaXZlUmFuZ2UoKXtyZXR1cm4gbmV3IHJ0KHRoaXMuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLDEpfX1jbGFzcyB6bntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuY2hhbmdlcz1lLHRoaXMuaGl0VGltZW91dD10fX1jbGFzcyBHbntzdGF0aWMgaW52ZXJzZShlLHQsbil7Y29uc3Qgcj1bXTtsZXQgaT0xLG89MTtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPW5ldyBHbihuZXcgSG4oaSx0Lm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyKSxuZXcgSG4obyx0Lm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyKSx2b2lkIDApO2UubW9kaWZpZWRSYW5nZS5pc0VtcHR5fHxyLnB1c2goZSksaT10Lm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxvPXQubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWNvbnN0IHM9bmV3IEduKG5ldyBIbihpLHQrMSksbmV3IEhuKG8sbisxKSx2b2lkIDApO3JldHVybiBzLm1vZGlmaWVkUmFuZ2UuaXNFbXB0eXx8ci5wdXNoKHMpLHJ9Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMub3JpZ2luYWxSYW5nZT1lLHRoaXMubW9kaWZpZWRSYW5nZT10LHRoaXMuaW5uZXJDaGFuZ2VzPW59dG9TdHJpbmcoKXtyZXR1cm5geyR7dGhpcy5vcmlnaW5hbFJhbmdlLnRvU3RyaW5nKCl9LT4ke3RoaXMubW9kaWZpZWRSYW5nZS50b1N0cmluZygpfX1gfWdldCBjaGFuZ2VkTGluZUNvdW50KCl7cmV0dXJuIE1hdGgubWF4KHRoaXMub3JpZ2luYWxSYW5nZS5sZW5ndGgsdGhpcy5tb2RpZmllZFJhbmdlLmxlbmd0aCl9fWNsYXNzIEpue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5vcmlnaW5hbFJhbmdlPWUsdGhpcy5tb2RpZmllZFJhbmdlPXR9dG9TdHJpbmcoKXtyZXR1cm5geyR7dGhpcy5vcmlnaW5hbFJhbmdlLnRvU3RyaW5nKCl9LT4ke3RoaXMubW9kaWZpZWRSYW5nZS50b1N0cmluZygpfX1gfX1mdW5jdGlvbiBYbihlLHQsbixyKXtyZXR1cm4gbmV3IHllKGUsdCxuKS5Db21wdXRlRGlmZihyKX1sZXQgWm49Y2xhc3N7Y29uc3RydWN0b3IoZSl7Y29uc3QgdD1bXSxuPVtdO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl0W3JdPW5yKGVbcl0sMSksbltyXT1ycihlW3JdLDEpO3RoaXMubGluZXM9ZSx0aGlzLl9zdGFydENvbHVtbnM9dCx0aGlzLl9lbmRDb2x1bW5zPW59Z2V0RWxlbWVudHMoKXtjb25zdCBlPVtdO2ZvcihsZXQgdD0wLG49dGhpcy5saW5lcy5sZW5ndGg7dDxuO3QrKyllW3RdPXRoaXMubGluZXNbdF0uc3Vic3RyaW5nKHRoaXMuX3N0YXJ0Q29sdW1uc1t0XS0xLHRoaXMuX2VuZENvbHVtbnNbdF0tMSk7cmV0dXJuIGV9Z2V0U3RyaWN0RWxlbWVudChlKXtyZXR1cm4gdGhpcy5saW5lc1tlXX1nZXRTdGFydExpbmVOdW1iZXIoZSl7cmV0dXJuIGUrMX1nZXRFbmRMaW5lTnVtYmVyKGUpe3JldHVybiBlKzF9Y3JlYXRlQ2hhclNlcXVlbmNlKGUsdCxuKXtjb25zdCByPVtdLGk9W10sbz1bXTtsZXQgcz0wO2ZvcihsZXQgYT10O2E8PW47YSsrKXtjb25zdCB0PXRoaXMubGluZXNbYV0sbD1lP3RoaXMuX3N0YXJ0Q29sdW1uc1thXToxLHU9ZT90aGlzLl9lbmRDb2x1bW5zW2FdOnQubGVuZ3RoKzE7Zm9yKGxldCBlPWw7ZTx1O2UrKylyW3NdPXQuY2hhckNvZGVBdChlLTEpLGlbc109YSsxLG9bc109ZSxzKys7IWUmJmE8biYmKHJbc109MTAsaVtzXT1hKzEsb1tzXT10Lmxlbmd0aCsxLHMrKyl9cmV0dXJuIG5ldyBZbihyLGksbyl9fTtjbGFzcyBZbntjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5fY2hhckNvZGVzPWUsdGhpcy5fbGluZU51bWJlcnM9dCx0aGlzLl9jb2x1bW5zPW59dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5fY2hhckNvZGVzLm1hcCgoKGUsdCk9PigxMD09PWU/IlxcbiI6U3RyaW5nLmZyb21DaGFyQ29kZShlKSkrYC0oJHt0aGlzLl9saW5lTnVtYmVyc1t0XX0sJHt0aGlzLl9jb2x1bW5zW3RdfSlgKSkuam9pbigiLCAiKSsiXSJ9X2Fzc2VydEluZGV4KGUsdCl7aWYoZTwwfHxlPj10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgaW5kZXgiKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLl9jaGFyQ29kZXN9Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiBlPjAmJmU9PT10aGlzLl9saW5lTnVtYmVycy5sZW5ndGg/dGhpcy5nZXRFbmRMaW5lTnVtYmVyKGUtMSk6KHRoaXMuX2Fzc2VydEluZGV4KGUsdGhpcy5fbGluZU51bWJlcnMpLHRoaXMuX2xpbmVOdW1iZXJzW2VdKX1nZXRFbmRMaW5lTnVtYmVyKGUpe3JldHVybi0xPT09ZT90aGlzLmdldFN0YXJ0TGluZU51bWJlcihlKzEpOih0aGlzLl9hc3NlcnRJbmRleChlLHRoaXMuX2xpbmVOdW1iZXJzKSwxMD09PXRoaXMuX2NoYXJDb2Rlc1tlXT90aGlzLl9saW5lTnVtYmVyc1tlXSsxOnRoaXMuX2xpbmVOdW1iZXJzW2VdKX1nZXRTdGFydENvbHVtbihlKXtyZXR1cm4gZT4wJiZlPT09dGhpcy5fY29sdW1ucy5sZW5ndGg/dGhpcy5nZXRFbmRDb2x1bW4oZS0xKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9jb2x1bW5zKSx0aGlzLl9jb2x1bW5zW2VdKX1nZXRFbmRDb2x1bW4oZSl7cmV0dXJuLTE9PT1lP3RoaXMuZ2V0U3RhcnRDb2x1bW4oZSsxKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9jb2x1bW5zKSwxMD09PXRoaXMuX2NoYXJDb2Rlc1tlXT8xOnRoaXMuX2NvbHVtbnNbZV0rMSl9fWNsYXNzIFFue2NvbnN0cnVjdG9yKGUsdCxuLHIsaSxvLHMsYSl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj1lLHRoaXMub3JpZ2luYWxTdGFydENvbHVtbj10LHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdGhpcy5vcmlnaW5hbEVuZENvbHVtbj1yLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9aSx0aGlzLm1vZGlmaWVkU3RhcnRDb2x1bW49byx0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1zLHRoaXMubW9kaWZpZWRFbmRDb2x1bW49YX1zdGF0aWMgY3JlYXRlRnJvbURpZmZDaGFuZ2UoZSx0LG4pe2NvbnN0IHI9dC5nZXRTdGFydExpbmVOdW1iZXIoZS5vcmlnaW5hbFN0YXJ0KSxpPXQuZ2V0U3RhcnRDb2x1bW4oZS5vcmlnaW5hbFN0YXJ0KSxvPXQuZ2V0RW5kTGluZU51bWJlcihlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aC0xKSxzPXQuZ2V0RW5kQ29sdW1uKGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoLTEpLGE9bi5nZXRTdGFydExpbmVOdW1iZXIoZS5tb2RpZmllZFN0YXJ0KSxsPW4uZ2V0U3RhcnRDb2x1bW4oZS5tb2RpZmllZFN0YXJ0KSx1PW4uZ2V0RW5kTGluZU51bWJlcihlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aC0xKSxjPW4uZ2V0RW5kQ29sdW1uKGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoLTEpO3JldHVybiBuZXcgUW4ocixpLG8scyxhLGwsdSxjKX19Y2xhc3MgZXJ7Y29uc3RydWN0b3IoZSx0LG4scixpKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCx0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPW4sdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9cix0aGlzLmNoYXJDaGFuZ2VzPWl9c3RhdGljIGNyZWF0ZUZyb21EaWZmUmVzdWx0KGUsdCxuLHIsaSxvLHMpe2xldCBhLGwsdSxjLGg7aWYoMD09PXQub3JpZ2luYWxMZW5ndGg/KGE9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KS0xLGw9MCk6KGE9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KSxsPW4uZ2V0RW5kTGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSksMD09PXQubW9kaWZpZWRMZW5ndGg/KHU9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KS0xLGM9MCk6KHU9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KSxjPXIuZ2V0RW5kTGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKSksbyYmdC5vcmlnaW5hbExlbmd0aD4wJiZ0Lm9yaWdpbmFsTGVuZ3RoPDIwJiZ0Lm1vZGlmaWVkTGVuZ3RoPjAmJnQubW9kaWZpZWRMZW5ndGg8MjAmJmkoKSl7Y29uc3Qgbz1uLmNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQub3JpZ2luYWxTdGFydCx0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxhPXIuY3JlYXRlQ2hhclNlcXVlbmNlKGUsdC5tb2RpZmllZFN0YXJ0LHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpO2lmKG8uZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCYmYS5nZXRFbGVtZW50cygpLmxlbmd0aD4wKXtsZXQgZT1YbihvLGEsaSwhMCkuY2hhbmdlcztzJiYoZT1mdW5jdGlvbihlKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCB0PVtlWzBdXTtsZXQgbj10WzBdO2ZvcihsZXQgcj0xLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3QgaT1lW3JdLG89aS5vcmlnaW5hbFN0YXJ0LShuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCkscz1pLm1vZGlmaWVkU3RhcnQtKG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKTtNYXRoLm1pbihvLHMpPDM/KG4ub3JpZ2luYWxMZW5ndGg9aS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGgtbi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGg9aS5tb2RpZmllZFN0YXJ0K2kubW9kaWZpZWRMZW5ndGgtbi5tb2RpZmllZFN0YXJ0KToodC5wdXNoKGkpLG49aSl9cmV0dXJuIHR9KGUpKSxoPVtdO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyloLnB1c2goUW4uY3JlYXRlRnJvbURpZmZDaGFuZ2UoZVt0XSxvLGEpKX19cmV0dXJuIG5ldyBlcihhLGwsdSxjLGgpfX1jbGFzcyB0cntjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXM9bi5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzPW4uc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlPW4uc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZj1uLnNob3VsZE1ha2VQcmV0dHlEaWZmLHRoaXMub3JpZ2luYWxMaW5lcz1lLHRoaXMubW9kaWZpZWRMaW5lcz10LHRoaXMub3JpZ2luYWw9bmV3IFpuKGUpLHRoaXMubW9kaWZpZWQ9bmV3IFpuKHQpLHRoaXMuY29udGludWVMaW5lRGlmZj1pcihuLm1heENvbXB1dGF0aW9uVGltZSksdGhpcy5jb250aW51ZUNoYXJEaWZmPWlyKDA9PT1uLm1heENvbXB1dGF0aW9uVGltZT8wOk1hdGgubWluKG4ubWF4Q29tcHV0YXRpb25UaW1lLDVlMykpfWNvbXB1dGVEaWZmKCl7aWYoMT09PXRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoJiYwPT09dGhpcy5vcmlnaW5hbC5saW5lc1swXS5sZW5ndGgpcmV0dXJuIDE9PT10aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoP3txdWl0RWFybHk6ITEsY2hhbmdlczpbXX06e3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MSxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjp0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCxjaGFyQ2hhbmdlczp2b2lkIDB9XX07aWYoMT09PXRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoJiYwPT09dGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGgpcmV0dXJue3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6dGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGgsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6MSxjaGFyQ2hhbmdlczp2b2lkIDB9XX07Y29uc3QgZT1Ybih0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUxpbmVEaWZmLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmYpLHQ9ZS5jaGFuZ2VzLG49ZS5xdWl0RWFybHk7aWYodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspZS5wdXNoKGVyLmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdFtuXSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpO3JldHVybntxdWl0RWFybHk6bixjaGFuZ2VzOmV9fWNvbnN0IHI9W107bGV0IGk9MCxvPTA7Zm9yKGxldCBlPS0xLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3Qgcz1lKzE8bj90W2UrMV06bnVsbCxhPXM/cy5vcmlnaW5hbFN0YXJ0OnRoaXMub3JpZ2luYWxMaW5lcy5sZW5ndGgsbD1zP3MubW9kaWZpZWRTdGFydDp0aGlzLm1vZGlmaWVkTGluZXMubGVuZ3RoO2Zvcig7aTxhJiZvPGw7KXtjb25zdCBlPXRoaXMub3JpZ2luYWxMaW5lc1tpXSx0PXRoaXMubW9kaWZpZWRMaW5lc1tvXTtpZihlIT09dCl7e2xldCBuPW5yKGUsMSkscz1ucih0LDEpO2Zvcig7bj4xJiZzPjE7KXtpZihlLmNoYXJDb2RlQXQobi0yKSE9PXQuY2hhckNvZGVBdChzLTIpKWJyZWFrO24tLSxzLS19KG4+MXx8cz4xKSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShyLGkrMSwxLG4sbysxLDEscyl9e2xldCBuPXJyKGUsMSkscz1ycih0LDEpO2NvbnN0IGE9ZS5sZW5ndGgrMSxsPXQubGVuZ3RoKzE7Zm9yKDtuPGEmJnM8bDspe2lmKGUuY2hhckNvZGVBdChuLTEpIT09ZS5jaGFyQ29kZUF0KHMtMSkpYnJlYWs7bisrLHMrK30objxhfHxzPGwpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHIsaSsxLG4sYSxvKzEscyxsKX19aSsrLG8rK31zJiYoci5wdXNoKGVyLmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2Uscyx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpLGkrPXMub3JpZ2luYWxMZW5ndGgsbys9cy5tb2RpZmllZExlbmd0aCl9cmV0dXJue3F1aXRFYXJseTpuLGNoYW5nZXM6cn19X3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8scyl7aWYodGhpcy5fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8scykpcmV0dXJuO2xldCBhO3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiYoYT1bbmV3IFFuKHQsbix0LHIsaSxvLGkscyldKSxlLnB1c2gobmV3IGVyKHQsdCxpLGksYSkpfV9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQsbixyLGksbyxzKXtjb25zdCBhPWUubGVuZ3RoO2lmKDA9PT1hKXJldHVybiExO2NvbnN0IGw9ZVthLTFdO3JldHVybiAwIT09bC5vcmlnaW5hbEVuZExpbmVOdW1iZXImJjAhPT1sLm1vZGlmaWVkRW5kTGluZU51bWJlciYmKGwub3JpZ2luYWxFbmRMaW5lTnVtYmVyPT09dCYmbC5tb2RpZmllZEVuZExpbmVOdW1iZXI9PT1pPyh0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmbC5jaGFyQ2hhbmdlcyYmbC5jaGFyQ2hhbmdlcy5wdXNoKG5ldyBRbih0LG4sdCxyLGksbyxpLHMpKSwhMCk6bC5vcmlnaW5hbEVuZExpbmVOdW1iZXIrMT09PXQmJmwubW9kaWZpZWRFbmRMaW5lTnVtYmVyKzE9PT1pJiYobC5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCxsLm1vZGlmaWVkRW5kTGluZU51bWJlcj1pLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiZsLmNoYXJDaGFuZ2VzJiZsLmNoYXJDaGFuZ2VzLnB1c2gobmV3IFFuKHQsbix0LHIsaSxvLGkscykpLCEwKSl9fWZ1bmN0aW9uIG5yKGUsdCl7Y29uc3Qgbj1mdW5jdGlvbihlKXtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KHQpO2lmKDMyIT09biYmOSE9PW4pcmV0dXJuIHR9cmV0dXJuLTF9KGUpO3JldHVybi0xPT09bj90Om4rMX1mdW5jdGlvbiBycihlLHQpe2NvbnN0IG49ZnVuY3Rpb24oZSx0PWUubGVuZ3RoLTEpe2ZvcihsZXQgbj10O24+PTA7bi0tKXtjb25zdCB0PWUuY2hhckNvZGVBdChuKTtpZigzMiE9PXQmJjkhPT10KXJldHVybiBufXJldHVybi0xfShlKTtyZXR1cm4tMT09PW4/dDpuKzJ9ZnVuY3Rpb24gaXIoZSl7aWYoMD09PWUpcmV0dXJuKCk9PiEwO2NvbnN0IHQ9RGF0ZS5ub3coKTtyZXR1cm4oKT0+RGF0ZS5ub3coKS10PGV9Y2xhc3Mgb3J7c3RhdGljIGFkZFJhbmdlKGUsdCl7bGV0IG49MDtmb3IoO248dC5sZW5ndGgmJnRbbl0uZW5kRXhjbHVzaXZlPGUuc3RhcnQ7KW4rKztsZXQgcj1uO2Zvcig7cjx0Lmxlbmd0aCYmdFtyXS5zdGFydDw9ZS5lbmRFeGNsdXNpdmU7KXIrKztpZihuPT09cil0LnNwbGljZShuLDAsZSk7ZWxzZXtjb25zdCBpPU1hdGgubWluKGUuc3RhcnQsdFtuXS5zdGFydCksbz1NYXRoLm1heChlLmVuZEV4Y2x1c2l2ZSx0W3ItMV0uZW5kRXhjbHVzaXZlKTt0LnNwbGljZShuLHItbixuZXcgb3IoaSxvKSl9fXN0YXRpYyB0cnlDcmVhdGUoZSx0KXtpZighKGU+dCkpcmV0dXJuIG5ldyBvcihlLHQpfWNvbnN0cnVjdG9yKGUsdCl7aWYodGhpcy5zdGFydD1lLHRoaXMuZW5kRXhjbHVzaXZlPXQsZT50KXRocm93IG5ldyBzKGBJbnZhbGlkIHJhbmdlOiAke3RoaXMudG9TdHJpbmcoKX1gKX1nZXQgaXNFbXB0eSgpe3JldHVybiB0aGlzLnN0YXJ0PT09dGhpcy5lbmRFeGNsdXNpdmV9ZGVsdGEoZSl7cmV0dXJuIG5ldyBvcih0aGlzLnN0YXJ0K2UsdGhpcy5lbmRFeGNsdXNpdmUrZSl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZEV4Y2x1c2l2ZS10aGlzLnN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYFske3RoaXMuc3RhcnR9LCAke3RoaXMuZW5kRXhjbHVzaXZlfSlgfWVxdWFscyhlKXtyZXR1cm4gdGhpcy5zdGFydD09PWUuc3RhcnQmJnRoaXMuZW5kRXhjbHVzaXZlPT09ZS5lbmRFeGNsdXNpdmV9Y29udGFpbnNSYW5nZShlKXtyZXR1cm4gdGhpcy5zdGFydDw9ZS5zdGFydCYmZS5lbmRFeGNsdXNpdmU8PXRoaXMuZW5kRXhjbHVzaXZlfWpvaW4oZSl7cmV0dXJuIG5ldyBvcihNYXRoLm1pbih0aGlzLnN0YXJ0LGUuc3RhcnQpLE1hdGgubWF4KHRoaXMuZW5kRXhjbHVzaXZlLGUuZW5kRXhjbHVzaXZlKSl9aW50ZXJzZWN0KGUpe2NvbnN0IHQ9TWF0aC5tYXgodGhpcy5zdGFydCxlLnN0YXJ0KSxuPU1hdGgubWluKHRoaXMuZW5kRXhjbHVzaXZlLGUuZW5kRXhjbHVzaXZlKTtpZih0PD1uKXJldHVybiBuZXcgb3IodCxuKX19Y2xhc3Mgc3J7c3RhdGljIHRyaXZpYWwoZSx0KXtyZXR1cm4gbmV3IHNyKFtuZXcgYXIobmV3IG9yKDAsZS5sZW5ndGgpLG5ldyBvcigwLHQubGVuZ3RoKSldLCExKX1zdGF0aWMgdHJpdmlhbFRpbWVkT3V0KGUsdCl7cmV0dXJuIG5ldyBzcihbbmV3IGFyKG5ldyBvcigwLGUubGVuZ3RoKSxuZXcgb3IoMCx0Lmxlbmd0aCkpXSwhMCl9Y29uc3RydWN0b3IoZSx0KXt0aGlzLmRpZmZzPWUsdGhpcy5oaXRUaW1lb3V0PXR9fWNsYXNzIGFye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zZXExUmFuZ2U9ZSx0aGlzLnNlcTJSYW5nZT10fXJldmVyc2UoKXtyZXR1cm4gbmV3IGFyKHRoaXMuc2VxMlJhbmdlLHRoaXMuc2VxMVJhbmdlKX10b1N0cmluZygpe3JldHVybmAke3RoaXMuc2VxMVJhbmdlfSA8LT4gJHt0aGlzLnNlcTJSYW5nZX1gfWpvaW4oZSl7cmV0dXJuIG5ldyBhcih0aGlzLnNlcTFSYW5nZS5qb2luKGUuc2VxMVJhbmdlKSx0aGlzLnNlcTJSYW5nZS5qb2luKGUuc2VxMlJhbmdlKSl9fWNsYXNzIGxye2lzVmFsaWQoKXtyZXR1cm4hMH19bHIuaW5zdGFuY2U9bmV3IGxyO2NsYXNzIHVye2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMudGltZW91dD1lLHRoaXMuc3RhcnRUaW1lPURhdGUubm93KCksdGhpcy52YWxpZD0hMCxlPD0wKXRocm93IG5ldyBzKCJ0aW1lb3V0IG11c3QgYmUgcG9zaXRpdmUiKX1pc1ZhbGlkKCl7cmV0dXJuIShEYXRlLm5vdygpLXRoaXMuc3RhcnRUaW1lPHRoaXMudGltZW91dCkmJnRoaXMudmFsaWQmJih0aGlzLnZhbGlkPSExKSx0aGlzLnZhbGlkfX1jbGFzcyBjcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD10LHRoaXMuYXJyYXk9W10sdGhpcy5hcnJheT1uZXcgQXJyYXkoZSp0KX1nZXQoZSx0KXtyZXR1cm4gdGhpcy5hcnJheVtlK3QqdGhpcy53aWR0aF19c2V0KGUsdCxuKXt0aGlzLmFycmF5W2UrdCp0aGlzLndpZHRoXT1ufX1jbGFzcyBocntjb21wdXRlKGUsdCxuPWxyLmluc3RhbmNlLHIpe2lmKDA9PT1lLmxlbmd0aHx8MD09PXQubGVuZ3RoKXJldHVybiBzci50cml2aWFsKGUsdCk7Y29uc3QgaT1uZXcgY3IoZS5sZW5ndGgsdC5sZW5ndGgpLG89bmV3IGNyKGUubGVuZ3RoLHQubGVuZ3RoKSxzPW5ldyBjcihlLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspZm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKyspe2lmKCFuLmlzVmFsaWQoKSlyZXR1cm4gc3IudHJpdmlhbFRpbWVkT3V0KGUsdCk7Y29uc3QgdT0wPT09YT8wOmkuZ2V0KGEtMSxsKSxjPTA9PT1sPzA6aS5nZXQoYSxsLTEpO2xldCBoO2UuZ2V0RWxlbWVudChhKT09PXQuZ2V0RWxlbWVudChsKT8oaD0wPT09YXx8MD09PWw/MDppLmdldChhLTEsbC0xKSxhPjAmJmw+MCYmMz09PW8uZ2V0KGEtMSxsLTEpJiYoaCs9cy5nZXQoYS0xLGwtMSkpLGgrPXI/cihhLGwpOjEpOmg9LTE7Y29uc3QgZD1NYXRoLm1heCh1LGMsaCk7aWYoZD09PWgpe2NvbnN0IGU9YT4wJiZsPjA/cy5nZXQoYS0xLGwtMSk6MDtzLnNldChhLGwsZSsxKSxvLnNldChhLGwsMyl9ZWxzZSBkPT09dT8ocy5zZXQoYSxsLDApLG8uc2V0KGEsbCwxKSk6ZD09PWMmJihzLnNldChhLGwsMCksby5zZXQoYSxsLDIpKTtpLnNldChhLGwsZCl9Y29uc3QgYT1bXTtsZXQgbD1lLmxlbmd0aCx1PXQubGVuZ3RoO2Z1bmN0aW9uIGMoZSx0KXtlKzE9PT1sJiZ0KzE9PT11fHxhLnB1c2gobmV3IGFyKG5ldyBvcihlKzEsbCksbmV3IG9yKHQrMSx1KSkpLGw9ZSx1PXR9bGV0IGg9ZS5sZW5ndGgtMSxkPXQubGVuZ3RoLTE7Zm9yKDtoPj0wJiZkPj0wOykzPT09by5nZXQoaCxkKT8oYyhoLGQpLGgtLSxkLS0pOjE9PT1vLmdldChoLGQpP2gtLTpkLS07cmV0dXJuIGMoLTEsLTEpLGEucmV2ZXJzZSgpLG5ldyBzcihhLCExKX19ZnVuY3Rpb24gZHIoZSx0LG4pe2xldCByPW47cmV0dXJuIHI9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9W107bi5sZW5ndGg+MCYmci5wdXNoKG5bMF0pO2ZvcihsZXQgZT0xO2U8bi5sZW5ndGg7ZSsrKXtjb25zdCBpPXJbci5sZW5ndGgtMV0sbz1uW2VdO2lmKG8uc2VxMVJhbmdlLmlzRW1wdHkpe2xldCBlPSEwO2NvbnN0IG49by5zZXExUmFuZ2Uuc3RhcnQtaS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2ZvcihsZXQgcj0xO3I8PW47cisrKWlmKHQuZ2V0RWxlbWVudChvLnNlcTJSYW5nZS5zdGFydC1yKSE9PXQuZ2V0RWxlbWVudChvLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtcikpe2U9ITE7YnJlYWt9aWYoZSl7cltyLmxlbmd0aC0xXT1uZXcgYXIoaS5zZXExUmFuZ2UsbmV3IG9yKGkuc2VxMlJhbmdlLnN0YXJ0LG8uc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZS1uKSk7Y29udGludWV9fXIucHVzaChvKX1yZXR1cm4gcn0oMCx0LHIpLHI9ZnVuY3Rpb24oZSx0LG4pe2lmKCFlLmdldEJvdW5kYXJ5U2NvcmV8fCF0LmdldEJvdW5kYXJ5U2NvcmUpcmV0dXJuIG47Zm9yKGxldCByPTA7cjxuLmxlbmd0aDtyKyspe2NvbnN0IGk9bltyXTtpZihpLnNlcTFSYW5nZS5pc0VtcHR5KXtjb25zdCBvPXI+MD9uW3ItMV0uc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZTotMSxzPXIrMTxuLmxlbmd0aD9uW3IrMV0uc2VxMlJhbmdlLnN0YXJ0OnQubGVuZ3RoO25bcl09ZnIoaSxlLHQscyxvKX1lbHNlIGlmKGkuc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IG89cj4wP25bci0xXS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlOi0xLHM9cisxPG4ubGVuZ3RoP25bcisxXS5zZXExUmFuZ2Uuc3RhcnQ6ZS5sZW5ndGg7bltyXT1mcihpLnJldmVyc2UoKSx0LGUscyxvKS5yZXZlcnNlKCl9fXJldHVybiBufShlLHQscikscn1mdW5jdGlvbiBmcihlLHQsbixyLGkpe2xldCBvPTE7Zm9yKDtlLnNlcTJSYW5nZS5zdGFydC1vPmkmJm4uZ2V0RWxlbWVudChlLnNlcTJSYW5nZS5zdGFydC1vKT09PW4uZ2V0RWxlbWVudChlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtbykmJm88MjA7KW8rKztvLS07bGV0IHM9MDtmb3IoO2Uuc2VxMlJhbmdlLnN0YXJ0K3M8ciYmbi5nZXRFbGVtZW50KGUuc2VxMlJhbmdlLnN0YXJ0K3MpPT09bi5nZXRFbGVtZW50KGUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZStzKSYmczwyMDspcysrO2lmKDA9PT1vJiYwPT09cylyZXR1cm4gZTtsZXQgYT0wLGw9LTE7Zm9yKGxldCByPS1vO3I8PXM7cisrKXtjb25zdCBpPWUuc2VxMlJhbmdlLnN0YXJ0K3Isbz1lLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrcixzPWUuc2VxMVJhbmdlLnN0YXJ0K3IsdT10LmdldEJvdW5kYXJ5U2NvcmUocykrbi5nZXRCb3VuZGFyeVNjb3JlKGkpK24uZ2V0Qm91bmRhcnlTY29yZShvKTt1PmwmJihsPXUsYT1yKX1yZXR1cm4gMCE9PWE/bmV3IGFyKGUuc2VxMVJhbmdlLmRlbHRhKGEpLGUuc2VxMlJhbmdlLmRlbHRhKGEpKTplfWNsYXNzIG1ye2NvbXB1dGUoZSx0LG49bHIuaW5zdGFuY2Upe2lmKDA9PT1lLmxlbmd0aHx8MD09PXQubGVuZ3RoKXJldHVybiBzci50cml2aWFsKGUsdCk7ZnVuY3Rpb24gcihuLHIpe2Zvcig7bjxlLmxlbmd0aCYmcjx0Lmxlbmd0aCYmZS5nZXRFbGVtZW50KG4pPT09dC5nZXRFbGVtZW50KHIpOyluKysscisrO3JldHVybiBufWxldCBpPTA7Y29uc3Qgbz1uZXcgcHI7by5zZXQoMCxyKDAsMCkpO2NvbnN0IHM9bmV3IHZyO3Muc2V0KDAsMD09PW8uZ2V0KDApP251bGw6bmV3IGdyKG51bGwsMCwwLG8uZ2V0KDApKSk7bGV0IGE9MDtlOmZvcig7Oylmb3IoaSsrLGE9LWk7YTw9aTthKz0yKXtpZighbi5pc1ZhbGlkKCkpcmV0dXJuIHNyLnRyaXZpYWxUaW1lZE91dChlLHQpO2NvbnN0IGw9YT09PWk/LTE6by5nZXQoYSsxKSx1PWE9PT0taT8tMTpvLmdldChhLTEpKzEsYz1NYXRoLm1pbihNYXRoLm1heChsLHUpLGUubGVuZ3RoKSxoPWMtYSxkPXIoYyxoKTtvLnNldChhLGQpO2NvbnN0IGY9Yz09PWw/cy5nZXQoYSsxKTpzLmdldChhLTEpO2lmKHMuc2V0KGEsZCE9PWM/bmV3IGdyKGYsYyxoLGQtYyk6Ziksby5nZXQoYSk9PT1lLmxlbmd0aCYmby5nZXQoYSktYT09PXQubGVuZ3RoKWJyZWFrIGV9bGV0IGw9cy5nZXQoYSk7Y29uc3QgdT1bXTtsZXQgYz1lLmxlbmd0aCxoPXQubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgZT1sP2wueCtsLmxlbmd0aDowLHQ9bD9sLnkrbC5sZW5ndGg6MDtpZihlPT09YyYmdD09PWh8fHUucHVzaChuZXcgYXIobmV3IG9yKGUsYyksbmV3IG9yKHQsaCkpKSwhbClicmVhaztjPWwueCxoPWwueSxsPWwucHJldn1yZXR1cm4gdS5yZXZlcnNlKCksbmV3IHNyKHUsITEpfX1jbGFzcyBncntjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnByZXY9ZSx0aGlzLng9dCx0aGlzLnk9bix0aGlzLmxlbmd0aD1yfX1jbGFzcyBwcntjb25zdHJ1Y3Rvcigpe3RoaXMucG9zaXRpdmVBcnI9bmV3IEludDMyQXJyYXkoMTApLHRoaXMubmVnYXRpdmVBcnI9bmV3IEludDMyQXJyYXkoMTApfWdldChlKXtyZXR1cm4gZTwwPyhlPS1lLTEsdGhpcy5uZWdhdGl2ZUFycltlXSk6dGhpcy5wb3NpdGl2ZUFycltlXX1zZXQoZSx0KXtpZihlPDApe2lmKChlPS1lLTEpPj10aGlzLm5lZ2F0aXZlQXJyLmxlbmd0aCl7Y29uc3QgZT10aGlzLm5lZ2F0aXZlQXJyO3RoaXMubmVnYXRpdmVBcnI9bmV3IEludDMyQXJyYXkoMiplLmxlbmd0aCksdGhpcy5uZWdhdGl2ZUFyci5zZXQoZSl9dGhpcy5uZWdhdGl2ZUFycltlXT10fWVsc2V7aWYoZT49dGhpcy5wb3NpdGl2ZUFyci5sZW5ndGgpe2NvbnN0IGU9dGhpcy5wb3NpdGl2ZUFycjt0aGlzLnBvc2l0aXZlQXJyPW5ldyBJbnQzMkFycmF5KDIqZS5sZW5ndGgpLHRoaXMucG9zaXRpdmVBcnIuc2V0KGUpfXRoaXMucG9zaXRpdmVBcnJbZV09dH19fWNsYXNzIHZye2NvbnN0cnVjdG9yKCl7dGhpcy5wb3NpdGl2ZUFycj1bXSx0aGlzLm5lZ2F0aXZlQXJyPVtdfWdldChlKXtyZXR1cm4gZTwwPyhlPS1lLTEsdGhpcy5uZWdhdGl2ZUFycltlXSk6dGhpcy5wb3NpdGl2ZUFycltlXX1zZXQoZSx0KXtlPDA/KGU9LWUtMSx0aGlzLm5lZ2F0aXZlQXJyW2VdPXQpOnRoaXMucG9zaXRpdmVBcnJbZV09dH19Y2xhc3MgYnJ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnRyaW1tZWRIYXNoPWUsdGhpcy5saW5lcz10fWdldEVsZW1lbnQoZSl7cmV0dXJuIHRoaXMudHJpbW1lZEhhc2hbZV19Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnRyaW1tZWRIYXNoLmxlbmd0aH1nZXRCb3VuZGFyeVNjb3JlKGUpe3JldHVybiAxZTMtKCgwPT09ZT8wOnlyKHRoaXMubGluZXNbZS0xXSkpKyhlPT09dGhpcy5saW5lcy5sZW5ndGg/MDp5cih0aGlzLmxpbmVzW2VdKSkpfX1mdW5jdGlvbiB5cihlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aCYmKDMyPT09ZS5jaGFyQ29kZUF0KHQpfHw5PT09ZS5jaGFyQ29kZUF0KHQpKTspdCsrO3JldHVybiB0fWNsYXNzIENye2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLmxpbmVzPWUsdGhpcy5jb25zaWRlcldoaXRlc3BhY2VDaGFuZ2VzPW4sdGhpcy5lbGVtZW50cz1bXSx0aGlzLmZpcnN0Q2hhck9mZnNldEJ5TGluZU1pbnVzT25lPVtdLHRoaXMub2Zmc2V0QnlMaW5lPVtdO2xldCByPSExO3Quc3RhcnQ+MCYmdC5lbmRFeGNsdXNpdmU+PWUubGVuZ3RoJiYodD1uZXcgb3IodC5zdGFydC0xLHQuZW5kRXhjbHVzaXZlKSxyPSEwKSx0aGlzLmxpbmVSYW5nZT10O2ZvcihsZXQgdD10aGlzLmxpbmVSYW5nZS5zdGFydDt0PHRoaXMubGluZVJhbmdlLmVuZEV4Y2x1c2l2ZTt0Kyspe2xldCBpPWVbdF0sbz0wO2lmKHIpbz1pLmxlbmd0aCxpPSIiLHI9ITE7ZWxzZSBpZighbil7Y29uc3QgZT1pLnRyaW1TdGFydCgpO289aS5sZW5ndGgtZS5sZW5ndGgsaT1lLnRyaW1FbmQoKX10aGlzLm9mZnNldEJ5TGluZS5wdXNoKG8pO2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXRoaXMuZWxlbWVudHMucHVzaChpLmNoYXJDb2RlQXQoZSkpO3Q8ZS5sZW5ndGgtMSYmKHRoaXMuZWxlbWVudHMucHVzaCgiXG4iLmNoYXJDb2RlQXQoMCkpLHRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lTWludXNPbmVbdC10aGlzLmxpbmVSYW5nZS5zdGFydF09dGhpcy5lbGVtZW50cy5sZW5ndGgpfXRoaXMub2Zmc2V0QnlMaW5lLnB1c2goMCl9dG9TdHJpbmcoKXtyZXR1cm5gU2xpY2U6ICIke3RoaXMudGV4dH0iYH1nZXQgdGV4dCgpe3JldHVyblsuLi50aGlzLmVsZW1lbnRzXS5tYXAoKGU9PlN0cmluZy5mcm9tQ2hhckNvZGUoZSkpKS5qb2luKCIiKX1nZXRFbGVtZW50KGUpe3JldHVybiB0aGlzLmVsZW1lbnRzW2VdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZShlKXtjb25zdCB0PUFyKGU+MD90aGlzLmVsZW1lbnRzW2UtMV06LTEpLG49QXIoZTx0aGlzLmVsZW1lbnRzLmxlbmd0aD90aGlzLmVsZW1lbnRzW2VdOi0xKTtpZig2PT09dCYmNz09PW4pcmV0dXJuIDA7bGV0IHI9MDtyZXR1cm4gdCE9PW4mJihyKz0xMCwxPT09biYmKHIrPTEpKSxyKz13cih0KSxyKz13cihuKSxyfXRyYW5zbGF0ZU9mZnNldChlKXtpZih0aGlzLmxpbmVSYW5nZS5pc0VtcHR5KXJldHVybiBuZXcgbnQodGhpcy5saW5lUmFuZ2Uuc3RhcnQrMSwxKTtsZXQgdD0wLG49dGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmVNaW51c09uZS5sZW5ndGg7Zm9yKDt0PG47KXtjb25zdCByPU1hdGguZmxvb3IoKHQrbikvMik7dGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmVNaW51c09uZVtyXT5lP249cjp0PXIrMX1jb25zdCByPTA9PT10PzA6dGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmVNaW51c09uZVt0LTFdO3JldHVybiBuZXcgbnQodGhpcy5saW5lUmFuZ2Uuc3RhcnQrdCsxLGUtcisxK3RoaXMub2Zmc2V0QnlMaW5lW3RdKX10cmFuc2xhdGVSYW5nZShlKXtyZXR1cm4gcnQuZnJvbVBvc2l0aW9ucyh0aGlzLnRyYW5zbGF0ZU9mZnNldChlLnN0YXJ0KSx0aGlzLnRyYW5zbGF0ZU9mZnNldChlLmVuZEV4Y2x1c2l2ZSkpfWZpbmRXb3JkQ29udGFpbmluZyhlKXtpZihlPDB8fGU+PXRoaXMuZWxlbWVudHMubGVuZ3RoKXJldHVybjtpZighX3IodGhpcy5lbGVtZW50c1tlXSkpcmV0dXJuO2xldCB0PWU7Zm9yKDt0PjAmJl9yKHRoaXMuZWxlbWVudHNbdC0xXSk7KXQtLTtsZXQgbj1lO2Zvcig7bjx0aGlzLmVsZW1lbnRzLmxlbmd0aCYmX3IodGhpcy5lbGVtZW50c1tuXSk7KW4rKztyZXR1cm4gbmV3IG9yKHQsbil9fWZ1bmN0aW9uIF9yKGUpe3JldHVybiBlPj05NyYmZTw9MTIyfHxlPj02NSYmZTw9OTB8fGU+PTQ4JiZlPD01N31jb25zdCBTcj17MDowLDE6MCwyOjAsMzoxMCw0OjIsNTozLDY6MTAsNzoxMH07ZnVuY3Rpb24gd3IoZSl7cmV0dXJuIFNyW2VdfWZ1bmN0aW9uIEFyKGUpe3JldHVybiAxMD09PWU/NzoxMz09PWU/NjpmdW5jdGlvbihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZX0oZSk/NTplPj05NyYmZTw9MTIyPzA6ZT49NjUmJmU8PTkwPzE6ZT49NDgmJmU8PTU3PzI6LTE9PT1lPzM6NH1jb25zdCB4cj17bGVnYWN5Om5ldyBjbGFzc3tjb21wdXRlRGlmZihlLHQsbil7dmFyIHI7Y29uc3QgaT1uZXcgdHIoZSx0LHttYXhDb21wdXRhdGlvblRpbWU6bi5tYXhDb21wdXRhdGlvblRpbWVNcyxzaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZTpuLmlnbm9yZVRyaW1XaGl0ZXNwYWNlLHNob3VsZENvbXB1dGVDaGFyQ2hhbmdlczohMCxzaG91bGRNYWtlUHJldHR5RGlmZjohMCxzaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzOiEwfSkuY29tcHV0ZURpZmYoKSxvPVtdO2xldCBzPW51bGw7Zm9yKGNvbnN0IGUgb2YgaS5jaGFuZ2VzKXtsZXQgdCxuO3Q9MD09PWUub3JpZ2luYWxFbmRMaW5lTnVtYmVyP25ldyBIbihlLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyKzEsZS5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcisxKTpuZXcgSG4oZS5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcixlLm9yaWdpbmFsRW5kTGluZU51bWJlcisxKSxuPTA9PT1lLm1vZGlmaWVkRW5kTGluZU51bWJlcj9uZXcgSG4oZS5tb2RpZmllZFN0YXJ0TGluZU51bWJlcisxLGUubW9kaWZpZWRTdGFydExpbmVOdW1iZXIrMSk6bmV3IEhuKGUubW9kaWZpZWRTdGFydExpbmVOdW1iZXIsZS5tb2RpZmllZEVuZExpbmVOdW1iZXIrMSk7bGV0IGk9bmV3IEduKHQsbixudWxsPT09KHI9ZS5jaGFyQ2hhbmdlcyl8fHZvaWQgMD09PXI/dm9pZCAwOnIubWFwKChlPT5uZXcgSm4obmV3IHJ0KGUub3JpZ2luYWxTdGFydExpbmVOdW1iZXIsZS5vcmlnaW5hbFN0YXJ0Q29sdW1uLGUub3JpZ2luYWxFbmRMaW5lTnVtYmVyLGUub3JpZ2luYWxFbmRDb2x1bW4pLG5ldyBydChlLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyLGUubW9kaWZpZWRTdGFydENvbHVtbixlLm1vZGlmaWVkRW5kTGluZU51bWJlcixlLm1vZGlmaWVkRW5kQ29sdW1uKSkpKSk7cyYmKHMubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlIT09aS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlciYmcy5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUhPT1pLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyfHwoaT1uZXcgR24ocy5vcmlnaW5hbFJhbmdlLmpvaW4oaS5vcmlnaW5hbFJhbmdlKSxzLm1vZGlmaWVkUmFuZ2Uuam9pbihpLm1vZGlmaWVkUmFuZ2UpLHMuaW5uZXJDaGFuZ2VzJiZpLmlubmVyQ2hhbmdlcz9zLmlubmVyQ2hhbmdlcy5jb25jYXQoaS5pbm5lckNoYW5nZXMpOnZvaWQgMCksby5wb3AoKSkpLG8ucHVzaChpKSxzPWl9cmV0dXJuIHFuKCgoKT0+Qm4obywoKGUsdCk9PnQub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXItZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PXQubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXItZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJmUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHQub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXImJmUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHQubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIpKSkpLG5ldyB6bihvLGkucXVpdEVhcmx5KX19LGFkdmFuY2VkOm5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZz1uZXcgaHIsdGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG09bmV3IG1yfWNvbXB1dGVEaWZmKGUsdCxuKXtjb25zdCByPTA9PT1uLm1heENvbXB1dGF0aW9uVGltZU1zP2xyLmluc3RhbmNlOm5ldyB1cihuLm1heENvbXB1dGF0aW9uVGltZU1zKSxpPSFuLmlnbm9yZVRyaW1XaGl0ZXNwYWNlLG89bmV3IE1hcDtmdW5jdGlvbiBzKGUpe2xldCB0PW8uZ2V0KGUpO3JldHVybiB2b2lkIDA9PT10JiYodD1vLnNpemUsby5zZXQoZSx0KSksdH1jb25zdCBhPWUubWFwKChlPT5zKGUudHJpbSgpKSkpLGw9dC5tYXAoKGU9PnMoZS50cmltKCkpKSksdT1uZXcgYnIoYSxlKSxjPW5ldyBicihsLHQpLGg9KCgpPT51Lmxlbmd0aCtjLmxlbmd0aDwxNTAwP3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZy5jb21wdXRlKHUsYyxyLCgobixyKT0+ZVtuXT09PXRbcl0/MD09PXRbcl0ubGVuZ3RoPy4xOjErTWF0aC5sb2coMSt0W3JdLmxlbmd0aCk6Ljk5KSk6dGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG0uY29tcHV0ZSh1LGMpKSgpO2xldCBkPWguZGlmZnMsZj1oLmhpdFRpbWVvdXQ7ZD1kcih1LGMsZCk7Y29uc3QgbT1bXSxnPW49PntpZihpKWZvcihsZXQgbz0wO288bjtvKyspe2NvbnN0IG49cCtvLHM9ditvO2lmKGVbbl0hPT10W3NdKXtjb25zdCBvPXRoaXMucmVmaW5lRGlmZihlLHQsbmV3IGFyKG5ldyBvcihuLG4rMSksbmV3IG9yKHMscysxKSkscixpKTtmb3IoY29uc3QgZSBvZiBvLm1hcHBpbmdzKW0ucHVzaChlKTtvLmhpdFRpbWVvdXQmJihmPSEwKX19fTtsZXQgcD0wLHY9MDtmb3IoY29uc3QgbiBvZiBkKXtxbigoKCk9Pm4uc2VxMVJhbmdlLnN0YXJ0LXA9PW4uc2VxMlJhbmdlLnN0YXJ0LXYpKTtnKG4uc2VxMVJhbmdlLnN0YXJ0LXApLHA9bi5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHY9bi5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlO2NvbnN0IG89dGhpcy5yZWZpbmVEaWZmKGUsdCxuLHIsaSk7by5oaXRUaW1lb3V0JiYoZj0hMCk7Zm9yKGNvbnN0IGUgb2Ygby5tYXBwaW5ncyltLnB1c2goZSl9ZyhlLmxlbmd0aC1wKTtjb25zdCBiPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPVtdO2Zvcihjb25zdCBpIG9mIGZ1bmN0aW9uKihlLHQpe2xldCBuLHI7Zm9yKGNvbnN0IGkgb2YgZSl2b2lkIDAhPT1yJiZ0KHIsaSk/bi5wdXNoKGkpOihuJiYoeWllbGQgbiksbj1baV0pLHI9aTtuJiYoeWllbGQgbil9KGUubWFwKChlPT5mdW5jdGlvbihlLHQsbil7bGV0IHI9MCxpPTA7ZS5tb2RpZmllZFJhbmdlLnN0YXJ0Q29sdW1uLTE+PW5bZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlci0xXS5sZW5ndGgmJmUub3JpZ2luYWxSYW5nZS5zdGFydENvbHVtbi0xPj10W2Uub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXItMV0ubGVuZ3RoJiYocj0xKTsxPT09ZS5tb2RpZmllZFJhbmdlLmVuZENvbHVtbiYmMT09PWUub3JpZ2luYWxSYW5nZS5lbmRDb2x1bW4mJmUub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIrcjw9ZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXImJmUubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIrcjw9ZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXImJihpPS0xKTtjb25zdCBvPW5ldyBIbihlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3IsZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIrMStpKSxzPW5ldyBIbihlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3IsZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXIrMStpKTtyZXR1cm4gbmV3IEduKG8scyxbZV0pfShlLHQsbikpKSwoKGUsdCk9PmUub3JpZ2luYWxSYW5nZS5vdmVybGFwT3JUb3VjaCh0Lm9yaWdpbmFsUmFuZ2UpfHxlLm1vZGlmaWVkUmFuZ2Uub3ZlcmxhcE9yVG91Y2godC5tb2RpZmllZFJhbmdlKSkpKXtjb25zdCBlPWlbMF0sdD1pW2kubGVuZ3RoLTFdO3IucHVzaChuZXcgR24oZS5vcmlnaW5hbFJhbmdlLmpvaW4odC5vcmlnaW5hbFJhbmdlKSxlLm1vZGlmaWVkUmFuZ2Uuam9pbih0Lm1vZGlmaWVkUmFuZ2UpLGkubWFwKChlPT5lLmlubmVyQ2hhbmdlc1swXSkpKSl9cmV0dXJuIHFuKCgoKT0+Qm4ociwoKGUsdCk9PnQub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXItZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PXQubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXItZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJmUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHQub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXImJmUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHQubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIpKSkpLHJ9KG0sZSx0KTtyZXR1cm4gbmV3IHpuKGIsZil9cmVmaW5lRGlmZihlLHQsbixyLGkpe2NvbnN0IG89bmV3IENyKGUsbi5zZXExUmFuZ2UsaSkscz1uZXcgQ3IodCxuLnNlcTJSYW5nZSxpKSxhPW8ubGVuZ3RoK3MubGVuZ3RoPDUwMD90aGlzLmR5bmFtaWNQcm9ncmFtbWluZ0RpZmZpbmcuY29tcHV0ZShvLHMscik6dGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG0uY29tcHV0ZShvLHMscik7bGV0IGw9YS5kaWZmcztsPWRyKG8scyxsKSxsPWZ1bmN0aW9uKGUsdCxuKXtjb25zdCByPVtdO2xldCBpO2Z1bmN0aW9uIG8oKXtpZighaSlyZXR1cm47Y29uc3QgZT1pLnMxUmFuZ2UubGVuZ3RoLWkuZGVsZXRlZDtpLnMyUmFuZ2UubGVuZ3RoLGkuYWRkZWQsTWF0aC5tYXgoaS5kZWxldGVkLGkuYWRkZWQpKyhpLmNvdW50LTEpPmUmJnIucHVzaChuZXcgYXIoaS5zMVJhbmdlLGkuczJSYW5nZSkpLGk9dm9pZCAwfWZvcihjb25zdCBzIG9mIG4pe2Z1bmN0aW9uIGEoZSx0KXt2YXIgbixyLGEsbDtpZighaXx8IWkuczFSYW5nZS5jb250YWluc1JhbmdlKGUpfHwhaS5zMlJhbmdlLmNvbnRhaW5zUmFuZ2UodCkpaWYoIWl8fGkuczFSYW5nZS5lbmRFeGNsdXNpdmU8ZS5zdGFydCYmaS5zMlJhbmdlLmVuZEV4Y2x1c2l2ZTx0LnN0YXJ0KW8oKSxpPXthZGRlZDowLGRlbGV0ZWQ6MCxjb3VudDowLHMxUmFuZ2U6ZSxzMlJhbmdlOnR9O2Vsc2V7Y29uc3Qgbz1vci50cnlDcmVhdGUoaS5zMVJhbmdlLmVuZEV4Y2x1c2l2ZSxlLnN0YXJ0KSxzPW9yLnRyeUNyZWF0ZShpLnMyUmFuZ2UuZW5kRXhjbHVzaXZlLHQuc3RhcnQpO2kuZGVsZXRlZCs9bnVsbCE9PShuPW51bGw9PW8/dm9pZCAwOm8ubGVuZ3RoKSYmdm9pZCAwIT09bj9uOjAsaS5hZGRlZCs9bnVsbCE9PShyPW51bGw9PXM/dm9pZCAwOnMubGVuZ3RoKSYmdm9pZCAwIT09cj9yOjAsaS5zMVJhbmdlPWkuczFSYW5nZS5qb2luKGUpLGkuczJSYW5nZT1pLnMyUmFuZ2Uuam9pbih0KX1jb25zdCB1PWUuaW50ZXJzZWN0KHMuc2VxMVJhbmdlKSxjPXQuaW50ZXJzZWN0KHMuc2VxMlJhbmdlKTtpLmNvdW50KyssaS5kZWxldGVkKz1udWxsIT09KGE9bnVsbD09dT92b2lkIDA6dS5sZW5ndGgpJiZ2b2lkIDAhPT1hP2E6MCxpLmFkZGVkKz1udWxsIT09KGw9bnVsbD09Yz92b2lkIDA6Yy5sZW5ndGgpJiZ2b2lkIDAhPT1sP2w6MH1jb25zdCBsPWUuZmluZFdvcmRDb250YWluaW5nKHMuc2VxMVJhbmdlLnN0YXJ0LTEpLHU9dC5maW5kV29yZENvbnRhaW5pbmcocy5zZXEyUmFuZ2Uuc3RhcnQtMSksYz1lLmZpbmRXb3JkQ29udGFpbmluZyhzLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUpLGg9dC5maW5kV29yZENvbnRhaW5pbmcocy5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlKTtsJiZjJiZ1JiZoJiZsLmVxdWFscyhjKSYmdS5lcXVhbHMoaCk/YShsLHUpOihsJiZ1JiZhKGwsdSksYyYmaCYmYShjLGgpKX1vKCk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1bXTtmb3IoO2UubGVuZ3RoPjB8fHQubGVuZ3RoPjA7KXtjb25zdCByPWVbMF0saT10WzBdO2xldCBvO289ciYmKCFpfHxyLnNlcTFSYW5nZS5zdGFydDxpLnNlcTFSYW5nZS5zdGFydCk/ZS5zaGlmdCgpOnQuc2hpZnQoKSxuLmxlbmd0aD4wJiZuW24ubGVuZ3RoLTFdLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU+PW8uc2VxMVJhbmdlLnN0YXJ0P25bbi5sZW5ndGgtMV09bltuLmxlbmd0aC0xXS5qb2luKG8pOm4ucHVzaChvKX1yZXR1cm4gbn0obixyKX0obyxzLGwpLGw9ZnVuY3Rpb24oZSx0LG4pe2NvbnN0IHI9W107Zm9yKGNvbnN0IGUgb2Ygbil7Y29uc3QgdD1yW3IubGVuZ3RoLTFdO3QmJihlLnNlcTFSYW5nZS5zdGFydC10LnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU8PTJ8fGUuc2VxMlJhbmdlLnN0YXJ0LXQuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZTw9Mik/cltyLmxlbmd0aC0xXT1uZXcgYXIodC5zZXExUmFuZ2Uuam9pbihlLnNlcTFSYW5nZSksdC5zZXEyUmFuZ2Uuam9pbihlLnNlcTJSYW5nZSkpOnIucHVzaChlKX1yZXR1cm4gcn0oMCwwLGwpO3JldHVybnttYXBwaW5nczpsLm1hcCgoZT0+bmV3IEpuKG8udHJhbnNsYXRlUmFuZ2UoZS5zZXExUmFuZ2UpLHMudHJhbnNsYXRlUmFuZ2UoZS5zZXEyUmFuZ2UpKSkpLGhpdFRpbWVvdXQ6YS5oaXRUaW1lb3V0fX19fTtmdW5jdGlvbiBFcihlLHQpe2NvbnN0IG49TWF0aC5wb3coMTAsdCk7cmV0dXJuIE1hdGgucm91bmQoZSpuKS9ufWNsYXNzIExye2NvbnN0cnVjdG9yKGUsdCxuLHI9MSl7dGhpcy5fcmdiYUJyYW5kPXZvaWQgMCx0aGlzLnI9MHxNYXRoLm1pbigyNTUsTWF0aC5tYXgoMCxlKSksdGhpcy5nPTB8TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsdCkpLHRoaXMuYj0wfE1hdGgubWluKDI1NSxNYXRoLm1heCgwLG4pKSx0aGlzLmE9RXIoTWF0aC5tYXgoTWF0aC5taW4oMSxyKSwwKSwzKX1zdGF0aWMgZXF1YWxzKGUsdCl7cmV0dXJuIGUucj09PXQuciYmZS5nPT09dC5nJiZlLmI9PT10LmImJmUuYT09PXQuYX19Y2xhc3MgTnJ7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5faHNsYUJyYW5kPXZvaWQgMCx0aGlzLmg9MHxNYXRoLm1heChNYXRoLm1pbigzNjAsZSksMCksdGhpcy5zPUVyKE1hdGgubWF4KE1hdGgubWluKDEsdCksMCksMyksdGhpcy5sPUVyKE1hdGgubWF4KE1hdGgubWluKDEsbiksMCksMyksdGhpcy5hPUVyKE1hdGgubWF4KE1hdGgubWluKDEsciksMCksMyl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiBlLmg9PT10LmgmJmUucz09PXQucyYmZS5sPT09dC5sJiZlLmE9PT10LmF9c3RhdGljIGZyb21SR0JBKGUpe2NvbnN0IHQ9ZS5yLzI1NSxuPWUuZy8yNTUscj1lLmIvMjU1LGk9ZS5hLG89TWF0aC5tYXgodCxuLHIpLHM9TWF0aC5taW4odCxuLHIpO2xldCBhPTAsbD0wO2NvbnN0IHU9KHMrbykvMixjPW8tcztpZihjPjApe3N3aXRjaChsPU1hdGgubWluKHU8PS41P2MvKDIqdSk6Yy8oMi0yKnUpLDEpLG8pe2Nhc2UgdDphPShuLXIpL2MrKG48cj82OjApO2JyZWFrO2Nhc2UgbjphPShyLXQpL2MrMjticmVhaztjYXNlIHI6YT0odC1uKS9jKzR9YSo9NjAsYT1NYXRoLnJvdW5kKGEpfXJldHVybiBuZXcgTnIoYSxsLHUsaSl9c3RhdGljIF9odWUycmdiKGUsdCxuKXtyZXR1cm4gbjwwJiYobis9MSksbj4xJiYobi09MSksbjwxLzY/ZSs2Kih0LWUpKm46bjwuNT90Om48Mi8zP2UrKHQtZSkqKDIvMy1uKSo2OmV9c3RhdGljIHRvUkdCQShlKXtjb25zdCB0PWUuaC8zNjAse3M6bixsOnIsYTppfT1lO2xldCBvLHMsYTtpZigwPT09bilvPXM9YT1yO2Vsc2V7Y29uc3QgZT1yPC41P3IqKDErbik6cituLXIqbixpPTIqci1lO289TnIuX2h1ZTJyZ2IoaSxlLHQrMS8zKSxzPU5yLl9odWUycmdiKGksZSx0KSxhPU5yLl9odWUycmdiKGksZSx0LTEvMyl9cmV0dXJuIG5ldyBMcihNYXRoLnJvdW5kKDI1NSpvKSxNYXRoLnJvdW5kKDI1NSpzKSxNYXRoLnJvdW5kKDI1NSphKSxpKX19Y2xhc3Mga3J7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5faHN2YUJyYW5kPXZvaWQgMCx0aGlzLmg9MHxNYXRoLm1heChNYXRoLm1pbigzNjAsZSksMCksdGhpcy5zPUVyKE1hdGgubWF4KE1hdGgubWluKDEsdCksMCksMyksdGhpcy52PUVyKE1hdGgubWF4KE1hdGgubWluKDEsbiksMCksMyksdGhpcy5hPUVyKE1hdGgubWF4KE1hdGgubWluKDEsciksMCksMyl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiBlLmg9PT10LmgmJmUucz09PXQucyYmZS52PT09dC52JiZlLmE9PT10LmF9c3RhdGljIGZyb21SR0JBKGUpe2NvbnN0IHQ9ZS5yLzI1NSxuPWUuZy8yNTUscj1lLmIvMjU1LGk9TWF0aC5tYXgodCxuLHIpLG89aS1NYXRoLm1pbih0LG4scikscz0wPT09aT8wOm8vaTtsZXQgYTtyZXR1cm4gYT0wPT09bz8wOmk9PT10Pygobi1yKS9vJTYrNiklNjppPT09bj8oci10KS9vKzI6KHQtbikvbys0LG5ldyBrcihNYXRoLnJvdW5kKDYwKmEpLHMsaSxlLmEpfXN0YXRpYyB0b1JHQkEoZSl7Y29uc3R7aDp0LHM6bix2OnIsYTppfT1lLG89cipuLHM9byooMS1NYXRoLmFicyh0LzYwJTItMSkpLGE9ci1vO2xldFtsLHUsY109WzAsMCwwXTtyZXR1cm4gdDw2MD8obD1vLHU9cyk6dDwxMjA/KGw9cyx1PW8pOnQ8MTgwPyh1PW8sYz1zKTp0PDI0MD8odT1zLGM9byk6dDwzMDA/KGw9cyxjPW8pOnQ8PTM2MCYmKGw9byxjPXMpLGw9TWF0aC5yb3VuZCgyNTUqKGwrYSkpLHU9TWF0aC5yb3VuZCgyNTUqKHUrYSkpLGM9TWF0aC5yb3VuZCgyNTUqKGMrYSkpLG5ldyBMcihsLHUsYyxpKX19bGV0IFJyPWNsYXNzIGV7c3RhdGljIGZyb21IZXgodCl7cmV0dXJuIGUuRm9ybWF0LkNTUy5wYXJzZUhleCh0KXx8ZS5yZWR9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiFlJiYhdHx8ISghZXx8IXQpJiZlLmVxdWFscyh0KX1nZXQgaHNsYSgpe3JldHVybiB0aGlzLl9oc2xhP3RoaXMuX2hzbGE6TnIuZnJvbVJHQkEodGhpcy5yZ2JhKX1nZXQgaHN2YSgpe3JldHVybiB0aGlzLl9oc3ZhP3RoaXMuX2hzdmE6a3IuZnJvbVJHQkEodGhpcy5yZ2JhKX1jb25zdHJ1Y3RvcihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkNvbG9yIG5lZWRzIGEgdmFsdWUiKTtpZihlIGluc3RhbmNlb2YgTHIpdGhpcy5yZ2JhPWU7ZWxzZSBpZihlIGluc3RhbmNlb2YgTnIpdGhpcy5faHNsYT1lLHRoaXMucmdiYT1Oci50b1JHQkEoZSk7ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBrcikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbG9yIGN0b3IgYXJndW1lbnQiKTt0aGlzLl9oc3ZhPWUsdGhpcy5yZ2JhPWtyLnRvUkdCQShlKX19ZXF1YWxzKGUpe3JldHVybiEhZSYmTHIuZXF1YWxzKHRoaXMucmdiYSxlLnJnYmEpJiZOci5lcXVhbHModGhpcy5oc2xhLGUuaHNsYSkmJmtyLmVxdWFscyh0aGlzLmhzdmEsZS5oc3ZhKX1nZXRSZWxhdGl2ZUx1bWluYW5jZSgpe3JldHVybiBFciguMjEyNiplLl9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudCh0aGlzLnJnYmEucikrLjcxNTIqZS5fcmVsYXRpdmVMdW1pbmFuY2VGb3JDb21wb25lbnQodGhpcy5yZ2JhLmcpKy4wNzIyKmUuX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5iKSw0KX1zdGF0aWMgX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KGUpe2NvbnN0IHQ9ZS8yNTU7cmV0dXJuIHQ8PS4wMzkyOD90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9aXNMaWdodGVyKCl7cmV0dXJuKDI5OSp0aGlzLnJnYmEucis1ODcqdGhpcy5yZ2JhLmcrMTE0KnRoaXMucmdiYS5iKS8xZTM+PTEyOH1pc0xpZ2h0ZXJUaGFuKGUpe3JldHVybiB0aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCk+ZS5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpfWlzRGFya2VyVGhhbihlKXtyZXR1cm4gdGhpcy5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpPGUuZ2V0UmVsYXRpdmVMdW1pbmFuY2UoKX1saWdodGVuKHQpe3JldHVybiBuZXcgZShuZXcgTnIodGhpcy5oc2xhLmgsdGhpcy5oc2xhLnMsdGhpcy5oc2xhLmwrdGhpcy5oc2xhLmwqdCx0aGlzLmhzbGEuYSkpfWRhcmtlbih0KXtyZXR1cm4gbmV3IGUobmV3IE5yKHRoaXMuaHNsYS5oLHRoaXMuaHNsYS5zLHRoaXMuaHNsYS5sLXRoaXMuaHNsYS5sKnQsdGhpcy5oc2xhLmEpKX10cmFuc3BhcmVudCh0KXtjb25zdHtyOm4sZzpyLGI6aSxhOm99PXRoaXMucmdiYTtyZXR1cm4gbmV3IGUobmV3IExyKG4scixpLG8qdCkpfWlzVHJhbnNwYXJlbnQoKXtyZXR1cm4gMD09PXRoaXMucmdiYS5hfWlzT3BhcXVlKCl7cmV0dXJuIDE9PT10aGlzLnJnYmEuYX1vcHBvc2l0ZSgpe3JldHVybiBuZXcgZShuZXcgTHIoMjU1LXRoaXMucmdiYS5yLDI1NS10aGlzLnJnYmEuZywyNTUtdGhpcy5yZ2JhLmIsdGhpcy5yZ2JhLmEpKX1tYWtlT3BhcXVlKHQpe2lmKHRoaXMuaXNPcGFxdWUoKXx8MSE9PXQucmdiYS5hKXJldHVybiB0aGlzO2NvbnN0e3I6bixnOnIsYjppLGE6b309dGhpcy5yZ2JhO3JldHVybiBuZXcgZShuZXcgTHIodC5yZ2JhLnItbyoodC5yZ2JhLnItbiksdC5yZ2JhLmctbyoodC5yZ2JhLmctciksdC5yZ2JhLmItbyoodC5yZ2JhLmItaSksMSkpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3RvU3RyaW5nfHwodGhpcy5fdG9TdHJpbmc9ZS5Gb3JtYXQuQ1NTLmZvcm1hdCh0aGlzKSksdGhpcy5fdG9TdHJpbmd9c3RhdGljIGdldExpZ2h0ZXJDb2xvcihlLHQsbil7aWYoZS5pc0xpZ2h0ZXJUaGFuKHQpKXJldHVybiBlO249bnx8LjU7Y29uc3Qgcj1lLmdldFJlbGF0aXZlTHVtaW5hbmNlKCksaT10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG49biooaS1yKS9pLGUubGlnaHRlbihuKX1zdGF0aWMgZ2V0RGFya2VyQ29sb3IoZSx0LG4pe2lmKGUuaXNEYXJrZXJUaGFuKHQpKXJldHVybiBlO249bnx8LjU7Y29uc3Qgcj1lLmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG49biooci10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCkpL3IsZS5kYXJrZW4obil9fTtmdW5jdGlvbiBUcihlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IGU9TnVtYmVyKG4pOyhlfHwwPT09ZSYmIiIhPT1uLnJlcGxhY2UoL1xzL2csIiIpKSYmdC5wdXNoKGUpfXJldHVybiB0fWZ1bmN0aW9uIE9yKGUsdCxuLHIpe3JldHVybntyZWQ6ZS8yNTUsYmx1ZTpuLzI1NSxncmVlbjp0LzI1NSxhbHBoYTpyfX1mdW5jdGlvbiBNcihlLHQpe2NvbnN0IG49dC5pbmRleCxyPXRbMF0ubGVuZ3RoO2lmKCFuKXJldHVybjtjb25zdCBpPWUucG9zaXRpb25BdChuKTtyZXR1cm57c3RhcnRMaW5lTnVtYmVyOmkubGluZU51bWJlcixzdGFydENvbHVtbjppLmNvbHVtbixlbmRMaW5lTnVtYmVyOmkubGluZU51bWJlcixlbmRDb2x1bW46aS5jb2x1bW4rcn19ZnVuY3Rpb24gSXIoZSx0KXtpZighZSlyZXR1cm47Y29uc3Qgbj1Sci5Gb3JtYXQuQ1NTLnBhcnNlSGV4KHQpO3JldHVybiBuP3tyYW5nZTplLGNvbG9yOk9yKG4ucmdiYS5yLG4ucmdiYS5nLG4ucmdiYS5iLG4ucmdiYS5hKX06dm9pZCAwfWZ1bmN0aW9uIFByKGUsdCxuKXtpZighZXx8MSE9PXQubGVuZ3RoKXJldHVybjtjb25zdCByPVRyKHRbMF0udmFsdWVzKCkpO3JldHVybntyYW5nZTplLGNvbG9yOk9yKHJbMF0sclsxXSxyWzJdLG4/clszXToxKX19ZnVuY3Rpb24gRnIoZSx0LG4pe2lmKCFlfHwxIT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IHI9VHIodFswXS52YWx1ZXMoKSksaT1uZXcgUnIobmV3IE5yKHJbMF0sclsxXS8xMDAsclsyXS8xMDAsbj9yWzNdOjEpKTtyZXR1cm57cmFuZ2U6ZSxjb2xvcjpPcihpLnJnYmEucixpLnJnYmEuZyxpLnJnYmEuYixpLnJnYmEuYSl9fWZ1bmN0aW9uIFZyKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP1suLi5lLm1hdGNoQWxsKHQpXTplLmZpbmRNYXRjaGVzKHQpfWZ1bmN0aW9uIERyKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRWYWx1ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUucG9zaXRpb25BdD9mdW5jdGlvbihlKXtjb25zdCB0PVtdLG49VnIoZSwvXGIocmdifHJnYmF8aHNsfGhzbGEpKFwoWzAtOVxzLC5cJV0qXCkpfCgjKShbQS1GYS1mMC05XXs2fSlcYnwoIykoW0EtRmEtZjAtOV17OH0pXGIvZ20pO2lmKG4ubGVuZ3RoPjApZm9yKGNvbnN0IHIgb2Ygbil7Y29uc3Qgbj1yLmZpbHRlcigoZT0+dm9pZCAwIT09ZSkpLGk9blsxXSxvPW5bMl07aWYoIW8pY29udGludWU7bGV0IHM7aWYoInJnYiI9PT1pKXtjb25zdCB0PS9eXChccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKlwpJC9nbTtzPVByKE1yKGUsciksVnIobyx0KSwhMSl9ZWxzZSBpZigicmdiYSI9PT1pKXtjb25zdCB0PS9eXChccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMFsuXVswLTldK3xbLl1bMC05XSt8WzAxXVsuXXxbMDFdKVxzKlwpJC9nbTtzPVByKE1yKGUsciksVnIobyx0KSwhMCl9ZWxzZSBpZigiaHNsIj09PWkpe2NvbnN0IHQ9L15cKFxzKigzNlswXXwzWzAtNV1bMC05XXxbMTJdWzAtOV1bMC05XXxbMS05XT9bMC05XSlccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqXCkkL2dtO3M9RnIoTXIoZSxyKSxWcihvLHQpLCExKX1lbHNlIGlmKCJoc2xhIj09PWkpe2NvbnN0IHQ9L15cKFxzKigzNlswXXwzWzAtNV1bMC05XXxbMTJdWzAtOV1bMC05XXxbMS05XT9bMC05XSlccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigwWy5dWzAtOV0rfFsuXVswLTldK3xbMDFdWy5dfFswMV0pXHMqXCkkL2dtO3M9RnIoTXIoZSxyKSxWcihvLHQpLCEwKX1lbHNlIiMiPT09aSYmKHM9SXIoTXIoZSxyKSxpK28pKTtzJiZ0LnB1c2gocyl9cmV0dXJuIHR9KGUpOltdfVJyLndoaXRlPW5ldyBScihuZXcgTHIoMjU1LDI1NSwyNTUsMSkpLFJyLmJsYWNrPW5ldyBScihuZXcgTHIoMCwwLDAsMSkpLFJyLnJlZD1uZXcgUnIobmV3IExyKDI1NSwwLDAsMSkpLFJyLmJsdWU9bmV3IFJyKG5ldyBMcigwLDAsMjU1LDEpKSxSci5ncmVlbj1uZXcgUnIobmV3IExyKDAsMjU1LDAsMSkpLFJyLmN5YW49bmV3IFJyKG5ldyBMcigwLDI1NSwyNTUsMSkpLFJyLmxpZ2h0Z3JleT1uZXcgUnIobmV3IExyKDIxMSwyMTEsMjExLDEpKSxSci50cmFuc3BhcmVudD1uZXcgUnIobmV3IExyKDAsMCwwLDApKSxmdW5jdGlvbihlKXt2YXIgdDsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXtjb25zdCB0PWUudG9TdHJpbmcoMTYpO3JldHVybiAyIT09dC5sZW5ndGg/IjAiK3Q6dH1mdW5jdGlvbiByKGUpe3N3aXRjaChlKXtjYXNlIDQ4OnJldHVybiAwO2Nhc2UgNDk6cmV0dXJuIDE7Y2FzZSA1MDpyZXR1cm4gMjtjYXNlIDUxOnJldHVybiAzO2Nhc2UgNTI6cmV0dXJuIDQ7Y2FzZSA1MzpyZXR1cm4gNTtjYXNlIDU0OnJldHVybiA2O2Nhc2UgNTU6cmV0dXJuIDc7Y2FzZSA1NjpyZXR1cm4gODtjYXNlIDU3OnJldHVybiA5O2Nhc2UgOTc6Y2FzZSA2NTpyZXR1cm4gMTA7Y2FzZSA5ODpjYXNlIDY2OnJldHVybiAxMTtjYXNlIDk5OmNhc2UgNjc6cmV0dXJuIDEyO2Nhc2UgMTAwOmNhc2UgNjg6cmV0dXJuIDEzO2Nhc2UgMTAxOmNhc2UgNjk6cmV0dXJuIDE0O2Nhc2UgMTAyOmNhc2UgNzA6cmV0dXJuIDE1fXJldHVybiAwfXQuZm9ybWF0UkdCPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5yZ2JhLmE/YHJnYigke3QucmdiYS5yfSwgJHt0LnJnYmEuZ30sICR7dC5yZ2JhLmJ9KWA6ZS5Gb3JtYXQuQ1NTLmZvcm1hdFJHQkEodCl9LHQuZm9ybWF0UkdCQT1mdW5jdGlvbihlKXtyZXR1cm5gcmdiYSgke2UucmdiYS5yfSwgJHtlLnJnYmEuZ30sICR7ZS5yZ2JhLmJ9LCAkeytlLnJnYmEuYS50b0ZpeGVkKDIpfSlgfSx0LmZvcm1hdEhTTD1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXQuaHNsYS5hP2Boc2woJHt0LmhzbGEuaH0sICR7KDEwMCp0LmhzbGEucykudG9GaXhlZCgyKX0lLCAkeygxMDAqdC5oc2xhLmwpLnRvRml4ZWQoMil9JSlgOmUuRm9ybWF0LkNTUy5mb3JtYXRIU0xBKHQpfSx0LmZvcm1hdEhTTEE9ZnVuY3Rpb24oZSl7cmV0dXJuYGhzbGEoJHtlLmhzbGEuaH0sICR7KDEwMCplLmhzbGEucykudG9GaXhlZCgyKX0lLCAkeygxMDAqZS5oc2xhLmwpLnRvRml4ZWQoMil9JSwgJHtlLmhzbGEuYS50b0ZpeGVkKDIpfSlgfSx0LmZvcm1hdEhleD1mdW5jdGlvbihlKXtyZXR1cm5gIyR7bihlLnJnYmEucil9JHtuKGUucmdiYS5nKX0ke24oZS5yZ2JhLmIpfWB9LHQuZm9ybWF0SGV4QT1mdW5jdGlvbih0LHI9ITEpe3JldHVybiByJiYxPT09dC5yZ2JhLmE/ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhleCh0KTpgIyR7bih0LnJnYmEucil9JHtuKHQucmdiYS5nKX0ke24odC5yZ2JhLmIpfSR7bihNYXRoLnJvdW5kKDI1NSp0LnJnYmEuYSkpfWB9LHQuZm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzT3BhcXVlKCk/ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhleCh0KTplLkZvcm1hdC5DU1MuZm9ybWF0UkdCQSh0KX0sdC5wYXJzZUhleD1mdW5jdGlvbih0KXtjb25zdCBuPXQubGVuZ3RoO2lmKDA9PT1uKXJldHVybiBudWxsO2lmKDM1IT09dC5jaGFyQ29kZUF0KDApKXJldHVybiBudWxsO2lmKDc9PT1uKXtjb25zdCBuPTE2KnIodC5jaGFyQ29kZUF0KDEpKStyKHQuY2hhckNvZGVBdCgyKSksaT0xNipyKHQuY2hhckNvZGVBdCgzKSkrcih0LmNoYXJDb2RlQXQoNCkpLG89MTYqcih0LmNoYXJDb2RlQXQoNSkpK3IodC5jaGFyQ29kZUF0KDYpKTtyZXR1cm4gbmV3IGUobmV3IExyKG4saSxvLDEpKX1pZig5PT09bil7Y29uc3Qgbj0xNipyKHQuY2hhckNvZGVBdCgxKSkrcih0LmNoYXJDb2RlQXQoMikpLGk9MTYqcih0LmNoYXJDb2RlQXQoMykpK3IodC5jaGFyQ29kZUF0KDQpKSxvPTE2KnIodC5jaGFyQ29kZUF0KDUpKStyKHQuY2hhckNvZGVBdCg2KSkscz0xNipyKHQuY2hhckNvZGVBdCg3KSkrcih0LmNoYXJDb2RlQXQoOCkpO3JldHVybiBuZXcgZShuZXcgTHIobixpLG8scy8yNTUpKX1pZig0PT09bil7Y29uc3Qgbj1yKHQuY2hhckNvZGVBdCgxKSksaT1yKHQuY2hhckNvZGVBdCgyKSksbz1yKHQuY2hhckNvZGVBdCgzKSk7cmV0dXJuIG5ldyBlKG5ldyBMcigxNipuK24sMTYqaStpLDE2Km8rbykpfWlmKDU9PT1uKXtjb25zdCBuPXIodC5jaGFyQ29kZUF0KDEpKSxpPXIodC5jaGFyQ29kZUF0KDIpKSxvPXIodC5jaGFyQ29kZUF0KDMpKSxzPXIodC5jaGFyQ29kZUF0KDQpKTtyZXR1cm4gbmV3IGUobmV3IExyKDE2Km4rbiwxNippK2ksMTYqbytvLCgxNipzK3MpLzI1NSkpfXJldHVybiBudWxsfX0pKCh0PWUuRm9ybWF0fHwoZS5Gb3JtYXQ9e30pKS5DU1N8fCh0LkNTUz17fSkpfShScnx8KFJyPXt9KSk7dmFyIEtyPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2woci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtsKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9bCgocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjbGFzcyBqciBleHRlbmRzIHV0e2dldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBlb2woKXtyZXR1cm4gdGhpcy5fZW9sfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpfWZpbmRNYXRjaGVzKGUpe2NvbnN0IHQ9W107Zm9yKGxldCBuPTA7bjx0aGlzLl9saW5lcy5sZW5ndGg7bisrKXtjb25zdCByPXRoaXMuX2xpbmVzW25dLGk9dGhpcy5vZmZzZXRBdChuZXcgbnQobisxLDEpKSxvPXIubWF0Y2hBbGwoZSk7Zm9yKGNvbnN0IGUgb2YgbykoZS5pbmRleHx8MD09PWUuaW5kZXgpJiYoZS5pbmRleD1lLmluZGV4K2kpLHQucHVzaChlKX1yZXR1cm4gdH1nZXRMaW5lc0NvbnRlbnQoKXtyZXR1cm4gdGhpcy5fbGluZXMuc2xpY2UoMCl9Z2V0TGluZUNvdW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLmxlbmd0aH1nZXRMaW5lQ29udGVudChlKXtyZXR1cm4gdGhpcy5fbGluZXNbZS0xXX1nZXRXb3JkQXRQb3NpdGlvbihlLHQpe2NvbnN0IG49ZHQoZS5jb2x1bW4sZnVuY3Rpb24oZSl7bGV0IHQ9Y3Q7aWYoZSYmZSBpbnN0YW5jZW9mIFJlZ0V4cClpZihlLmdsb2JhbCl0PWU7ZWxzZXtsZXQgbj0iZyI7ZS5pZ25vcmVDYXNlJiYobis9ImkiKSxlLm11bHRpbGluZSYmKG4rPSJtIiksZS51bmljb2RlJiYobis9InUiKSx0PW5ldyBSZWdFeHAoZS5zb3VyY2Usbil9cmV0dXJuIHQubGFzdEluZGV4PTAsdH0odCksdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLDApO3JldHVybiBuP25ldyBydChlLmxpbmVOdW1iZXIsbi5zdGFydENvbHVtbixlLmxpbmVOdW1iZXIsbi5lbmRDb2x1bW4pOm51bGx9d29yZHMoZSl7Y29uc3QgdD10aGlzLl9saW5lcyxuPXRoaXMuX3dvcmRlbml6ZS5iaW5kKHRoaXMpO2xldCByPTAsaT0iIixvPTAscz1bXTtyZXR1cm57KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKDs7KWlmKG88cy5sZW5ndGgpe2NvbnN0IGU9aS5zdWJzdHJpbmcoc1tvXS5zdGFydCxzW29dLmVuZCk7bys9MSx5aWVsZCBlfWVsc2V7aWYoIShyPHQubGVuZ3RoKSlicmVhaztpPXRbcl0scz1uKGksZSksbz0wLHIrPTF9fX19Z2V0TGluZVdvcmRzKGUsdCl7Y29uc3Qgbj10aGlzLl9saW5lc1tlLTFdLHI9dGhpcy5fd29yZGVuaXplKG4sdCksaT1bXTtmb3IoY29uc3QgZSBvZiByKWkucHVzaCh7d29yZDpuLnN1YnN0cmluZyhlLnN0YXJ0LGUuZW5kKSxzdGFydENvbHVtbjplLnN0YXJ0KzEsZW5kQ29sdW1uOmUuZW5kKzF9KTtyZXR1cm4gaX1fd29yZGVuaXplKGUsdCl7Y29uc3Qgbj1bXTtsZXQgcjtmb3IodC5sYXN0SW5kZXg9MDsocj10LmV4ZWMoZSkpJiYwIT09clswXS5sZW5ndGg7KW4ucHVzaCh7c3RhcnQ6ci5pbmRleCxlbmQ6ci5pbmRleCtyWzBdLmxlbmd0aH0pO3JldHVybiBufWdldFZhbHVlSW5SYW5nZShlKXtpZigoZT10aGlzLl92YWxpZGF0ZVJhbmdlKGUpKS5zdGFydExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXIpcmV0dXJuIHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLnN0YXJ0Q29sdW1uLTEsZS5lbmRDb2x1bW4tMSk7Y29uc3QgdD10aGlzLl9lb2wsbj1lLnN0YXJ0TGluZU51bWJlci0xLHI9ZS5lbmRMaW5lTnVtYmVyLTEsaT1bXTtpLnB1c2godGhpcy5fbGluZXNbbl0uc3Vic3RyaW5nKGUuc3RhcnRDb2x1bW4tMSkpO2ZvcihsZXQgZT1uKzE7ZTxyO2UrKylpLnB1c2godGhpcy5fbGluZXNbZV0pO3JldHVybiBpLnB1c2godGhpcy5fbGluZXNbcl0uc3Vic3RyaW5nKDAsZS5lbmRDb2x1bW4tMSkpLGkuam9pbih0KX1vZmZzZXRBdChlKXtyZXR1cm4gZT10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKSx0aGlzLl9saW5lU3RhcnRzLmdldFByZWZpeFN1bShlLmxpbmVOdW1iZXItMikrKGUuY29sdW1uLTEpfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLmZsb29yKGUpLGU9TWF0aC5tYXgoMCxlKSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCk7Y29uc3QgdD10aGlzLl9saW5lU3RhcnRzLmdldEluZGV4T2YoZSksbj10aGlzLl9saW5lc1t0LmluZGV4XS5sZW5ndGg7cmV0dXJue2xpbmVOdW1iZXI6MSt0LmluZGV4LGNvbHVtbjoxK01hdGgubWluKHQucmVtYWluZGVyLG4pfX1fdmFsaWRhdGVSYW5nZShlKXtjb25zdCB0PXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5zdGFydExpbmVOdW1iZXIsY29sdW1uOmUuc3RhcnRDb2x1bW59KSxuPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5lbmRMaW5lTnVtYmVyLGNvbHVtbjplLmVuZENvbHVtbn0pO3JldHVybiB0LmxpbmVOdW1iZXIhPT1lLnN0YXJ0TGluZU51bWJlcnx8dC5jb2x1bW4hPT1lLnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXIhPT1lLmVuZExpbmVOdW1iZXJ8fG4uY29sdW1uIT09ZS5lbmRDb2x1bW4/e3N0YXJ0TGluZU51bWJlcjp0LmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5jb2x1bW4sZW5kTGluZU51bWJlcjpuLmxpbmVOdW1iZXIsZW5kQ29sdW1uOm4uY29sdW1ufTplfV92YWxpZGF0ZVBvc2l0aW9uKGUpe2lmKCFudC5pc0lQb3NpdGlvbihlKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb3NpdGlvbiIpO2xldHtsaW5lTnVtYmVyOnQsY29sdW1uOm59PWUscj0hMTtpZih0PDEpdD0xLG49MSxyPSEwO2Vsc2UgaWYodD50aGlzLl9saW5lcy5sZW5ndGgpdD10aGlzLl9saW5lcy5sZW5ndGgsbj10aGlzLl9saW5lc1t0LTFdLmxlbmd0aCsxLHI9ITA7ZWxzZXtjb25zdCBlPXRoaXMuX2xpbmVzW3QtMV0ubGVuZ3RoKzE7bjwxPyhuPTEscj0hMCk6bj5lJiYobj1lLHI9ITApfXJldHVybiByP3tsaW5lTnVtYmVyOnQsY29sdW1uOm59OmV9fWNsYXNzIHFye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faG9zdD1lLHRoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PXQsdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKX1fZ2V0TW9kZWwoZSl7cmV0dXJuIHRoaXMuX21vZGVsc1tlXX1fZ2V0TW9kZWxzKCl7Y29uc3QgZT1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKCh0PT5lLnB1c2godGhpcy5fbW9kZWxzW3RdKSkpLGV9YWNjZXB0TmV3TW9kZWwoZSl7dGhpcy5fbW9kZWxzW2UudXJsXT1uZXcganIoV2UucGFyc2UoZS51cmwpLGUubGluZXMsZS5FT0wsZS52ZXJzaW9uSWQpfWFjY2VwdE1vZGVsQ2hhbmdlZChlLHQpe2lmKCF0aGlzLl9tb2RlbHNbZV0pcmV0dXJuO3RoaXMuX21vZGVsc1tlXS5vbkV2ZW50cyh0KX1hY2NlcHRSZW1vdmVkTW9kZWwoZSl7dGhpcy5fbW9kZWxzW2VdJiZkZWxldGUgdGhpcy5fbW9kZWxzW2VdfWNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhlLHQsbil7cmV0dXJuIEtyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbChlKTtyZXR1cm4gcj9Vbi5jb21wdXRlVW5pY29kZUhpZ2hsaWdodHMocix0LG4pOntyYW5nZXM6W10saGFzTW9yZTohMSxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDowLGludmlzaWJsZUNoYXJhY3RlckNvdW50OjAsbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50OjB9fSkpfWNvbXB1dGVEaWZmKGUsdCxuLHIpe3JldHVybiBLcih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwoZSksbz10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gaSYmbz9xci5jb21wdXRlRGlmZihpLG8sbixyKTpudWxsfSkpfXN0YXRpYyBjb21wdXRlRGlmZihlLHQsbixyKXtjb25zdCBpPSJhZHZhbmNlZCI9PT1yP3hyLmFkdmFuY2VkOnhyLmxlZ2FjeSxvPWUuZ2V0TGluZXNDb250ZW50KCkscz10LmdldExpbmVzQ29udGVudCgpLGE9aS5jb21wdXRlRGlmZihvLHMsbik7cmV0dXJue2lkZW50aWNhbDohKGEuY2hhbmdlcy5sZW5ndGg+MCkmJnRoaXMuX21vZGVsc0FyZUlkZW50aWNhbChlLHQpLHF1aXRFYXJseTphLmhpdFRpbWVvdXQsY2hhbmdlczphLmNoYW5nZXMubWFwKChlPT57dmFyIHQ7cmV0dXJuW2Uub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIsZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcixlLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxudWxsPT09KHQ9ZS5pbm5lckNoYW5nZXMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm1hcCgoZT0+W2Uub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIsZS5vcmlnaW5hbFJhbmdlLnN0YXJ0Q29sdW1uLGUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyLGUub3JpZ2luYWxSYW5nZS5lbmRDb2x1bW4sZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcixlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRDb2x1bW4sZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXIsZS5tb2RpZmllZFJhbmdlLmVuZENvbHVtbl0pKV19KSl9fXN0YXRpYyBfbW9kZWxzQXJlSWRlbnRpY2FsKGUsdCl7Y29uc3Qgbj1lLmdldExpbmVDb3VudCgpO2lmKG4hPT10LmdldExpbmVDb3VudCgpKXJldHVybiExO2ZvcihsZXQgcj0xO3I8PW47cisrKXtpZihlLmdldExpbmVDb250ZW50KHIpIT09dC5nZXRMaW5lQ29udGVudChyKSlyZXR1cm4hMX1yZXR1cm4hMH1jb21wdXRlTW9yZU1pbmltYWxFZGl0cyhlLHQsbil7cmV0dXJuIEtyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbChlKTtpZighcilyZXR1cm4gdDtjb25zdCBpPVtdO2xldCBvO3Q9dC5zbGljZSgwKS5zb3J0KCgoZSx0KT0+e2lmKGUucmFuZ2UmJnQucmFuZ2UpcmV0dXJuIHJ0LmNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLnJhbmdlLHQucmFuZ2UpO3JldHVybihlLnJhbmdlPzA6MSktKHQucmFuZ2U/MDoxKX0pKTtmb3IobGV0e3JhbmdlOmUsdGV4dDpzLGVvbDphfW9mIHQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmKG89YSkscnQuaXNFbXB0eShlKSYmIXMpY29udGludWU7Y29uc3QgdD1yLmdldFZhbHVlSW5SYW5nZShlKTtpZihzPXMucmVwbGFjZSgvXHJcbnxcbnxcci9nLHIuZW9sKSx0PT09cyljb250aW51ZTtpZihNYXRoLm1heChzLmxlbmd0aCx0Lmxlbmd0aCk+cXIuX2RpZmZMaW1pdCl7aS5wdXNoKHtyYW5nZTplLHRleHQ6c30pO2NvbnRpbnVlfWNvbnN0IGw9Z2UodCxzLG4pLHU9ci5vZmZzZXRBdChydC5saWZ0KGUpLmdldFN0YXJ0UG9zaXRpb24oKSk7Zm9yKGNvbnN0IGUgb2YgbCl7Y29uc3QgdD1yLnBvc2l0aW9uQXQodStlLm9yaWdpbmFsU3RhcnQpLG49ci5wb3NpdGlvbkF0KHUrZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgpLG89e3RleHQ6cy5zdWJzdHIoZS5tb2RpZmllZFN0YXJ0LGUubW9kaWZpZWRMZW5ndGgpLHJhbmdlOntzdGFydExpbmVOdW1iZXI6dC5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOnQuY29sdW1uLGVuZExpbmVOdW1iZXI6bi5saW5lTnVtYmVyLGVuZENvbHVtbjpuLmNvbHVtbn19O3IuZ2V0VmFsdWVJblJhbmdlKG8ucmFuZ2UpIT09by50ZXh0JiZpLnB1c2gobyl9fXJldHVybiJudW1iZXIiPT10eXBlb2YgbyYmaS5wdXNoKHtlb2w6byx0ZXh0OiIiLHJhbmdlOntzdGFydExpbmVOdW1iZXI6MCxzdGFydENvbHVtbjowLGVuZExpbmVOdW1iZXI6MCxlbmRDb2x1bW46MH19KSxpfSkpfWNvbXB1dGVMaW5rcyhlKXtyZXR1cm4gS3IodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXRoaXMuX2dldE1vZGVsKGUpO3JldHVybiB0P2Z1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRMaW5lQ291bnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldExpbmVDb250ZW50P3l0LmNvbXB1dGVMaW5rcyhlKTpbXX0odCk6bnVsbH0pKX1jb21wdXRlRGVmYXVsdERvY3VtZW50Q29sb3JzKGUpe3JldHVybiBLcih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9dGhpcy5fZ2V0TW9kZWwoZSk7cmV0dXJuIHQ/RHIodCk6bnVsbH0pKX10ZXh0dWFsU3VnZ2VzdChlLHQsbixyKXtyZXR1cm4gS3IodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPW5ldyBWKCEwKSxvPW5ldyBSZWdFeHAobixyKSxzPW5ldyBTZXQ7ZTpmb3IoY29uc3QgbiBvZiBlKXtjb25zdCBlPXRoaXMuX2dldE1vZGVsKG4pO2lmKGUpZm9yKGNvbnN0IG4gb2YgZS53b3JkcyhvKSlpZihuIT09dCYmaXNOYU4oTnVtYmVyKG4pKSYmKHMuYWRkKG4pLHMuc2l6ZT5xci5fc3VnZ2VzdGlvbnNMaW1pdCkpYnJlYWsgZX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShzKSxkdXJhdGlvbjppLmVsYXBzZWQoKX19KSl9Y29tcHV0ZVdvcmRSYW5nZXMoZSx0LG4scil7cmV0dXJuIEtyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT10aGlzLl9nZXRNb2RlbChlKTtpZighaSlyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBvPW5ldyBSZWdFeHAobixyKSxzPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBlPXQuc3RhcnRMaW5lTnVtYmVyO2U8dC5lbmRMaW5lTnVtYmVyO2UrKyl7Y29uc3QgdD1pLmdldExpbmVXb3JkcyhlLG8pO2Zvcihjb25zdCBuIG9mIHQpe2lmKCFpc05hTihOdW1iZXIobi53b3JkKSkpY29udGludWU7bGV0IHQ9c1tuLndvcmRdO3R8fCh0PVtdLHNbbi53b3JkXT10KSx0LnB1c2goe3N0YXJ0TGluZU51bWJlcjplLHN0YXJ0Q29sdW1uOm4uc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjplLGVuZENvbHVtbjpuLmVuZENvbHVtbn0pfX1yZXR1cm4gc30pKX1uYXZpZ2F0ZVZhbHVlU2V0KGUsdCxuLHIsaSl7cmV0dXJuIEtyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbz10aGlzLl9nZXRNb2RlbChlKTtpZighbylyZXR1cm4gbnVsbDtjb25zdCBzPW5ldyBSZWdFeHAocixpKTt0LnN0YXJ0Q29sdW1uPT09dC5lbmRDb2x1bW4mJih0PXtzdGFydExpbmVOdW1iZXI6dC5zdGFydExpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOnQuZW5kTGluZU51bWJlcixlbmRDb2x1bW46dC5lbmRDb2x1bW4rMX0pO2NvbnN0IGE9by5nZXRWYWx1ZUluUmFuZ2UodCksbD1vLmdldFdvcmRBdFBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjp0LnN0YXJ0Q29sdW1ufSxzKTtpZighbClyZXR1cm4gbnVsbDtjb25zdCB1PW8uZ2V0VmFsdWVJblJhbmdlKGwpO3JldHVybiBDdC5JTlNUQU5DRS5uYXZpZ2F0ZVZhbHVlU2V0KHQsYSxsLHUsbil9KSl9bG9hZEZvcmVpZ25Nb2R1bGUoZSx0LG4pe2NvbnN0IHI9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPWU9PmZ1bmN0aW9uKCl7Y29uc3Qgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQoZSxuKX0scj17fTtmb3IoY29uc3QgdCBvZiBlKXJbdF09bih0KTtyZXR1cm4gcn0obiwoKGUsdCk9PnRoaXMuX2hvc3QuZmhyKGUsdCkpKSxpPXtob3N0OnIsZ2V0TWlycm9yTW9kZWxzOigpPT50aGlzLl9nZXRNb2RlbHMoKX07cmV0dXJuIHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5Pyh0aGlzLl9mb3JlaWduTW9kdWxlPXRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5KGksdCksUHJvbWlzZS5yZXNvbHZlKHoodGhpcy5fZm9yZWlnbk1vZHVsZSkpKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdXNhZ2UiKSl9Zm1yKGUsdCl7aWYoIXRoaXMuX2ZvcmVpZ25Nb2R1bGV8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mb3JlaWduTW9kdWxlW2VdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIgb3IgbWV0aG9kOiAiK2UpKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9mb3JlaWduTW9kdWxlW2VdLmFwcGx5KHRoaXMuX2ZvcmVpZ25Nb2R1bGUsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19fXFyLl9kaWZmTGltaXQ9MWU1LHFyLl9zdWdnZXN0aW9uc0xpbWl0PTFlNCwiZnVuY3Rpb24iPT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmKGdsb2JhbFRoaXMubW9uYWNvPXtlZGl0b3I6dm9pZCAwLGxhbmd1YWdlczp2b2lkIDAsQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2U6QXQsRW1pdHRlcjpVLEtleUNvZGU6Y24sS2V5TW9kOlZuLFBvc2l0aW9uOm50LFJhbmdlOnJ0LFNlbGVjdGlvbjpNdCxTZWxlY3Rpb25EaXJlY3Rpb246U24sTWFya2VyU2V2ZXJpdHk6aG4sTWFya2VyVGFnOmRuLFVyaTpXZSxUb2tlbjpGbn0pO2xldCBCcj0hMTtmdW5jdGlvbiBVcihlKXtpZihCcilyZXR1cm47QnI9ITA7Y29uc3QgdD1uZXcgY2UoKGU9PntnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKGUpfSksKHQ9Pm5ldyBxcih0LGUpKSk7Z2xvYmFsVGhpcy5vbm1lc3NhZ2U9ZT0+e3Qub25tZXNzYWdlKGUuZGF0YSl9fQovKiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgKiBWZXJzaW9uOiAwLjM5LjAoZmYzNjIxYTNmYTYzODk4NzNiZTU0MTJkMTc1NTQyOTRlYTFiMDk0MSkKICAgICAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQogICAgICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9tb25hY28tZWRpdG9yL2Jsb2IvbWFpbi9MSUNFTlNFLnR4dAogICAgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmZ1bmN0aW9uICRyKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPWUubGVuZ3RoLHI9MCxpPSIiLG89MCxzPTE2LGE9MCxsPTAsdT0wLGM9MCxoPTA7ZnVuY3Rpb24gZCh0LG4pe2Zvcih2YXIgaT0wLG89MDtpPHR8fCFuOyl7dmFyIHM9ZS5jaGFyQ29kZUF0KHIpO2lmKHM+PTQ4JiZzPD01NylvPTE2Km8rcy00ODtlbHNlIGlmKHM+PTY1JiZzPD03MClvPTE2Km8rcy02NSsxMDtlbHNle2lmKCEocz49OTcmJnM8PTEwMikpYnJlYWs7bz0xNipvK3MtOTcrMTB9cisrLGkrK31yZXR1cm4gaTx0JiYobz0tMSksb31mdW5jdGlvbiBmKCl7aWYoaT0iIixoPTAsbz1yLGw9YSxjPXUscj49bilyZXR1cm4gbz1uLHM9MTc7dmFyIHQ9ZS5jaGFyQ29kZUF0KHIpO2lmKFdyKHQpKXtkb3tyKyssaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSx0PWUuY2hhckNvZGVBdChyKX13aGlsZShXcih0KSk7cmV0dXJuIHM9MTV9aWYoSHIodCkpcmV0dXJuIHIrKyxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLDEzPT09dCYmMTA9PT1lLmNoYXJDb2RlQXQocikmJihyKyssaSs9IlxuIiksYSsrLHU9cixzPTE0O3N3aXRjaCh0KXtjYXNlIDEyMzpyZXR1cm4gcisrLHM9MTtjYXNlIDEyNTpyZXR1cm4gcisrLHM9MjtjYXNlIDkxOnJldHVybiByKysscz0zO2Nhc2UgOTM6cmV0dXJuIHIrKyxzPTQ7Y2FzZSA1ODpyZXR1cm4gcisrLHM9NjtjYXNlIDQ0OnJldHVybiByKysscz01O2Nhc2UgMzQ6cmV0dXJuIHIrKyxpPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSIiLGk9cjs7KXtpZihyPj1uKXt0Kz1lLnN1YnN0cmluZyhpLHIpLGg9MjticmVha312YXIgbz1lLmNoYXJDb2RlQXQocik7aWYoMzQ9PT1vKXt0Kz1lLnN1YnN0cmluZyhpLHIpLHIrKzticmVha31pZig5MiE9PW8pe2lmKG8+PTAmJm88PTMxKXtpZihIcihvKSl7dCs9ZS5zdWJzdHJpbmcoaSxyKSxoPTI7YnJlYWt9aD02fXIrK31lbHNle2lmKHQrPWUuc3Vic3RyaW5nKGksciksKytyPj1uKXtoPTI7YnJlYWt9c3dpdGNoKGUuY2hhckNvZGVBdChyKyspKXtjYXNlIDM0OnQrPSciJzticmVhaztjYXNlIDkyOnQrPSJcXCI7YnJlYWs7Y2FzZSA0Nzp0Kz0iLyI7YnJlYWs7Y2FzZSA5ODp0Kz0iXGIiO2JyZWFrO2Nhc2UgMTAyOnQrPSJcZiI7YnJlYWs7Y2FzZSAxMTA6dCs9IlxuIjticmVhaztjYXNlIDExNDp0Kz0iXHIiO2JyZWFrO2Nhc2UgMTE2OnQrPSJcdCI7YnJlYWs7Y2FzZSAxMTc6dmFyIHM9ZCg0LCEwKTtzPj0wP3QrPVN0cmluZy5mcm9tQ2hhckNvZGUocyk6aD00O2JyZWFrO2RlZmF1bHQ6aD01fWk9cn19cmV0dXJuIHR9KCkscz0xMDtjYXNlIDQ3OnZhciBmPXItMTtpZig0Nz09PWUuY2hhckNvZGVBdChyKzEpKXtmb3Iocis9MjtyPG4mJiFIcihlLmNoYXJDb2RlQXQocikpOylyKys7cmV0dXJuIGk9ZS5zdWJzdHJpbmcoZixyKSxzPTEyfWlmKDQyPT09ZS5jaGFyQ29kZUF0KHIrMSkpe3IrPTI7Zm9yKHZhciBnPW4tMSxwPSExO3I8Zzspe3ZhciB2PWUuY2hhckNvZGVBdChyKTtpZig0Mj09PXYmJjQ3PT09ZS5jaGFyQ29kZUF0KHIrMSkpe3IrPTIscD0hMDticmVha31yKyssSHIodikmJigxMz09PXYmJjEwPT09ZS5jaGFyQ29kZUF0KHIpJiZyKyssYSsrLHU9cil9cmV0dXJuIHB8fChyKyssaD0xKSxpPWUuc3Vic3RyaW5nKGYscikscz0xM31yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxyKysscz0xNjtjYXNlIDQ1OmlmKGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCksKytyPT09bnx8IXpyKGUuY2hhckNvZGVBdChyKSkpcmV0dXJuIHM9MTY7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gaSs9ZnVuY3Rpb24oKXt2YXIgdD1yO2lmKDQ4PT09ZS5jaGFyQ29kZUF0KHIpKXIrKztlbHNlIGZvcihyKys7cjxlLmxlbmd0aCYmenIoZS5jaGFyQ29kZUF0KHIpKTspcisrO2lmKHI8ZS5sZW5ndGgmJjQ2PT09ZS5jaGFyQ29kZUF0KHIpKXtpZighKCsrcjxlLmxlbmd0aCYmenIoZS5jaGFyQ29kZUF0KHIpKSkpcmV0dXJuIGg9MyxlLnN1YnN0cmluZyh0LHIpO2ZvcihyKys7cjxlLmxlbmd0aCYmenIoZS5jaGFyQ29kZUF0KHIpKTspcisrfXZhciBuPXI7aWYocjxlLmxlbmd0aCYmKDY5PT09ZS5jaGFyQ29kZUF0KHIpfHwxMDE9PT1lLmNoYXJDb2RlQXQocikpKWlmKCgrK3I8ZS5sZW5ndGgmJjQzPT09ZS5jaGFyQ29kZUF0KHIpfHw0NT09PWUuY2hhckNvZGVBdChyKSkmJnIrKyxyPGUubGVuZ3RoJiZ6cihlLmNoYXJDb2RlQXQocikpKXtmb3IocisrO3I8ZS5sZW5ndGgmJnpyKGUuY2hhckNvZGVBdChyKSk7KXIrKztuPXJ9ZWxzZSBoPTM7cmV0dXJuIGUuc3Vic3RyaW5nKHQsbil9KCkscz0xMTtkZWZhdWx0OmZvcig7cjxuJiZtKHQpOylyKyssdD1lLmNoYXJDb2RlQXQocik7aWYobyE9PXIpe3N3aXRjaChpPWUuc3Vic3RyaW5nKG8scikpe2Nhc2UidHJ1ZSI6cmV0dXJuIHM9ODtjYXNlImZhbHNlIjpyZXR1cm4gcz05O2Nhc2UibnVsbCI6cmV0dXJuIHM9N31yZXR1cm4gcz0xNn1yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxyKysscz0xNn19ZnVuY3Rpb24gbShlKXtpZihXcihlKXx8SHIoZSkpcmV0dXJuITE7c3dpdGNoKGUpe2Nhc2UgMTI1OmNhc2UgOTM6Y2FzZSAxMjM6Y2FzZSA5MTpjYXNlIDM0OmNhc2UgNTg6Y2FzZSA0NDpjYXNlIDQ3OnJldHVybiExfXJldHVybiEwfXJldHVybntzZXRQb3NpdGlvbjpmdW5jdGlvbihlKXtyPWUsaT0iIixvPTAscz0xNixoPTB9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNjYW46dD9mdW5jdGlvbigpe3ZhciBlO2Rve2U9ZigpfXdoaWxlKGU+PTEyJiZlPD0xNSk7cmV0dXJuIGV9OmYsZ2V0VG9rZW46ZnVuY3Rpb24oKXtyZXR1cm4gc30sZ2V0VG9rZW5WYWx1ZTpmdW5jdGlvbigpe3JldHVybiBpfSxnZXRUb2tlbk9mZnNldDpmdW5jdGlvbigpe3JldHVybiBvfSxnZXRUb2tlbkxlbmd0aDpmdW5jdGlvbigpe3JldHVybiByLW99LGdldFRva2VuU3RhcnRMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGdldFRva2VuU3RhcnRDaGFyYWN0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gby1jfSxnZXRUb2tlbkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGh9fX1mdW5jdGlvbiBXcihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTE9PT1lfHwxMj09PWV8fDE2MD09PWV8fDU3NjA9PT1lfHxlPj04MTkyJiZlPD04MjAzfHw4MjM5PT09ZXx8ODI4Nz09PWV8fDEyMjg4PT09ZXx8NjUyNzk9PT1lfWZ1bmN0aW9uIEhyKGUpe3JldHVybiAxMD09PWV8fDEzPT09ZXx8ODIzMj09PWV8fDgyMzM9PT1lfWZ1bmN0aW9uIHpyKGUpe3JldHVybiBlPj00OCYmZTw9NTd9ZnVuY3Rpb24gR3IoZSx0LG4pe3ZhciByLGksbyxzLGE7aWYodCl7Zm9yKHM9dC5vZmZzZXQsYT1zK3QubGVuZ3RoLG89cztvPjAmJiFYcihlLG8tMSk7KW8tLTtmb3IodmFyIGw9YTtsPGUubGVuZ3RoJiYhWHIoZSxsKTspbCsrO2k9ZS5zdWJzdHJpbmcobyxsKSxyPWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPTAsaT10LnRhYlNpemV8fDQ7Zm9yKDtuPGUubGVuZ3RoOyl7dmFyIG89ZS5jaGFyQXQobik7aWYoIiAiPT09bylyKys7ZWxzZXtpZigiXHQiIT09bylicmVhaztyKz1pfW4rK31yZXR1cm4gTWF0aC5mbG9vcihyL2kpfShpLG4pfWVsc2UgaT1lLHI9MCxvPTAscz0wLGE9ZS5sZW5ndGg7dmFyIHUsYz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10LmNoYXJBdChuKTtpZigiXHIiPT09cilyZXR1cm4gbisxPHQubGVuZ3RoJiYiXG4iPT09dC5jaGFyQXQobisxKT8iXHJcbiI6IlxyIjtpZigiXG4iPT09cilyZXR1cm4iXG4ifXJldHVybiBlJiZlLmVvbHx8IlxuIn0obixlKSxoPSExLGQ9MDt1PW4uaW5zZXJ0U3BhY2VzP0pyKCIgIixuLnRhYlNpemV8fDQpOiJcdCI7dmFyIGY9JHIoaSwhMSksbT0hMTtmdW5jdGlvbiBnKCl7cmV0dXJuIGMrSnIodSxyK2QpfWZ1bmN0aW9uIHAoKXt2YXIgZT1mLnNjYW4oKTtmb3IoaD0hMTsxNT09PWV8fDE0PT09ZTspaD1ofHwxND09PWUsZT1mLnNjYW4oKTtyZXR1cm4gbT0xNj09PWV8fDAhPT1mLmdldFRva2VuRXJyb3IoKSxlfXZhciB2PVtdO2Z1bmN0aW9uIGIobixyLGkpe218fHQmJiEocjxhJiZpPnMpfHxlLnN1YnN0cmluZyhyLGkpPT09bnx8di5wdXNoKHtvZmZzZXQ6cixsZW5ndGg6aS1yLGNvbnRlbnQ6bn0pfXZhciB5PXAoKTtpZigxNyE9PXkpe3ZhciBDPWYuZ2V0VG9rZW5PZmZzZXQoKStvO2IoSnIodSxyKSxvLEMpfWZvcig7MTchPT15Oyl7Zm9yKHZhciBfPWYuZ2V0VG9rZW5PZmZzZXQoKStmLmdldFRva2VuTGVuZ3RoKCkrbyxTPXAoKSx3PSIiLEE9ITE7IWgmJigxMj09PVN8fDEzPT09Uyk7KXtiKCIgIixfLGYuZ2V0VG9rZW5PZmZzZXQoKStvKSxfPWYuZ2V0VG9rZW5PZmZzZXQoKStmLmdldFRva2VuTGVuZ3RoKCkrbyx3PShBPTEyPT09Uyk/ZygpOiIiLFM9cCgpfWlmKDI9PT1TKTEhPT15JiYoZC0tLHc9ZygpKTtlbHNlIGlmKDQ9PT1TKTMhPT15JiYoZC0tLHc9ZygpKTtlbHNle3N3aXRjaCh5KXtjYXNlIDM6Y2FzZSAxOmQrKyx3PWcoKTticmVhaztjYXNlIDU6Y2FzZSAxMjp3PWcoKTticmVhaztjYXNlIDEzOmg/dz1nKCk6QXx8KHc9IiAiKTticmVhaztjYXNlIDY6QXx8KHc9IiAiKTticmVhaztjYXNlIDEwOmlmKDY9PT1TKXtBfHwodz0iIik7YnJlYWt9Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMTpjYXNlIDI6Y2FzZSA0OjEyPT09U3x8MTM9PT1TP0F8fCh3PSIgIik6NSE9PVMmJjE3IT09UyYmKG09ITApO2JyZWFrO2Nhc2UgMTY6bT0hMH0haHx8MTIhPT1TJiYxMyE9PVN8fCh3PWcoKSl9MTc9PT1TJiYodz1uLmluc2VydEZpbmFsTmV3bGluZT9jOiIiKSxiKHcsXyxmLmdldFRva2VuT2Zmc2V0KCkrbykseT1TfXJldHVybiB2fWZ1bmN0aW9uIEpyKGUsdCl7Zm9yKHZhciBuPSIiLHI9MDtyPHQ7cisrKW4rPWU7cmV0dXJuIG59ZnVuY3Rpb24gWHIoZSx0KXtyZXR1cm4tMSE9PSJcclxuIi5pbmRleE9mKGUuY2hhckF0KHQpKX12YXIgWnI7Z2xvYmFsVGhpcy5vbm1lc3NhZ2U9ZT0+e0JyfHxVcihudWxsKX0sKFpyfHwoWnI9e30pKS5ERUZBVUxUPXthbGxvd1RyYWlsaW5nQ29tbWE6ITF9O3ZhciBZcixRcixlaSx0aSxuaSxyaSxpaSxvaSxzaSxhaSxsaSx1aSxjaSxoaSxkaSxmaSxtaSxnaSxwaSx2aSxiaSx5aSxDaSxfaSxTaSx3aSxBaSx4aSxFaSxMaSxOaSxraSxSaSxUaSxPaSxNaSxJaSxQaSxGaSxWaSxEaSxLaSxqaSxxaSxCaSxVaSwkaSxXaSxIaSx6aT0kcixHaT1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPVpyLkRFRkFVTFQpO3ZhciByPW51bGwsaT1bXSxvPVtdO2Z1bmN0aW9uIHMoZSl7QXJyYXkuaXNBcnJheShpKT9pLnB1c2goZSk6bnVsbCE9PXImJihpW3JdPWUpfXJldHVybiBmdW5jdGlvbihlLHQsbil7dm9pZCAwPT09biYmKG49WnIuREVGQVVMVCk7dmFyIHI9JHIoZSwhMSk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZT9mdW5jdGlvbigpe3JldHVybiBlKHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT9mdW5jdGlvbih0KXtyZXR1cm4gZSh0LHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19dmFyIHM9aSh0Lm9uT2JqZWN0QmVnaW4pLGE9byh0Lm9uT2JqZWN0UHJvcGVydHkpLGw9aSh0Lm9uT2JqZWN0RW5kKSx1PWkodC5vbkFycmF5QmVnaW4pLGM9aSh0Lm9uQXJyYXlFbmQpLGg9byh0Lm9uTGl0ZXJhbFZhbHVlKSxkPW8odC5vblNlcGFyYXRvciksZj1pKHQub25Db21tZW50KSxtPW8odC5vbkVycm9yKSxnPW4mJm4uZGlzYWxsb3dDb21tZW50cyxwPW4mJm4uYWxsb3dUcmFpbGluZ0NvbW1hO2Z1bmN0aW9uIHYoKXtmb3IoOzspe3ZhciBlPXIuc2NhbigpO3N3aXRjaChyLmdldFRva2VuRXJyb3IoKSl7Y2FzZSA0OmIoMTQpO2JyZWFrO2Nhc2UgNTpiKDE1KTticmVhaztjYXNlIDM6YigxMyk7YnJlYWs7Y2FzZSAxOmd8fGIoMTEpO2JyZWFrO2Nhc2UgMjpiKDEyKTticmVhaztjYXNlIDY6YigxNil9c3dpdGNoKGUpe2Nhc2UgMTI6Y2FzZSAxMzpnP2IoMTApOmYoKTticmVhaztjYXNlIDE2OmIoMSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIGV9fX1mdW5jdGlvbiBiKGUsdCxuKXtpZih2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49W10pLG0oZSksdC5sZW5ndGgrbi5sZW5ndGg+MClmb3IodmFyIGk9ci5nZXRUb2tlbigpOzE3IT09aTspe2lmKC0xIT09dC5pbmRleE9mKGkpKXt2KCk7YnJlYWt9aWYoLTEhPT1uLmluZGV4T2YoaSkpYnJlYWs7aT12KCl9fWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ci5nZXRUb2tlblZhbHVlKCk7cmV0dXJuIGU/aCh0KTphKHQpLHYoKSwhMH1mdW5jdGlvbiBDKCl7c3dpdGNoKHIuZ2V0VG9rZW4oKSl7Y2FzZSAxMTp2YXIgZT1yLmdldFRva2VuVmFsdWUoKSx0PU51bWJlcihlKTtpc05hTih0KSYmKGIoMiksdD0wKSxoKHQpO2JyZWFrO2Nhc2UgNzpoKG51bGwpO2JyZWFrO2Nhc2UgODpoKCEwKTticmVhaztjYXNlIDk6aCghMSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gdigpLCEwfWZ1bmN0aW9uIF8oKXtyZXR1cm4gMTAhPT1yLmdldFRva2VuKCk/KGIoMyxbXSxbMiw1XSksITEpOih5KCExKSw2PT09ci5nZXRUb2tlbigpPyhkKCI6IiksdigpLEEoKXx8Yig0LFtdLFsyLDVdKSk6Yig1LFtdLFsyLDVdKSwhMCl9ZnVuY3Rpb24gUygpe3MoKSx2KCk7Zm9yKHZhciBlPSExOzIhPT1yLmdldFRva2VuKCkmJjE3IT09ci5nZXRUb2tlbigpOyl7aWYoNT09PXIuZ2V0VG9rZW4oKSl7aWYoZXx8Yig0LFtdLFtdKSxkKCIsIiksdigpLDI9PT1yLmdldFRva2VuKCkmJnApYnJlYWt9ZWxzZSBlJiZiKDYsW10sW10pO18oKXx8Yig0LFtdLFsyLDVdKSxlPSEwfXJldHVybiBsKCksMiE9PXIuZ2V0VG9rZW4oKT9iKDcsWzJdLFtdKTp2KCksITB9ZnVuY3Rpb24gdygpe3UoKSx2KCk7Zm9yKHZhciBlPSExOzQhPT1yLmdldFRva2VuKCkmJjE3IT09ci5nZXRUb2tlbigpOyl7aWYoNT09PXIuZ2V0VG9rZW4oKSl7aWYoZXx8Yig0LFtdLFtdKSxkKCIsIiksdigpLDQ9PT1yLmdldFRva2VuKCkmJnApYnJlYWt9ZWxzZSBlJiZiKDYsW10sW10pO0EoKXx8Yig0LFtdLFs0LDVdKSxlPSEwfXJldHVybiBjKCksNCE9PXIuZ2V0VG9rZW4oKT9iKDgsWzRdLFtdKTp2KCksITB9ZnVuY3Rpb24gQSgpe3N3aXRjaChyLmdldFRva2VuKCkpe2Nhc2UgMzpyZXR1cm4gdygpO2Nhc2UgMTpyZXR1cm4gUygpO2Nhc2UgMTA6cmV0dXJuIHkoITApO2RlZmF1bHQ6cmV0dXJuIEMoKX19aWYodigpLDE3PT09ci5nZXRUb2tlbigpKXJldHVybiEhbi5hbGxvd0VtcHR5Q29udGVudHx8KGIoNCxbXSxbXSksITEpO2lmKCFBKCkpcmV0dXJuIGIoNCxbXSxbXSksITE7MTchPT1yLmdldFRva2VuKCkmJmIoOSxbXSxbXSl9KGUse29uT2JqZWN0QmVnaW46ZnVuY3Rpb24oKXt2YXIgZT17fTtzKGUpLG8ucHVzaChpKSxpPWUscj1udWxsfSxvbk9iamVjdFByb3BlcnR5OmZ1bmN0aW9uKGUpe3I9ZX0sb25PYmplY3RFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uQXJyYXlCZWdpbjpmdW5jdGlvbigpe3ZhciBlPVtdO3MoZSksby5wdXNoKGkpLGk9ZSxyPW51bGx9LG9uQXJyYXlFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uTGl0ZXJhbFZhbHVlOnMsb25FcnJvcjpmdW5jdGlvbihlLG4scil7dC5wdXNoKHtlcnJvcjplLG9mZnNldDpuLGxlbmd0aDpyfSl9fSxuKSxpWzBdfSxKaT1mdW5jdGlvbiBlKHQsbixyKXtpZih2b2lkIDA9PT1yJiYocj0hMSksZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0hMSksdD49ZS5vZmZzZXQmJnQ8ZS5vZmZzZXQrZS5sZW5ndGh8fG4mJnQ9PT1lLm9mZnNldCtlLmxlbmd0aH0odCxuLHIpKXt2YXIgaT10LmNoaWxkcmVuO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aCYmaVtvXS5vZmZzZXQ8PW47bysrKXt2YXIgcz1lKGlbb10sbixyKTtpZihzKXJldHVybiBzfXJldHVybiB0fX0sWGk9ZnVuY3Rpb24gZSh0KXtpZighdC5wYXJlbnR8fCF0LnBhcmVudC5jaGlsZHJlbilyZXR1cm5bXTt2YXIgbj1lKHQucGFyZW50KTtpZigicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIHI9dC5wYXJlbnQuY2hpbGRyZW5bMF0udmFsdWU7bi5wdXNoKHIpfWVsc2UgaWYoImFycmF5Ij09PXQucGFyZW50LnR5cGUpe3ZhciBpPXQucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodCk7LTEhPT1pJiZuLnB1c2goaSl9cmV0dXJuIG59LFppPWZ1bmN0aW9uIGUodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHQuY2hpbGRyZW4ubWFwKGUpO2Nhc2Uib2JqZWN0Ijpmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPTAsaT10LmNoaWxkcmVuO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdLHM9by5jaGlsZHJlblsxXTtzJiYobltvLmNoaWxkcmVuWzBdLnZhbHVlXT1lKHMpKX1yZXR1cm4gbjtjYXNlIm51bGwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdC52YWx1ZTtkZWZhdWx0OnJldHVybn19O2Z1bmN0aW9uIFlpKGUsdCl7aWYoZT09PXQpcmV0dXJuITA7aWYobnVsbD09ZXx8bnVsbD09dClyZXR1cm4hMTtpZih0eXBlb2YgZSE9dHlwZW9mIHQpcmV0dXJuITE7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoZSkhPT1BcnJheS5pc0FycmF5KHQpKXJldHVybiExO3ZhciBuLHI7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKCFZaShlW25dLHRbbl0pKXJldHVybiExfWVsc2V7dmFyIGk9W107Zm9yKHIgaW4gZSlpLnB1c2gocik7aS5zb3J0KCk7dmFyIG89W107Zm9yKHIgaW4gdClvLnB1c2gocik7aWYoby5zb3J0KCksIVlpKGksbykpcmV0dXJuITE7Zm9yKG49MDtuPGkubGVuZ3RoO24rKylpZighWWkoZVtpW25dXSx0W2lbbl1dKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBRaShlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9ZnVuY3Rpb24gZW8oZSl7cmV0dXJuIHZvaWQgMCE9PWV9ZnVuY3Rpb24gdG8oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX1mdW5jdGlvbiBubyhlLHQpe3ZhciBuPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiBuPjA/ZS5sYXN0SW5kZXhPZih0KT09PW46MD09PW4mJmU9PT10fWZ1bmN0aW9uIHJvKGUpe3ZhciB0PSIiOyhmdW5jdGlvbihlLHQpe2lmKGUubGVuZ3RoPHQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKGVbbl0hPT10W25dKXJldHVybiExO3JldHVybiEwfSkoZSwiKD9pKSIpJiYoZT1lLnN1YnN0cmluZyg0KSx0PSJpIik7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCsidSIpfWNhdGNoKG4pe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChlLHQpfWNhdGNoKGUpe3JldHVybn19fShRcj1Zcnx8KFlyPXt9KSkuTUlOX1ZBTFVFPS0yMTQ3NDgzNjQ4LFFyLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3LCh0aT1laXx8KGVpPXt9KSkuTUlOX1ZBTFVFPTAsdGkuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsKHJpPW5pfHwobmk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PU51bWJlci5NQVhfVkFMVUUmJihlPWVpLk1BWF9WQUxVRSksdD09PU51bWJlci5NQVhfVkFMVUUmJih0PWVpLk1BWF9WQUxVRSkse2xpbmU6ZSxjaGFyYWN0ZXI6dH19LHJpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLm9iamVjdExpdGVyYWwodCkmJmlzLnVpbnRlZ2VyKHQubGluZSkmJmlzLnVpbnRlZ2VyKHQuY2hhcmFjdGVyKX0sKG9pPWlpfHwoaWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYoaXMudWludGVnZXIoZSkmJmlzLnVpbnRlZ2VyKHQpJiZpcy51aW50ZWdlcihuKSYmaXMudWludGVnZXIocikpcmV0dXJue3N0YXJ0Om5pLmNyZWF0ZShlLHQpLGVuZDpuaS5jcmVhdGUobixyKX07aWYobmkuaXMoZSkmJm5pLmlzKHQpKXJldHVybntzdGFydDplLGVuZDp0fTt0aHJvdyBuZXcgRXJyb3IoIlJhbmdlI2NyZWF0ZSBjYWxsZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50c1siK2UrIiwgIit0KyIsICIrbisiLCAiK3IrIl0iKX0sb2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMub2JqZWN0TGl0ZXJhbCh0KSYmbmkuaXModC5zdGFydCkmJm5pLmlzKHQuZW5kKX0sKGFpPXNpfHwoc2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dXJpOmUscmFuZ2U6dH19LGFpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLmRlZmluZWQodCkmJmlpLmlzKHQucmFuZ2UpJiYoaXMuc3RyaW5nKHQudXJpKXx8aXMudW5kZWZpbmVkKHQudXJpKSl9LCh1aT1saXx8KGxpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybnt0YXJnZXRVcmk6ZSx0YXJnZXRSYW5nZTp0LHRhcmdldFNlbGVjdGlvblJhbmdlOm4sb3JpZ2luU2VsZWN0aW9uUmFuZ2U6cn19LHVpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLmRlZmluZWQodCkmJmlpLmlzKHQudGFyZ2V0UmFuZ2UpJiZpcy5zdHJpbmcodC50YXJnZXRVcmkpJiYoaWkuaXModC50YXJnZXRTZWxlY3Rpb25SYW5nZSl8fGlzLnVuZGVmaW5lZCh0LnRhcmdldFNlbGVjdGlvblJhbmdlKSkmJihpaS5pcyh0Lm9yaWdpblNlbGVjdGlvblJhbmdlKXx8aXMudW5kZWZpbmVkKHQub3JpZ2luU2VsZWN0aW9uUmFuZ2UpKX0sKGhpPWNpfHwoY2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJue3JlZDplLGdyZWVuOnQsYmx1ZTpuLGFscGhhOnJ9fSxoaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBpcy5udW1iZXJSYW5nZSh0LnJlZCwwLDEpJiZpcy5udW1iZXJSYW5nZSh0LmdyZWVuLDAsMSkmJmlzLm51bWJlclJhbmdlKHQuYmx1ZSwwLDEpJiZpcy5udW1iZXJSYW5nZSh0LmFscGhhLDAsMSl9LChmaT1kaXx8KGRpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsY29sb3I6dH19LGZpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlpLmlzKHQucmFuZ2UpJiZjaS5pcyh0LmNvbG9yKX0sKGdpPW1pfHwobWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntsYWJlbDplLHRleHRFZGl0OnQsYWRkaXRpb25hbFRleHRFZGl0czpufX0sZ2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMuc3RyaW5nKHQubGFiZWwpJiYoaXMudW5kZWZpbmVkKHQudGV4dEVkaXQpfHxUaS5pcyh0KSkmJihpcy51bmRlZmluZWQodC5hZGRpdGlvbmFsVGV4dEVkaXRzKXx8aXMudHlwZWRBcnJheSh0LmFkZGl0aW9uYWxUZXh0RWRpdHMsVGkuaXMpKX0sKHZpPXBpfHwocGk9e30pKS5Db21tZW50PSJjb21tZW50Iix2aS5JbXBvcnRzPSJpbXBvcnRzIix2aS5SZWdpb249InJlZ2lvbiIsKHlpPWJpfHwoYmk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz17c3RhcnRMaW5lOmUsZW5kTGluZTp0fTtyZXR1cm4gaXMuZGVmaW5lZChuKSYmKG8uc3RhcnRDaGFyYWN0ZXI9biksaXMuZGVmaW5lZChyKSYmKG8uZW5kQ2hhcmFjdGVyPXIpLGlzLmRlZmluZWQoaSkmJihvLmtpbmQ9aSksb30seWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMudWludGVnZXIodC5zdGFydExpbmUpJiZpcy51aW50ZWdlcih0LnN0YXJ0TGluZSkmJihpcy51bmRlZmluZWQodC5zdGFydENoYXJhY3Rlcil8fGlzLnVpbnRlZ2VyKHQuc3RhcnRDaGFyYWN0ZXIpKSYmKGlzLnVuZGVmaW5lZCh0LmVuZENoYXJhY3Rlcil8fGlzLnVpbnRlZ2VyKHQuZW5kQ2hhcmFjdGVyKSkmJihpcy51bmRlZmluZWQodC5raW5kKXx8aXMuc3RyaW5nKHQua2luZCkpfSwoX2k9Q2l8fChDaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntsb2NhdGlvbjplLG1lc3NhZ2U6dH19LF9pLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLmRlZmluZWQodCkmJnNpLmlzKHQubG9jYXRpb24pJiZpcy5zdHJpbmcodC5tZXNzYWdlKX0sKHdpPVNpfHwoU2k9e30pKS5FcnJvcj0xLHdpLldhcm5pbmc9Mix3aS5JbmZvcm1hdGlvbj0zLHdpLkhpbnQ9NCwoeGk9QWl8fChBaT17fSkpLlVubmVjZXNzYXJ5PTEseGkuRGVwcmVjYXRlZD0yLChFaXx8KEVpPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gbnVsbCE9dCYmaXMuc3RyaW5nKHQuaHJlZil9LChOaT1MaXx8KExpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgcz17cmFuZ2U6ZSxtZXNzYWdlOnR9O3JldHVybiBpcy5kZWZpbmVkKG4pJiYocy5zZXZlcml0eT1uKSxpcy5kZWZpbmVkKHIpJiYocy5jb2RlPXIpLGlzLmRlZmluZWQoaSkmJihzLnNvdXJjZT1pKSxpcy5kZWZpbmVkKG8pJiYocy5yZWxhdGVkSW5mb3JtYXRpb249byksc30sTmkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lO3JldHVybiBpcy5kZWZpbmVkKG4pJiZpaS5pcyhuLnJhbmdlKSYmaXMuc3RyaW5nKG4ubWVzc2FnZSkmJihpcy5udW1iZXIobi5zZXZlcml0eSl8fGlzLnVuZGVmaW5lZChuLnNldmVyaXR5KSkmJihpcy5pbnRlZ2VyKG4uY29kZSl8fGlzLnN0cmluZyhuLmNvZGUpfHxpcy51bmRlZmluZWQobi5jb2RlKSkmJihpcy51bmRlZmluZWQobi5jb2RlRGVzY3JpcHRpb24pfHxpcy5zdHJpbmcobnVsbD09PSh0PW4uY29kZURlc2NyaXB0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ocmVmKSkmJihpcy5zdHJpbmcobi5zb3VyY2UpfHxpcy51bmRlZmluZWQobi5zb3VyY2UpKSYmKGlzLnVuZGVmaW5lZChuLnJlbGF0ZWRJbmZvcm1hdGlvbil8fGlzLnR5cGVkQXJyYXkobi5yZWxhdGVkSW5mb3JtYXRpb24sQ2kuaXMpKX0sKFJpPWtpfHwoa2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT17dGl0bGU6ZSxjb21tYW5kOnR9O3JldHVybiBpcy5kZWZpbmVkKG4pJiZuLmxlbmd0aD4wJiYoaS5hcmd1bWVudHM9biksaX0sUmkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMuZGVmaW5lZCh0KSYmaXMuc3RyaW5nKHQudGl0bGUpJiZpcy5zdHJpbmcodC5jb21tYW5kKX0sKE9pPVRpfHwoVGk9e30pKS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDp0fX0sT2kuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOntzdGFydDplLGVuZDplfSxuZXdUZXh0OnR9fSxPaS5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIn19LE9pLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLm9iamVjdExpdGVyYWwodCkmJmlzLnN0cmluZyh0Lm5ld1RleHQpJiZpaS5pcyh0LnJhbmdlKX0sKElpPU1pfHwoTWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtsYWJlbDplfTtyZXR1cm4gdm9pZCAwIT09dCYmKHIubmVlZHNDb25maXJtYXRpb249dCksdm9pZCAwIT09biYmKHIuZGVzY3JpcHRpb249bikscn0sSWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdm9pZCAwIT09dCYmaXMub2JqZWN0TGl0ZXJhbCh0KSYmaXMuc3RyaW5nKHQubGFiZWwpJiYoaXMuYm9vbGVhbih0Lm5lZWRzQ29uZmlybWF0aW9uKXx8dm9pZCAwPT09dC5uZWVkc0NvbmZpcm1hdGlvbikmJihpcy5zdHJpbmcodC5kZXNjcmlwdGlvbil8fHZvaWQgMD09PXQuZGVzY3JpcHRpb24pfSwoUGl8fChQaT17fSkpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0sKFZpPUZpfHwoRmk9e30pKS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OnQsYW5ub3RhdGlvbklkOm59fSxWaS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTp7c3RhcnQ6ZSxlbmQ6ZX0sbmV3VGV4dDp0LGFubm90YXRpb25JZDpufX0sVmkuZGVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIixhbm5vdGF0aW9uSWQ6dH19LFZpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIFRpLmlzKHQpJiYoTWkuaXModC5hbm5vdGF0aW9uSWQpfHxQaS5pcyh0LmFubm90YXRpb25JZCkpfSwoS2k9RGl8fChEaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0ZXh0RG9jdW1lbnQ6ZSxlZGl0czp0fX0sS2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMuZGVmaW5lZCh0KSYmbG8uaXModC50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KHQuZWRpdHMpfSwocWk9aml8fChqaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e2tpbmQ6ImNyZWF0ZSIsdXJpOmV9O3JldHVybiB2b2lkIDA9PT10fHx2b2lkIDA9PT10Lm92ZXJ3cml0ZSYmdm9pZCAwPT09dC5pZ25vcmVJZkV4aXN0c3x8KHIub3B0aW9ucz10KSx2b2lkIDAhPT1uJiYoci5hbm5vdGF0aW9uSWQ9bikscn0scWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmImNyZWF0ZSI9PT10LmtpbmQmJmlzLnN0cmluZyh0LnVyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMub3ZlcndyaXRlfHxpcy5ib29sZWFuKHQub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8aXMuYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8UGkuaXModC5hbm5vdGF0aW9uSWQpKX0sKFVpPUJpfHwoQmk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOmUsbmV3VXJpOnR9O3JldHVybiB2b2lkIDA9PT1ufHx2b2lkIDA9PT1uLm92ZXJ3cml0ZSYmdm9pZCAwPT09bi5pZ25vcmVJZkV4aXN0c3x8KGkub3B0aW9ucz1uKSx2b2lkIDAhPT1yJiYoaS5hbm5vdGF0aW9uSWQ9ciksaX0sVWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmInJlbmFtZSI9PT10LmtpbmQmJmlzLnN0cmluZyh0Lm9sZFVyaSkmJmlzLnN0cmluZyh0Lm5ld1VyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMub3ZlcndyaXRlfHxpcy5ib29sZWFuKHQub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8aXMuYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8UGkuaXModC5hbm5vdGF0aW9uSWQpKX0sKFdpPSRpfHwoJGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtraW5kOiJkZWxldGUiLHVyaTplfTtyZXR1cm4gdm9pZCAwPT09dHx8dm9pZCAwPT09dC5yZWN1cnNpdmUmJnZvaWQgMD09PXQuaWdub3JlSWZOb3RFeGlzdHN8fChyLm9wdGlvbnM9dCksdm9pZCAwIT09biYmKHIuYW5ub3RhdGlvbklkPW4pLHJ9LFdpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJiJkZWxldGUiPT09dC5raW5kJiZpcy5zdHJpbmcodC51cmkpJiYodm9pZCAwPT09dC5vcHRpb25zfHwodm9pZCAwPT09dC5vcHRpb25zLnJlY3Vyc2l2ZXx8aXMuYm9vbGVhbih0Lm9wdGlvbnMucmVjdXJzaXZlKSkmJih2b2lkIDA9PT10Lm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHN8fGlzLmJvb2xlYW4odC5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzKSkpJiYodm9pZCAwPT09dC5hbm5vdGF0aW9uSWR8fFBpLmlzKHQuYW5ub3RhdGlvbklkKSl9LChIaXx8KEhpPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmKHZvaWQgMCE9PXQuY2hhbmdlc3x8dm9pZCAwIT09dC5kb2N1bWVudENoYW5nZXMpJiYodm9pZCAwPT09dC5kb2N1bWVudENoYW5nZXN8fHQuZG9jdW1lbnRDaGFuZ2VzLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gaXMuc3RyaW5nKGUua2luZCk/amkuaXMoZSl8fEJpLmlzKGUpfHwkaS5pcyhlKTpEaS5pcyhlKX0pKSl9O3ZhciBpbyxvbyxzbyxhbyxsbyx1byxjbyxobyxmbyxtbyxnbyxwbyx2byxibyx5byxDbyxfbyxTbyx3byxBbyx4byxFbyxMbyxObyxrbyxSbyxUbyxPbyxNbyxJbyxQbyxGbyxWbyxEbyxLbyxqbyxxbyxCbyxVbywkbyxXbyxIbyx6byxHbyxKbyxYbyxabyxZbyxRbyxlcyx0cyxucz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmVkaXRzPWUsdGhpcy5jaGFuZ2VBbm5vdGF0aW9ucz10fXJldHVybiBlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09bj9yPVRpLmluc2VydChlLHQpOlBpLmlzKG4pPyhpPW4scj1GaS5pbnNlcnQoZSx0LG4pKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxpPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKG4pLHI9RmkuaW5zZXJ0KGUsdCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LGUucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09bj9yPVRpLnJlcGxhY2UoZSx0KTpQaS5pcyhuKT8oaT1uLHI9RmkucmVwbGFjZShlLHQsbikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLGk9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2Uobikscj1GaS5yZXBsYWNlKGUsdCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYodm9pZCAwPT09dD9uPVRpLmRlbChlKTpQaS5pcyh0KT8ocj10LG49RmkuZGVsKGUsdCkpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLHI9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UodCksbj1GaS5kZWwoZSxyKSksdGhpcy5lZGl0cy5wdXNoKG4pLHZvaWQgMCE9PXIpcmV0dXJuIHJ9LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmVkaXRzLnB1c2goZSl9LGUucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZWRpdHMuc3BsaWNlKDAsdGhpcy5lZGl0cy5sZW5ndGgpfSxlLnByb3RvdHlwZS5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiVGV4dCBlZGl0IGNoYW5nZSBpcyBub3QgY29uZmlndXJlZCB0byBtYW5hZ2UgY2hhbmdlIGFubm90YXRpb25zLiIpfSxlfSgpLHJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLl9hbm5vdGF0aW9ucz12b2lkIDA9PT1lP09iamVjdC5jcmVhdGUobnVsbCk6ZSx0aGlzLl9jb3VudGVyPTAsdGhpcy5fc2l6ZT0wfXJldHVybiBlLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm1hbmFnZT1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKFBpLmlzKGUpP249ZToobj10aGlzLm5leHRJZCgpLHQ9ZSksdm9pZCAwIT09dGhpcy5fYW5ub3RhdGlvbnNbbl0pdGhyb3cgbmV3IEVycm9yKCJJZCAiK24rIiBpcyBhbHJlYWR5IGluIHVzZS4iKTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBFcnJvcigiTm8gYW5ub3RhdGlvbiBwcm92aWRlZCBmb3IgaWQgIituKTtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnNbbl09dCx0aGlzLl9zaXplKyssbn0sZS5wcm90b3R5cGUubmV4dElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvdW50ZXIrKyx0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCl9LGV9KCk7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzO3RoaXMuX3RleHRFZGl0Q2hhbmdlcz1PYmplY3QuY3JlYXRlKG51bGwpLHZvaWQgMCE9PWU/KHRoaXMuX3dvcmtzcGFjZUVkaXQ9ZSxlLmRvY3VtZW50Q2hhbmdlcz8odGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IHJzKGUuY2hhbmdlQW5ub3RhdGlvbnMpLGUuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCksZS5kb2N1bWVudENoYW5nZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoRGkuaXMoZSkpe3ZhciBuPW5ldyBucyhlLmVkaXRzLHQuX2NoYW5nZUFubm90YXRpb25zKTt0Ll90ZXh0RWRpdENoYW5nZXNbZS50ZXh0RG9jdW1lbnQudXJpXT1ufX0pKSk6ZS5jaGFuZ2VzJiZPYmplY3Qua2V5cyhlLmNoYW5nZXMpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPW5ldyBucyhlLmNoYW5nZXNbbl0pO3QuX3RleHRFZGl0Q2hhbmdlc1tuXT1yfSkpKTp0aGlzLl93b3Jrc3BhY2VFZGl0PXt9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZWRpdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDAhPT10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyYmKDA9PT10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5zaXplP3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dm9pZCAwOnRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCkpLHRoaXMuX3dvcmtzcGFjZUVkaXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZ2V0VGV4dEVkaXRDaGFuZ2U9ZnVuY3Rpb24oZSl7aWYobG8uaXMoZSkpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHQ9e3VyaTplLnVyaSx2ZXJzaW9uOmUudmVyc2lvbn07aWYoIShyPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0LnVyaV0pKXt2YXIgbj17dGV4dERvY3VtZW50OnQsZWRpdHM6aT1bXX07dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChuKSxyPW5ldyBucyhpLHRoaXMuX2NoYW5nZUFubm90YXRpb25zKSx0aGlzLl90ZXh0RWRpdENoYW5nZXNbdC51cmldPXJ9cmV0dXJuIHJ9aWYodGhpcy5pbml0Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBub3JtYWwgdGV4dCBlZGl0IGNoYW5nZXMuIik7dmFyIHI7aWYoIShyPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXSkpe3ZhciBpPVtdO3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlc1tlXT1pLHI9bmV3IG5zKGkpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXT1yfXJldHVybiByfSxlLnByb3RvdHlwZS5pbml0RG9jdW1lbnRDaGFuZ2VzPWZ1bmN0aW9uKCl7dm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMmJnZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyYmKHRoaXMuX2NoYW5nZUFubm90YXRpb25zPW5ldyBycyx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz1bXSx0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpKX0sZS5wcm90b3R5cGUuaW5pdENoYW5nZXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyYmdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzJiYodGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzPU9iamVjdC5jcmVhdGUobnVsbCkpfSxlLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciByLGksbztpZihNaS5pcyh0KXx8UGkuaXModCk/cj10Om49dCx2b2lkIDA9PT1yP2k9amkuY3JlYXRlKGUsbik6KG89UGkuaXMocik/cjp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksaT1qaS5jcmVhdGUoZSxuLG8pKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKGkpLHZvaWQgMCE9PW8pcmV0dXJuIG99LGUucHJvdG90eXBlLnJlbmFtZUZpbGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgaSxvLHM7aWYoTWkuaXMobil8fFBpLmlzKG4pP2k9bjpyPW4sdm9pZCAwPT09aT9vPUJpLmNyZWF0ZShlLHQscik6KHM9UGkuaXMoaSk/aTp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoaSksbz1CaS5jcmVhdGUoZSx0LHIscykpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2gobyksdm9pZCAwIT09cylyZXR1cm4gc30sZS5wcm90b3R5cGUuZGVsZXRlRmlsZT1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgcixpLG87aWYoTWkuaXModCl8fFBpLmlzKHQpP3I9dDpuPXQsdm9pZCAwPT09cj9pPSRpLmNyZWF0ZShlLG4pOihvPVBpLmlzKHIpP3I6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHIpLGk9JGkuY3JlYXRlKGUsbixvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChpKSx2b2lkIDAhPT1vKXJldHVybiBvfX0oKSwob289aW98fChpbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm57dXJpOmV9fSxvby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBpcy5kZWZpbmVkKHQpJiZpcy5zdHJpbmcodC51cmkpfSwoYW89c298fChzbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSx2ZXJzaW9uOnR9fSxhby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBpcy5kZWZpbmVkKHQpJiZpcy5zdHJpbmcodC51cmkpJiZpcy5pbnRlZ2VyKHQudmVyc2lvbil9LCh1bz1sb3x8KGxvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3VyaTplLHZlcnNpb246dH19LHVvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLmRlZmluZWQodCkmJmlzLnN0cmluZyh0LnVyaSkmJihudWxsPT09dC52ZXJzaW9ufHxpcy5pbnRlZ2VyKHQudmVyc2lvbikpfSwoaG89Y298fChjbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm57dXJpOmUsbGFuZ3VhZ2VJZDp0LHZlcnNpb246bix0ZXh0OnJ9fSxoby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBpcy5kZWZpbmVkKHQpJiZpcy5zdHJpbmcodC51cmkpJiZpcy5zdHJpbmcodC5sYW5ndWFnZUlkKSYmaXMuaW50ZWdlcih0LnZlcnNpb24pJiZpcy5zdHJpbmcodC50ZXh0KX0sKG1vPWZvfHwoZm89e30pKS5QbGFpblRleHQ9InBsYWludGV4dCIsbW8uTWFya2Rvd249Im1hcmtkb3duIixmdW5jdGlvbihlKXtlLmlzPWZ1bmN0aW9uKHQpe3ZhciBuPXQ7cmV0dXJuIG49PT1lLlBsYWluVGV4dHx8bj09PWUuTWFya2Rvd259fShmb3x8KGZvPXt9KSksKGdvfHwoZ289e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBpcy5vYmplY3RMaXRlcmFsKGUpJiZmby5pcyh0LmtpbmQpJiZpcy5zdHJpbmcodC52YWx1ZSl9LCh2bz1wb3x8KHBvPXt9KSkuVGV4dD0xLHZvLk1ldGhvZD0yLHZvLkZ1bmN0aW9uPTMsdm8uQ29uc3RydWN0b3I9NCx2by5GaWVsZD01LHZvLlZhcmlhYmxlPTYsdm8uQ2xhc3M9Nyx2by5JbnRlcmZhY2U9OCx2by5Nb2R1bGU9OSx2by5Qcm9wZXJ0eT0xMCx2by5Vbml0PTExLHZvLlZhbHVlPTEyLHZvLkVudW09MTMsdm8uS2V5d29yZD0xNCx2by5TbmlwcGV0PTE1LHZvLkNvbG9yPTE2LHZvLkZpbGU9MTcsdm8uUmVmZXJlbmNlPTE4LHZvLkZvbGRlcj0xOSx2by5FbnVtTWVtYmVyPTIwLHZvLkNvbnN0YW50PTIxLHZvLlN0cnVjdD0yMix2by5FdmVudD0yMyx2by5PcGVyYXRvcj0yNCx2by5UeXBlUGFyYW1ldGVyPTI1LCh5bz1ib3x8KGJvPXt9KSkuUGxhaW5UZXh0PTEseW8uU25pcHBldD0yLChDb3x8KENvPXt9KSkuRGVwcmVjYXRlZD0xLChTbz1fb3x8KF9vPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57bmV3VGV4dDplLGluc2VydDp0LHJlcGxhY2U6bn19LFNvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJmlzLnN0cmluZyh0Lm5ld1RleHQpJiZpaS5pcyh0Lmluc2VydCkmJmlpLmlzKHQucmVwbGFjZSl9LChBbz13b3x8KHdvPXt9KSkuYXNJcz0xLEFvLmFkanVzdEluZGVudGF0aW9uPTIsKHhvfHwoeG89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJue2xhYmVsOmV9fSwoRW98fChFbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntpdGVtczplfHxbXSxpc0luY29tcGxldGU6ISF0fX0sKE5vPUxvfHwoTG89e30pKS5mcm9tUGxhaW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX0sTm8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMuc3RyaW5nKHQpfHxpcy5vYmplY3RMaXRlcmFsKHQpJiZpcy5zdHJpbmcodC5sYW5ndWFnZSkmJmlzLnN0cmluZyh0LnZhbHVlKX0sKGtvfHwoa289e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiEhdCYmaXMub2JqZWN0TGl0ZXJhbCh0KSYmKGdvLmlzKHQuY29udGVudHMpfHxMby5pcyh0LmNvbnRlbnRzKXx8aXMudHlwZWRBcnJheSh0LmNvbnRlbnRzLExvLmlzKSkmJih2b2lkIDA9PT1lLnJhbmdlfHxpaS5pcyhlLnJhbmdlKSl9LChSb3x8KFJvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/e2xhYmVsOmUsZG9jdW1lbnRhdGlvbjp0fTp7bGFiZWw6ZX19LChUb3x8KFRvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bci0yXT1hcmd1bWVudHNbcl07dmFyIGk9e2xhYmVsOmV9O3JldHVybiBpcy5kZWZpbmVkKHQpJiYoaS5kb2N1bWVudGF0aW9uPXQpLGlzLmRlZmluZWQobik/aS5wYXJhbWV0ZXJzPW46aS5wYXJhbWV0ZXJzPVtdLGl9LChNbz1Pb3x8KE9vPXt9KSkuVGV4dD0xLE1vLlJlYWQ9MixNby5Xcml0ZT0zLChJb3x8KElvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e3JhbmdlOmV9O3JldHVybiBpcy5udW1iZXIodCkmJihuLmtpbmQ9dCksbn0sKEZvPVBvfHwoUG89e30pKS5GaWxlPTEsRm8uTW9kdWxlPTIsRm8uTmFtZXNwYWNlPTMsRm8uUGFja2FnZT00LEZvLkNsYXNzPTUsRm8uTWV0aG9kPTYsRm8uUHJvcGVydHk9NyxGby5GaWVsZD04LEZvLkNvbnN0cnVjdG9yPTksRm8uRW51bT0xMCxGby5JbnRlcmZhY2U9MTEsRm8uRnVuY3Rpb249MTIsRm8uVmFyaWFibGU9MTMsRm8uQ29uc3RhbnQ9MTQsRm8uU3RyaW5nPTE1LEZvLk51bWJlcj0xNixGby5Cb29sZWFuPTE3LEZvLkFycmF5PTE4LEZvLk9iamVjdD0xOSxGby5LZXk9MjAsRm8uTnVsbD0yMSxGby5FbnVtTWVtYmVyPTIyLEZvLlN0cnVjdD0yMyxGby5FdmVudD0yNCxGby5PcGVyYXRvcj0yNSxGby5UeXBlUGFyYW1ldGVyPTI2LChWb3x8KFZvPXt9KSkuRGVwcmVjYXRlZD0xLChEb3x8KERvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89e25hbWU6ZSxraW5kOnQsbG9jYXRpb246e3VyaTpyLHJhbmdlOm59fTtyZXR1cm4gaSYmKG8uY29udGFpbmVyTmFtZT1pKSxvfSwoam89S298fChLbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIHM9e25hbWU6ZSxkZXRhaWw6dCxraW5kOm4scmFuZ2U6cixzZWxlY3Rpb25SYW5nZTppfTtyZXR1cm4gdm9pZCAwIT09byYmKHMuY2hpbGRyZW49byksc30sam8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmaXMuc3RyaW5nKHQubmFtZSkmJmlzLm51bWJlcih0LmtpbmQpJiZpaS5pcyh0LnJhbmdlKSYmaWkuaXModC5zZWxlY3Rpb25SYW5nZSkmJih2b2lkIDA9PT10LmRldGFpbHx8aXMuc3RyaW5nKHQuZGV0YWlsKSkmJih2b2lkIDA9PT10LmRlcHJlY2F0ZWR8fGlzLmJvb2xlYW4odC5kZXByZWNhdGVkKSkmJih2b2lkIDA9PT10LmNoaWxkcmVufHxBcnJheS5pc0FycmF5KHQuY2hpbGRyZW4pKSYmKHZvaWQgMD09PXQudGFnc3x8QXJyYXkuaXNBcnJheSh0LnRhZ3MpKX0sKEJvPXFvfHwocW89e30pKS5FbXB0eT0iIixCby5RdWlja0ZpeD0icXVpY2tmaXgiLEJvLlJlZmFjdG9yPSJyZWZhY3RvciIsQm8uUmVmYWN0b3JFeHRyYWN0PSJyZWZhY3Rvci5leHRyYWN0IixCby5SZWZhY3RvcklubGluZT0icmVmYWN0b3IuaW5saW5lIixCby5SZWZhY3RvclJld3JpdGU9InJlZmFjdG9yLnJld3JpdGUiLEJvLlNvdXJjZT0ic291cmNlIixCby5Tb3VyY2VPcmdhbml6ZUltcG9ydHM9InNvdXJjZS5vcmdhbml6ZUltcG9ydHMiLEJvLlNvdXJjZUZpeEFsbD0ic291cmNlLmZpeEFsbCIsKCRvPVVvfHwoVW89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17ZGlhZ25vc3RpY3M6ZX07cmV0dXJuIG51bGwhPXQmJihuLm9ubHk9dCksbn0sJG8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaXMuZGVmaW5lZCh0KSYmaXMudHlwZWRBcnJheSh0LmRpYWdub3N0aWNzLExpLmlzKSYmKHZvaWQgMD09PXQub25seXx8aXMudHlwZWRBcnJheSh0Lm9ubHksaXMuc3RyaW5nKSl9LChIbz1Xb3x8KFdvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17dGl0bGU6ZX0saT0hMDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KGk9ITEsci5raW5kPXQpOmtpLmlzKHQpP3IuY29tbWFuZD10OnIuZWRpdD10LGkmJnZvaWQgMCE9PW4mJihyLmtpbmQ9bikscn0sSG8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmaXMuc3RyaW5nKHQudGl0bGUpJiYodm9pZCAwPT09dC5kaWFnbm9zdGljc3x8aXMudHlwZWRBcnJheSh0LmRpYWdub3N0aWNzLExpLmlzKSkmJih2b2lkIDA9PT10LmtpbmR8fGlzLnN0cmluZyh0LmtpbmQpKSYmKHZvaWQgMCE9PXQuZWRpdHx8dm9pZCAwIT09dC5jb21tYW5kKSYmKHZvaWQgMD09PXQuY29tbWFuZHx8a2kuaXModC5jb21tYW5kKSkmJih2b2lkIDA9PT10LmlzUHJlZmVycmVkfHxpcy5ib29sZWFuKHQuaXNQcmVmZXJyZWQpKSYmKHZvaWQgMD09PXQuZWRpdHx8SGkuaXModC5lZGl0KSl9LChHbz16b3x8KHpvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e3JhbmdlOmV9O3JldHVybiBpcy5kZWZpbmVkKHQpJiYobi5kYXRhPXQpLG59LEdvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLmRlZmluZWQodCkmJmlpLmlzKHQucmFuZ2UpJiYoaXMudW5kZWZpbmVkKHQuY29tbWFuZCl8fGtpLmlzKHQuY29tbWFuZCkpfSwoWG89Sm98fChKbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0YWJTaXplOmUsaW5zZXJ0U3BhY2VzOnR9fSxYby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBpcy5kZWZpbmVkKHQpJiZpcy51aW50ZWdlcih0LnRhYlNpemUpJiZpcy5ib29sZWFuKHQuaW5zZXJ0U3BhY2VzKX0sKFlvPVpvfHwoWm89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTplLHRhcmdldDp0LGRhdGE6bn19LFlvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGlzLmRlZmluZWQodCkmJmlpLmlzKHQucmFuZ2UpJiYoaXMudW5kZWZpbmVkKHQudGFyZ2V0KXx8aXMuc3RyaW5nKHQudGFyZ2V0KSl9LChlcz1Rb3x8KFFvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUscGFyZW50OnR9fSxlcy5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB2b2lkIDAhPT10JiZpaS5pcyh0LnJhbmdlKSYmKHZvaWQgMD09PXQucGFyZW50fHxlcy5pcyh0LnBhcmVudCkpfSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7dmFyIHI9ZS5sZW5ndGgvMnwwLGk9ZS5zbGljZSgwLHIpLG89ZS5zbGljZShyKTt0KGksbiksdChvLG4pO2Zvcih2YXIgcz0wLGE9MCxsPTA7czxpLmxlbmd0aCYmYTxvLmxlbmd0aDspe3ZhciB1PW4oaVtzXSxvW2FdKTtlW2wrK109dTw9MD9pW3MrK106b1thKytdfWZvcig7czxpLmxlbmd0aDspZVtsKytdPWlbcysrXTtmb3IoO2E8by5sZW5ndGg7KWVbbCsrXT1vW2ErK107cmV0dXJuIGV9ZS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyBhcyhlLHQsbixyKX0sZS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiEhKGlzLmRlZmluZWQodCkmJmlzLnN0cmluZyh0LnVyaSkmJihpcy51bmRlZmluZWQodC5sYW5ndWFnZUlkKXx8aXMuc3RyaW5nKHQubGFuZ3VhZ2VJZCkpJiZpcy51aW50ZWdlcih0LmxpbmVDb3VudCkmJmlzLmZ1bmModC5nZXRUZXh0KSYmaXMuZnVuYyh0LnBvc2l0aW9uQXQpJiZpcy5mdW5jKHQub2Zmc2V0QXQpKX0sZS5hcHBseUVkaXRzPWZ1bmN0aW9uKGUsbil7Zm9yKHZhciByPWUuZ2V0VGV4dCgpLGk9dChuLChmdW5jdGlvbihlLHQpe3ZhciBuPWUucmFuZ2Uuc3RhcnQubGluZS10LnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIDA9PT1uP2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOm59KSksbz1yLmxlbmd0aCxzPWkubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBhPWlbc10sbD1lLm9mZnNldEF0KGEucmFuZ2Uuc3RhcnQpLHU9ZS5vZmZzZXRBdChhLnJhbmdlLmVuZCk7aWYoISh1PD1vKSl0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTtyPXIuc3Vic3RyaW5nKDAsbCkrYS5uZXdUZXh0K3Iuc3Vic3RyaW5nKHUsci5sZW5ndGgpLG89bH1yZXR1cm4gcn19KHRzfHwodHM9e30pKTt2YXIgaXMsb3Msc3MsYXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ1cmkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXJpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGFuZ3VhZ2VJZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmVyc2lvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxuPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyh0LG4pfXJldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLl9jb250ZW50PWUudGV4dCx0aGlzLl92ZXJzaW9uPXQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfSxlLnByb3RvdHlwZS5nZXRMaW5lT2Zmc2V0cz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuX2xpbmVPZmZzZXRzKXtmb3IodmFyIGU9W10sdD10aGlzLl9jb250ZW50LG49ITAscj0wO3I8dC5sZW5ndGg7cisrKXtuJiYoZS5wdXNoKHIpLG49ITEpO3ZhciBpPXQuY2hhckF0KHIpO249IlxyIj09PWl8fCJcbiI9PT1pLCJcciI9PT1pJiZyKzE8dC5sZW5ndGgmJiJcbiI9PT10LmNoYXJBdChyKzEpJiZyKyt9biYmdC5sZW5ndGg+MCYmZS5wdXNoKHQubGVuZ3RoKSx0aGlzLl9saW5lT2Zmc2V0cz1lfXJldHVybiB0aGlzLl9saW5lT2Zmc2V0c30sZS5wcm90b3R5cGUucG9zaXRpb25BdD1mdW5jdGlvbihlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAscj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm4gbmkuY3JlYXRlKDAsZSk7Zm9yKDtuPHI7KXt2YXIgaT1NYXRoLmZsb29yKChuK3IpLzIpO3RbaV0+ZT9yPWk6bj1pKzF9dmFyIG89bi0xO3JldHVybiBuaS5jcmVhdGUobyxlLXRbb10pfSxlLnByb3RvdHlwZS5vZmZzZXRBdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7dmFyIG49dFtlLmxpbmVdLHI9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsciksbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGluZUNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZX0oKTtvcz1pc3x8KGlzPXt9KSxzcz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLG9zLmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWV9LG9zLnVuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZX0sb3MuYm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZX0sb3Muc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09c3MuY2FsbChlKX0sb3MubnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09c3MuY2FsbChlKX0sb3MubnVtYmVyUmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09c3MuY2FsbChlKSYmdDw9ZSYmZTw9bn0sb3MuaW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PXNzLmNhbGwoZSkmJi0yMTQ3NDgzNjQ4PD1lJiZlPD0yMTQ3NDgzNjQ3fSxvcy51aW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PXNzLmNhbGwoZSkmJjA8PWUmJmU8PTIxNDc0ODM2NDd9LG9zLmZ1bmM9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PXNzLmNhbGwoZSl9LG9zLm9iamVjdExpdGVyYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9LG9zLnR5cGVkQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmZS5ldmVyeSh0KX07dmFyIGxzLHVzLGNzLGhzLGRzLGZzPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dChlKXtpZihlKXtjb25zdCB0PXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSx0KXtmb3IobGV0IHQgb2YgZSlpZihmcy5pc0luY3JlbWVudGFsKHQpKXtjb25zdCBlPXBzKHQucmFuZ2UpLG49dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxyPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3RoaXMuX2NvbnRlbnQ9dGhpcy5fY29udGVudC5zdWJzdHJpbmcoMCxuKSt0LnRleHQrdGhpcy5fY29udGVudC5zdWJzdHJpbmcocix0aGlzLl9jb250ZW50Lmxlbmd0aCk7Y29uc3QgaT1NYXRoLm1heChlLnN0YXJ0LmxpbmUsMCksbz1NYXRoLm1heChlLmVuZC5saW5lLDApO2xldCBzPXRoaXMuX2xpbmVPZmZzZXRzO2NvbnN0IGE9Z3ModC50ZXh0LCExLG4pO2lmKG8taT09PWEubGVuZ3RoKWZvcihsZXQgZT0wLHQ9YS5sZW5ndGg7ZTx0O2UrKylzW2UraSsxXT1hW2VdO2Vsc2UgYS5sZW5ndGg8MWU0P3Muc3BsaWNlKGkrMSxvLWksLi4uYSk6dGhpcy5fbGluZU9mZnNldHM9cz1zLnNsaWNlKDAsaSsxKS5jb25jYXQoYSxzLnNsaWNlKG8rMSkpO2NvbnN0IGw9dC50ZXh0Lmxlbmd0aC0oci1uKTtpZigwIT09bClmb3IobGV0IGU9aSsxK2EubGVuZ3RoLHQ9cy5sZW5ndGg7ZTx0O2UrKylzW2VdPXNbZV0rbH1lbHNle2lmKCFmcy5pc0Z1bGwodCkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNoYW5nZSBldmVudCByZWNlaXZlZCIpO3RoaXMuX2NvbnRlbnQ9dC50ZXh0LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH10aGlzLl92ZXJzaW9uPXR9Z2V0TGluZU9mZnNldHMoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fbGluZU9mZnNldHMmJih0aGlzLl9saW5lT2Zmc2V0cz1ncyh0aGlzLl9jb250ZW50LCEwKSksdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAscj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm57bGluZTowLGNoYXJhY3RlcjplfTtmb3IoO248cjspe2xldCBpPU1hdGguZmxvb3IoKG4rcikvMik7dFtpXT5lP3I9aTpuPWkrMX1sZXQgaT1uLTE7cmV0dXJue2xpbmU6aSxjaGFyYWN0ZXI6ZS10W2ldfX1vZmZzZXRBdChlKXtsZXQgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7bGV0IG49dFtlLmxpbmVdLHI9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsciksbil9Z2V0IGxpbmVDb3VudCgpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofXN0YXRpYyBpc0luY3JlbWVudGFsKGUpe2xldCB0PWU7cmV0dXJuIG51bGwhPXQmJiJzdHJpbmciPT10eXBlb2YgdC50ZXh0JiZ2b2lkIDAhPT10LnJhbmdlJiYodm9pZCAwPT09dC5yYW5nZUxlbmd0aHx8Im51bWJlciI9PXR5cGVvZiB0LnJhbmdlTGVuZ3RoKX1zdGF0aWMgaXNGdWxsKGUpe2xldCB0PWU7cmV0dXJuIG51bGwhPXQmJiJzdHJpbmciPT10eXBlb2YgdC50ZXh0JiZ2b2lkIDA9PT10LnJhbmdlJiZ2b2lkIDA9PT10LnJhbmdlTGVuZ3RofX07ZnVuY3Rpb24gbXMoZSx0KXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCBuPWUubGVuZ3RoLzJ8MCxyPWUuc2xpY2UoMCxuKSxpPWUuc2xpY2Uobik7bXMocix0KSxtcyhpLHQpO2xldCBvPTAscz0wLGE9MDtmb3IoO288ci5sZW5ndGgmJnM8aS5sZW5ndGg7KXtsZXQgbj10KHJbb10saVtzXSk7ZVthKytdPW48PTA/cltvKytdOmlbcysrXX1mb3IoO288ci5sZW5ndGg7KWVbYSsrXT1yW28rK107Zm9yKDtzPGkubGVuZ3RoOyllW2ErK109aVtzKytdO3JldHVybiBlfWZ1bmN0aW9uIGdzKGUsdCxuPTApe2NvbnN0IHI9dD9bbl06W107Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBpPWUuY2hhckNvZGVBdCh0KTsxMyE9PWkmJjEwIT09aXx8KDEzPT09aSYmdCsxPGUubGVuZ3RoJiYxMD09PWUuY2hhckNvZGVBdCh0KzEpJiZ0Kyssci5wdXNoKG4rdCsxKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gcHMoZSl7Y29uc3QgdD1lLnN0YXJ0LG49ZS5lbmQ7cmV0dXJuIHQubGluZT5uLmxpbmV8fHQubGluZT09PW4ubGluZSYmdC5jaGFyYWN0ZXI+bi5jaGFyYWN0ZXI/e3N0YXJ0Om4sZW5kOnR9OmV9ZnVuY3Rpb24gdnMoZSl7Y29uc3QgdD1wcyhlLnJhbmdlKTtyZXR1cm4gdCE9PWUucmFuZ2U/e25ld1RleHQ6ZS5uZXdUZXh0LHJhbmdlOnR9OmV9ZnVuY3Rpb24gYnMoZSx0LC4uLm4pe3JldHVybiBmdW5jdGlvbihlLHQpe2xldCBuO3JldHVybiBuPTA9PT10Lmxlbmd0aD9lOmUucmVwbGFjZSgvXHsoXGQrKVx9L2csKChlLG4pPT57bGV0IHI9blswXTtyZXR1cm4gdm9pZCAwIT09dFtyXT90W3JdOmV9KSksbn0odCxuKX1mdW5jdGlvbiB5cyhlKXtyZXR1cm4gYnN9KHVzPWxzfHwobHM9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyBmcyhlLHQsbixyKX0sdXMudXBkYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZihlIGluc3RhbmNlb2YgZnMpcmV0dXJuIGUudXBkYXRlKHQsbiksZTt0aHJvdyBuZXcgRXJyb3IoIlRleHREb2N1bWVudC51cGRhdGU6IGRvY3VtZW50IG11c3QgYmUgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIil9LHVzLmFwcGx5RWRpdHM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmdldFRleHQoKSxyPW1zKHQubWFwKHZzKSwoKGUsdCk9PntsZXQgbj1lLnJhbmdlLnN0YXJ0LmxpbmUtdC5yYW5nZS5zdGFydC5saW5lO3JldHVybiAwPT09bj9lLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci10LnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpufSkpLGk9MDtjb25zdCBvPVtdO2Zvcihjb25zdCB0IG9mIHIpe2xldCByPWUub2Zmc2V0QXQodC5yYW5nZS5zdGFydCk7aWYocjxpKXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO3I+aSYmby5wdXNoKG4uc3Vic3RyaW5nKGkscikpLHQubmV3VGV4dC5sZW5ndGgmJm8ucHVzaCh0Lm5ld1RleHQpLGk9ZS5vZmZzZXRBdCh0LnJhbmdlLmVuZCl9cmV0dXJuIG8ucHVzaChuLnN1YnN0cihpKSksby5qb2luKCIiKX0sKGhzPWNzfHwoY3M9e30pKVtocy5VbmRlZmluZWQ9MF09IlVuZGVmaW5lZCIsaHNbaHMuRW51bVZhbHVlTWlzbWF0Y2g9MV09IkVudW1WYWx1ZU1pc21hdGNoIixoc1tocy5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIixoc1tocy5VbmV4cGVjdGVkRW5kT2ZDb21tZW50PTI1N109IlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLGhzW2hzLlVuZXhwZWN0ZWRFbmRPZlN0cmluZz0yNThdPSJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLGhzW2hzLlVuZXhwZWN0ZWRFbmRPZk51bWJlcj0yNTldPSJVbmV4cGVjdGVkRW5kT2ZOdW1iZXIiLGhzW2hzLkludmFsaWRVbmljb2RlPTI2MF09IkludmFsaWRVbmljb2RlIixoc1tocy5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyPTI2MV09IkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLGhzW2hzLkludmFsaWRDaGFyYWN0ZXI9MjYyXT0iSW52YWxpZENoYXJhY3RlciIsaHNbaHMuUHJvcGVydHlFeHBlY3RlZD01MTNdPSJQcm9wZXJ0eUV4cGVjdGVkIixoc1tocy5Db21tYUV4cGVjdGVkPTUxNF09IkNvbW1hRXhwZWN0ZWQiLGhzW2hzLkNvbG9uRXhwZWN0ZWQ9NTE1XT0iQ29sb25FeHBlY3RlZCIsaHNbaHMuVmFsdWVFeHBlY3RlZD01MTZdPSJWYWx1ZUV4cGVjdGVkIixoc1tocy5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZD01MTddPSJDb21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCIsaHNbaHMuQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZD01MThdPSJDb21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkIixoc1tocy5UcmFpbGluZ0NvbW1hPTUxOV09IlRyYWlsaW5nQ29tbWEiLGhzW2hzLkR1cGxpY2F0ZUtleT01MjBdPSJEdXBsaWNhdGVLZXkiLGhzW2hzLkNvbW1lbnROb3RQZXJtaXR0ZWQ9NTIxXT0iQ29tbWVudE5vdFBlcm1pdHRlZCIsaHNbaHMuU2NoZW1hUmVzb2x2ZUVycm9yPTc2OF09IlNjaGVtYVJlc29sdmVFcnJvciIsKGRzfHwoZHM9e30pKS5MQVRFU1Q9e3RleHREb2N1bWVudDp7Y29tcGxldGlvbjp7Y29tcGxldGlvbkl0ZW06e2RvY3VtZW50YXRpb25Gb3JtYXQ6W2ZvLk1hcmtkb3duLGZvLlBsYWluVGV4dF0sY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnQ6ITB9fX19O3ZhciBDcyxfcyxTcyx3cz0oQ3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oQ3M9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfUNzKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSksQXM9eXMoKSx4cz17ImNvbG9yLWhleCI6e2Vycm9yTWVzc2FnZTpBcygiY29sb3JIZXhGb3JtYXRXYXJuaW5nIiwiSW52YWxpZCBjb2xvciBmb3JtYXQuIFVzZSAjUkdCLCAjUkdCQSwgI1JSR0dCQiBvciAjUlJHR0JCQUEuIikscGF0dGVybjovXiMoWzAtOUEtRmEtZl17Myw0fXwoWzAtOUEtRmEtZl17Mn0pezMsNH0pJC99LCJkYXRlLXRpbWUiOntlcnJvck1lc3NhZ2U6QXMoImRhdGVUaW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUtdGltZS4iKSxwYXR0ZXJuOi9eKFxkezR9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdWzAtOV18M1swMV0pVChbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZGF0ZTp7ZXJyb3JNZXNzYWdlOkFzKCJkYXRlRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKSQvaX0sdGltZTp7ZXJyb3JNZXNzYWdlOkFzKCJ0aW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IHRpbWUuIikscGF0dGVybjovXihbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZW1haWw6e2Vycm9yTWVzc2FnZTpBcygiZW1haWxGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBlLW1haWwgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aMC05LV0rXC4pK1thLXpBLVpdezIsfSkpJC99LGhvc3RuYW1lOntlcnJvck1lc3NhZ2U6QXMoImhvc3RuYW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBob3N0bmFtZS4iKSxwYXR0ZXJuOi9eKD89LnsxLDI1M31cLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcLj8kL2l9LGlwdjQ6e2Vycm9yTWVzc2FnZTpBcygiaXB2NEZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIElQdjQgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZClcLil7M30oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSQvfSxpcHY2OntlcnJvck1lc3NhZ2U6QXMoImlwdjZGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBJUHY2IGFkZHJlc3MuIikscGF0dGVybjovXigoKFswLTlhLWZdezEsNH06KXs3fShbMC05YS1mXXsxLDR9fDopKXwoKFswLTlhLWZdezEsNH06KXs2fSg6WzAtOWEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezV9KCgoOlswLTlhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezR9KCgoOlswLTlhLWZdezEsNH0pezEsM30pfCgoOlswLTlhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXszfSgoKDpbMC05YS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05YS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezJ9KCgoOlswLTlhLWZdezEsNH0pezEsNX0pfCgoOlswLTlhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7MX0oKCg6WzAtOWEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoOigoKDpbMC05YS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05YS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpKSQvaX19LEVzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09biYmKG49MCksdGhpcy5vZmZzZXQ9dCx0aGlzLmxlbmd0aD1uLHRoaXMucGFyZW50PWV9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0eXBlOiAiK3RoaXMudHlwZSsiICgiK3RoaXMub2Zmc2V0KyIvIit0aGlzLmxlbmd0aCsiKSIrKHRoaXMucGFyZW50PyIgcGFyZW50OiB7Iit0aGlzLnBhcmVudC50b1N0cmluZygpKyJ9IjoiIil9LGV9KCksTHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIudHlwZT0ibnVsbCIsci52YWx1ZT1udWxsLHJ9cmV0dXJuIHdzKHQsZSksdH0oRXMpLE5zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQscil8fHRoaXM7cmV0dXJuIGkudHlwZT0iYm9vbGVhbiIsaS52YWx1ZT1uLGl9cmV0dXJuIHdzKHQsZSksdH0oRXMpLGtzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9ImFycmF5IixyLml0ZW1zPVtdLHJ9cmV0dXJuIHdzKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZW1zfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KEVzKSxScz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJudW1iZXIiLHIuaXNJbnRlZ2VyPSEwLHIudmFsdWU9TnVtYmVyLk5hTixyfXJldHVybiB3cyh0LGUpLHR9KEVzKSxUcz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyKXt2YXIgaT1lLmNhbGwodGhpcyx0LG4scil8fHRoaXM7cmV0dXJuIGkudHlwZT0ic3RyaW5nIixpLnZhbHVlPSIiLGl9cmV0dXJuIHdzKHQsZSksdH0oRXMpLE9zPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIGkudHlwZT0icHJvcGVydHkiLGkuY29sb25PZmZzZXQ9LTEsaS5rZXlOb2RlPXIsaX1yZXR1cm4gd3ModCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVOb2RlP1t0aGlzLmtleU5vZGUsdGhpcy52YWx1ZU5vZGVdOlt0aGlzLmtleU5vZGVdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KEVzKSxNcz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJvYmplY3QiLHIucHJvcGVydGllcz1bXSxyfXJldHVybiB3cyh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wZXJ0aWVzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KEVzKTtmdW5jdGlvbiBJcyhlKXtyZXR1cm4gdG8oZSk/ZT97fTp7bm90Ont9fTplfShTcz1fc3x8KF9zPXt9KSlbU3MuS2V5PTBdPSJLZXkiLFNzW1NzLkVudW09MV09IkVudW0iO3ZhciBQcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT1lJiYoZT0tMSksdGhpcy5mb2N1c09mZnNldD1lLHRoaXMuZXhjbHVkZT10LHRoaXMuc2NoZW1hcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuc2NoZW1hcy5wdXNoKGUpfSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnNjaGVtYXMsZS5zY2hlbWFzKX0sZS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbihlKXtyZXR1cm4oLTE9PT10aGlzLmZvY3VzT2Zmc2V0fHxqcyhlLHRoaXMuZm9jdXNPZmZzZXQpKSYmZSE9PXRoaXMuZXhjbHVkZX0sZS5wcm90b3R5cGUubmV3U3ViPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKC0xLHRoaXMuZXhjbHVkZSl9LGV9KCksRnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNjaGVtYXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7fSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXt9LGUucHJvdG90eXBlLmluY2x1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuITB9LGUucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmluc3RhbmNlPW5ldyBlLGV9KCksVnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5wcm9ibGVtcz1bXSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzPTAsdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzPTAsdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzPTAsdGhpcy5lbnVtVmFsdWVNYXRjaD0hMSx0aGlzLmVudW1WYWx1ZXM9dm9pZCAwfXJldHVybiBlLnByb3RvdHlwZS5oYXNQcm9ibGVtcz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5wcm9ibGVtcy5sZW5ndGh9LGUucHJvdG90eXBlLm1lcmdlQWxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZTt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTt0aGlzLm1lcmdlKHIpfX0sZS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24oZSl7dGhpcy5wcm9ibGVtcz10aGlzLnByb2JsZW1zLmNvbmNhdChlLnByb2JsZW1zKX0sZS5wcm90b3R5cGUubWVyZ2VFbnVtVmFsdWVzPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmVudW1WYWx1ZU1hdGNoJiYhZS5lbnVtVmFsdWVNYXRjaCYmdGhpcy5lbnVtVmFsdWVzJiZlLmVudW1WYWx1ZXMpe3RoaXMuZW51bVZhbHVlcz10aGlzLmVudW1WYWx1ZXMuY29uY2F0KGUuZW51bVZhbHVlcyk7Zm9yKHZhciB0PTAsbj10aGlzLnByb2JsZW1zO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO3IuY29kZT09PWNzLkVudW1WYWx1ZU1pc21hdGNoJiYoci5tZXNzYWdlPUFzKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0aGlzLmVudW1WYWx1ZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9KSkuam9pbigiLCAiKSkpfX19LGUucHJvdG90eXBlLm1lcmdlUHJvcGVydHlNYXRjaD1mdW5jdGlvbihlKXt0aGlzLm1lcmdlKGUpLHRoaXMucHJvcGVydGllc01hdGNoZXMrKywoZS5lbnVtVmFsdWVNYXRjaHx8IWUuaGFzUHJvYmxlbXMoKSYmZS5wcm9wZXJ0aWVzTWF0Y2hlcykmJnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrLGUuZW51bVZhbHVlTWF0Y2gmJmUuZW51bVZhbHVlcyYmMT09PWUuZW51bVZhbHVlcy5sZW5ndGgmJnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcysrfSxlLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzUHJvYmxlbXMoKTtyZXR1cm4gdCE9PWUuaGFzUHJvYmxlbXMoKT90Py0xOjE6dGhpcy5lbnVtVmFsdWVNYXRjaCE9PWUuZW51bVZhbHVlTWF0Y2g/ZS5lbnVtVmFsdWVNYXRjaD8tMToxOnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcyE9PWUucHJpbWFyeVZhbHVlTWF0Y2hlcz90aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMtZS5wcmltYXJ5VmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyE9PWUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcz90aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMtZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc01hdGNoZXMtZS5wcm9wZXJ0aWVzTWF0Y2hlc30sZX0oKTtmdW5jdGlvbiBEcyhlKXtyZXR1cm4gWmkoZSl9ZnVuY3Rpb24gS3MoZSl7cmV0dXJuIFhpKGUpfWZ1bmN0aW9uIGpzKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49ITEpLHQ+PWUub2Zmc2V0JiZ0PGUub2Zmc2V0K2UubGVuZ3RofHxuJiZ0PT09ZS5vZmZzZXQrZS5sZW5ndGh9dmFyIHFzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPVtdKSx0aGlzLnJvb3Q9ZSx0aGlzLnN5bnRheEVycm9ycz10LHRoaXMuY29tbWVudHM9bn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Tm9kZUZyb21PZmZzZXQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD0hMSksdGhpcy5yb290KXJldHVybiBKaSh0aGlzLnJvb3QsZSx0KX0sZS5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5yb290KXt2YXIgdD1mdW5jdGlvbihuKXt2YXIgcj1lKG4pLGk9bi5jaGlsZHJlbjtpZihBcnJheS5pc0FycmF5KGkpKWZvcih2YXIgbz0wO288aS5sZW5ndGgmJnI7bysrKXI9dChpW29dKTtyZXR1cm4gcn07dCh0aGlzLnJvb3QpfX0sZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMD09PW4mJihuPVNpLldhcm5pbmcpLHRoaXMucm9vdCYmdCl7dmFyIHI9bmV3IFZzO3JldHVybiBCcyh0aGlzLnJvb3QsdCxyLEZzLmluc3RhbmNlKSxyLnByb2JsZW1zLm1hcCgoZnVuY3Rpb24odCl7dmFyIHIsaT1paS5jcmVhdGUoZS5wb3NpdGlvbkF0KHQubG9jYXRpb24ub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5sb2NhdGlvbi5vZmZzZXQrdC5sb2NhdGlvbi5sZW5ndGgpKTtyZXR1cm4gTGkuY3JlYXRlKGksdC5tZXNzYWdlLG51bGwhPT0ocj10LnNldmVyaXR5KSYmdm9pZCAwIT09cj9yOm4sdC5jb2RlKX0pKX19LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09dCYmKHQ9LTEpO3ZhciByPW5ldyBQcyh0LG4pO3JldHVybiB0aGlzLnJvb3QmJmUmJkJzKHRoaXMucm9vdCxlLG5ldyBWcyxyKSxyLnNjaGVtYXN9LGV9KCk7ZnVuY3Rpb24gQnMoZSx0LG4scil7aWYoZSYmci5pbmNsdWRlKGUpKXt2YXIgaT1lO3N3aXRjaChpLnR5cGUpe2Nhc2Uib2JqZWN0IjohZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpPU9iamVjdC5jcmVhdGUobnVsbCksbz1bXSxzPTAsYT1lLnByb3BlcnRpZXM7czxhLmxlbmd0aDtzKyspe2lbSz0ocD1hW3NdKS5rZXlOb2RlLnZhbHVlXT1wLnZhbHVlTm9kZSxvLnB1c2goSyl9aWYoQXJyYXkuaXNBcnJheSh0LnJlcXVpcmVkKSlmb3IodmFyIGw9MCx1PXQucmVxdWlyZWQ7bDx1Lmxlbmd0aDtsKyspe2lmKCFpW3c9dVtsXV0pe3ZhciBjPWUucGFyZW50JiYicHJvcGVydHkiPT09ZS5wYXJlbnQudHlwZSYmZS5wYXJlbnQua2V5Tm9kZSxoPWM/e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9OntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOjF9O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246aCxtZXNzYWdlOkFzKCJNaXNzaW5nUmVxdWlyZWRQcm9wV2FybmluZyIsJ01pc3NpbmcgcHJvcGVydHkgInswfSIuJyx3KX0pfX12YXIgZD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9by5pbmRleE9mKGUpO3Q+PTA7KW8uc3BsaWNlKHQsMSksdD1vLmluZGV4T2YoZSl9O2lmKHQucHJvcGVydGllcylmb3IodmFyIGY9MCxtPU9iamVjdC5rZXlzKHQucHJvcGVydGllcyk7ZjxtLmxlbmd0aDtmKyspe2Qodz1tW2ZdKTt2YXIgZz10LnByb3BlcnRpZXNbd107aWYoaz1pW3ddKWlmKHRvKGcpKWlmKGcpbi5wcm9wZXJ0aWVzTWF0Y2hlcysrLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2V7dmFyIHA9ay5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEFzKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLHcpfSl9ZWxzZSBCcyhrLGcsRT1uZXcgVnMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2goRSl9aWYodC5wYXR0ZXJuUHJvcGVydGllcylmb3IodmFyIHY9MCxiPU9iamVjdC5rZXlzKHQucGF0dGVyblByb3BlcnRpZXMpO3Y8Yi5sZW5ndGg7disrKWZvcih2YXIgeT1iW3ZdLEM9cm8oeSksXz0wLFM9by5zbGljZSgwKTtfPFMubGVuZ3RoO18rKyl7dmFyIHc9U1tfXTtpZihudWxsPT1DP3ZvaWQgMDpDLnRlc3QodykpaWYoZCh3KSxrPWlbd10paWYodG8oZz10LnBhdHRlcm5Qcm9wZXJ0aWVzW3ldKSlpZihnKW4ucHJvcGVydGllc01hdGNoZXMrKyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKztlbHNle3A9ay5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEFzKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLHcpfSl9ZWxzZSBCcyhrLGcsRT1uZXcgVnMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2goRSl9aWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKWZvcih2YXIgQT0wLHg9bztBPHgubGVuZ3RoO0ErKyl7aWYoaz1pW3c9eFtBXV0pe3ZhciBFPW5ldyBWcztCcyhrLHQuYWRkaXRpb25hbFByb3BlcnRpZXMsRSxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaChFKX19ZWxzZSBpZighMT09PXQuYWRkaXRpb25hbFByb3BlcnRpZXMmJm8ubGVuZ3RoPjApZm9yKHZhciBMPTAsTj1vO0w8Ti5sZW5ndGg7TCsrKXt2YXIgaztpZihrPWlbdz1OW0xdXSl7cD1rLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6cC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8QXMoIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsdyl9KX19UWkodC5tYXhQcm9wZXJ0aWVzKSYmZS5wcm9wZXJ0aWVzLmxlbmd0aD50Lm1heFByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIk1heFByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBtb3JlIHByb3BlcnRpZXMgdGhhbiBsaW1pdCBvZiB7MH0uIix0Lm1heFByb3BlcnRpZXMpfSk7UWkodC5taW5Qcm9wZXJ0aWVzKSYmZS5wcm9wZXJ0aWVzLmxlbmd0aDx0Lm1pblByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIk1pblByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBmZXdlciBwcm9wZXJ0aWVzIHRoYW4gdGhlIHJlcXVpcmVkIG51bWJlciBvZiB7MH0iLHQubWluUHJvcGVydGllcyl9KTtpZih0LmRlcGVuZGVuY2llcylmb3IodmFyIFI9MCxUPU9iamVjdC5rZXlzKHQuZGVwZW5kZW5jaWVzKTtSPFQubGVuZ3RoO1IrKyl7aWYoaVtLPVRbUl1dKXt2YXIgTz10LmRlcGVuZGVuY2llc1tLXTtpZihBcnJheS5pc0FycmF5KE8pKWZvcih2YXIgTT0wLEk9TztNPEkubGVuZ3RoO00rKyl7dmFyIFA9SVtNXTtpW1BdP24ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrOm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIlJlcXVpcmVkRGVwZW5kZW50UHJvcFdhcm5pbmciLCJPYmplY3QgaXMgbWlzc2luZyBwcm9wZXJ0eSB7MH0gcmVxdWlyZWQgYnkgcHJvcGVydHkgezF9LiIsUCxLKX0pfWVsc2UgaWYoZz1JcyhPKSlCcyhlLGcsRT1uZXcgVnMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2goRSl9fXZhciBGPUlzKHQucHJvcGVydHlOYW1lcyk7aWYoRilmb3IodmFyIFY9MCxEPWUucHJvcGVydGllcztWPEQubGVuZ3RoO1YrKyl7dmFyIEs7KEs9RFtWXS5rZXlOb2RlKSYmQnMoSyxGLG4sRnMuaW5zdGFuY2UpfX0oaSx0LG4scik7YnJlYWs7Y2FzZSJhcnJheSI6IWZ1bmN0aW9uKGUsdCxuLHIpe2lmKEFycmF5LmlzQXJyYXkodC5pdGVtcykpe2Zvcih2YXIgaT10Lml0ZW1zLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9SXMoaVtvXSksYT1uZXcgVnM7KGQ9ZS5pdGVtc1tvXSk/KEJzKGQscyxhLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKGEpKTplLml0ZW1zLmxlbmd0aD49aS5sZW5ndGgmJm4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrfWlmKGUuaXRlbXMubGVuZ3RoPmkubGVuZ3RoKWlmKCJvYmplY3QiPT10eXBlb2YgdC5hZGRpdGlvbmFsSXRlbXMpZm9yKHZhciBsPWkubGVuZ3RoO2w8ZS5pdGVtcy5sZW5ndGg7bCsrKXthPW5ldyBWcztCcyhlLml0ZW1zW2xdLHQuYWRkaXRpb25hbEl0ZW1zLGEsciksbi5tZXJnZVByb3BlcnR5TWF0Y2goYSl9ZWxzZSExPT09dC5hZGRpdGlvbmFsSXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoImFkZGl0aW9uYWxJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMgYWNjb3JkaW5nIHRvIHNjaGVtYS4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsaS5sZW5ndGgpfSl9ZWxzZXt2YXIgdT1Jcyh0Lml0ZW1zKTtpZih1KWZvcih2YXIgYz0wLGg9ZS5pdGVtcztjPGgubGVuZ3RoO2MrKyl7dmFyIGQ7QnMoZD1oW2NdLHUsYT1uZXcgVnMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2goYSl9fXZhciBmPUlzKHQuY29udGFpbnMpO2lmKGYpe2UuaXRlbXMuc29tZSgoZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFZzO3JldHVybiBCcyhlLGYsdCxGcy5pbnN0YW5jZSksIXQuaGFzUHJvYmxlbXMoKX0pKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8QXMoInJlcXVpcmVkSXRlbU1pc3NpbmdXYXJuaW5nIiwiQXJyYXkgZG9lcyBub3QgY29udGFpbiByZXF1aXJlZCBpdGVtLiIpfSl9UWkodC5taW5JdGVtcykmJmUuaXRlbXMubGVuZ3RoPHQubWluSXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIm1pbkl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gZmV3IGl0ZW1zLiBFeHBlY3RlZCB7MH0gb3IgbW9yZS4iLHQubWluSXRlbXMpfSk7UWkodC5tYXhJdGVtcykmJmUuaXRlbXMubGVuZ3RoPnQubWF4SXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIm1heEl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcy4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsdC5tYXhJdGVtcyl9KTtpZighMD09PXQudW5pcXVlSXRlbXMpe3ZhciBtPURzKGUpO20uc29tZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCE9PW0ubGFzdEluZGV4T2YoZSl9KSkmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoInVuaXF1ZUl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyBkdXBsaWNhdGUgaXRlbXMuIil9KX19KGksdCxuLHIpO2JyZWFrO2Nhc2Uic3RyaW5nIjohZnVuY3Rpb24oZSx0LG4scil7UWkodC5taW5MZW5ndGgpJiZlLnZhbHVlLmxlbmd0aDx0Lm1pbkxlbmd0aCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpBcygibWluTGVuZ3RoV2FybmluZyIsIlN0cmluZyBpcyBzaG9ydGVyIHRoYW4gdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHswfS4iLHQubWluTGVuZ3RoKX0pO1FpKHQubWF4TGVuZ3RoKSYmZS52YWx1ZS5sZW5ndGg+dC5tYXhMZW5ndGgmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIm1heExlbmd0aFdhcm5pbmciLCJTdHJpbmcgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gbGVuZ3RoIG9mIHswfS4iLHQubWF4TGVuZ3RoKX0pO2lmKG89dC5wYXR0ZXJuLCJzdHJpbmciPT10eXBlb2Ygbyl7dmFyIGk9cm8odC5wYXR0ZXJuKTsobnVsbD09aT92b2lkIDA6aS50ZXN0KGUudmFsdWUpKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LnBhdHRlcm5FcnJvck1lc3NhZ2V8fHQuZXJyb3JNZXNzYWdlfHxBcygicGF0dGVybldhcm5pbmciLCdTdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIHBhdHRlcm4gb2YgInswfSIuJyx0LnBhdHRlcm4pfSl9dmFyIG87aWYodC5mb3JtYXQpc3dpdGNoKHQuZm9ybWF0KXtjYXNlInVyaSI6Y2FzZSJ1cmktcmVmZXJlbmNlIjp2YXIgcz12b2lkIDA7aWYoZS52YWx1ZSl7dmFyIGE9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8uZXhlYyhlLnZhbHVlKTthP2FbMl18fCJ1cmkiIT09dC5mb3JtYXR8fChzPUFzKCJ1cmlTY2hlbWVNaXNzaW5nIiwiVVJJIHdpdGggYSBzY2hlbWUgaXMgZXhwZWN0ZWQuIikpOnM9QXMoInVyaU1pc3NpbmciLCJVUkkgaXMgZXhwZWN0ZWQuIil9ZWxzZSBzPUFzKCJ1cmlFbXB0eSIsIlVSSSBleHBlY3RlZC4iKTtzJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQucGF0dGVybkVycm9yTWVzc2FnZXx8dC5lcnJvck1lc3NhZ2V8fEFzKCJ1cmlGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFVSSTogezB9IixzKX0pO2JyZWFrO2Nhc2UiY29sb3ItaGV4IjpjYXNlImRhdGUtdGltZSI6Y2FzZSJkYXRlIjpjYXNlInRpbWUiOmNhc2UiZW1haWwiOmNhc2UiaG9zdG5hbWUiOmNhc2UiaXB2NCI6Y2FzZSJpcHY2Ijp2YXIgbD14c1t0LmZvcm1hdF07ZS52YWx1ZSYmbC5wYXR0ZXJuLmV4ZWMoZS52YWx1ZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8bC5lcnJvck1lc3NhZ2V9KX19KGksdCxuKTticmVhaztjYXNlIm51bWJlciI6IWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWUudmFsdWU7ZnVuY3Rpb24gbyhlKXt2YXIgdCxuPS9eKC0/XGQrKSg/OlwuKFxkKykpPyg/OmUoWy0rXVxkKykpPyQvLmV4ZWMoZS50b1N0cmluZygpKTtyZXR1cm4gbiYme3ZhbHVlOk51bWJlcihuWzFdKyhuWzJdfHwiIikpLG11bHRpcGxpZXI6KChudWxsPT09KHQ9blsyXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKXx8MCktKHBhcnNlSW50KG5bM10pfHwwKX19aWYoUWkodC5tdWx0aXBsZU9mKSl7dmFyIHM9LTE7aWYoTnVtYmVyLmlzSW50ZWdlcih0Lm11bHRpcGxlT2YpKXM9aSV0Lm11bHRpcGxlT2Y7ZWxzZXt2YXIgYT1vKHQubXVsdGlwbGVPZiksbD1vKGkpO2lmKGEmJmwpe3ZhciB1PU1hdGgucG93KDEwLE1hdGguYWJzKGwubXVsdGlwbGllci1hLm11bHRpcGxpZXIpKTtsLm11bHRpcGxpZXI8YS5tdWx0aXBsaWVyP2wudmFsdWUqPXU6YS52YWx1ZSo9dSxzPWwudmFsdWUlYS52YWx1ZX19MCE9PXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIm11bHRpcGxlT2ZXYXJuaW5nIiwiVmFsdWUgaXMgbm90IGRpdmlzaWJsZSBieSB7MH0uIix0Lm11bHRpcGxlT2YpfSl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBRaSh0KT90OnRvKHQpJiZ0P2U6dm9pZCAwfWZ1bmN0aW9uIGgoZSx0KXtpZighdG8odCl8fCF0KXJldHVybiBlfXZhciBkPWModC5taW5pbXVtLHQuZXhjbHVzaXZlTWluaW11bSk7UWkoZCkmJmk8PWQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoImV4Y2x1c2l2ZU1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIGV4Y2x1c2l2ZSBtaW5pbXVtIG9mIHswfS4iLGQpfSk7dmFyIGY9Yyh0Lm1heGltdW0sdC5leGNsdXNpdmVNYXhpbXVtKTtRaShmKSYmaT49ZiYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpBcygiZXhjbHVzaXZlTWF4aW11bVdhcm5pbmciLCJWYWx1ZSBpcyBhYm92ZSB0aGUgZXhjbHVzaXZlIG1heGltdW0gb2YgezB9LiIsZil9KTt2YXIgbT1oKHQubWluaW11bSx0LmV4Y2x1c2l2ZU1pbmltdW0pO1FpKG0pJiZpPG0mJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIm1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIG1pbmltdW0gb2YgezB9LiIsbSl9KTt2YXIgZz1oKHQubWF4aW11bSx0LmV4Y2x1c2l2ZU1heGltdW0pO1FpKGcpJiZpPmcmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6QXMoIm1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIG1heGltdW0gb2YgezB9LiIsZyl9KX0oaSx0LG4pO2JyZWFrO2Nhc2UicHJvcGVydHkiOnJldHVybiBCcyhpLnZhbHVlTm9kZSx0LG4scil9IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gaS50eXBlPT09ZXx8ImludGVnZXIiPT09ZSYmIm51bWJlciI9PT1pLnR5cGUmJmkuaXNJbnRlZ2VyfUFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGUuc29tZShlKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8QXMoInR5cGVBcnJheU1pc21hdGNoV2FybmluZyIsIkluY29ycmVjdCB0eXBlLiBFeHBlY3RlZCBvbmUgb2YgezB9LiIsdC50eXBlLmpvaW4oIiwgIikpfSk6dC50eXBlJiYoZSh0LnR5cGUpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxBcygidHlwZU1pc21hdGNoV2FybmluZyIsJ0luY29ycmVjdCB0eXBlLiBFeHBlY3RlZCAiezB9Ii4nLHQudHlwZSl9KSk7aWYoQXJyYXkuaXNBcnJheSh0LmFsbE9mKSlmb3IodmFyIG89MCxzPXQuYWxsT2Y7bzxzLmxlbmd0aDtvKyspe3ZhciBhPXNbb107QnMoaSxJcyhhKSxuLHIpfXZhciBsPUlzKHQubm90KTtpZihsKXt2YXIgdT1uZXcgVnMsYz1yLm5ld1N1YigpO0JzKGksbCx1LGMpLHUuaGFzUHJvYmxlbXMoKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTpBcygibm90U2NoZW1hV2FybmluZyIsIk1hdGNoZXMgYSBzY2hlbWEgdGhhdCBpcyBub3QgYWxsb3dlZC4iKX0pO2Zvcih2YXIgaD0wLGQ9Yy5zY2hlbWFzO2g8ZC5sZW5ndGg7aCsrKXt2YXIgZj1kW2hdO2YuaW52ZXJ0ZWQ9IWYuaW52ZXJ0ZWQsci5hZGQoZil9fXZhciBtPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPVtdLHM9dm9pZCAwLGE9MCxsPWU7YTxsLmxlbmd0aDthKyspe3ZhciB1PUlzKGxbYV0pLGM9bmV3IFZzLGg9ci5uZXdTdWIoKTtpZihCcyhpLHUsYyxoKSxjLmhhc1Byb2JsZW1zKCl8fG8ucHVzaCh1KSxzKWlmKHR8fGMuaGFzUHJvYmxlbXMoKXx8cy52YWxpZGF0aW9uUmVzdWx0Lmhhc1Byb2JsZW1zKCkpe3ZhciBkPWMuY29tcGFyZShzLnZhbGlkYXRpb25SZXN1bHQpO2Q+MD9zPXtzY2hlbWE6dSx2YWxpZGF0aW9uUmVzdWx0OmMsbWF0Y2hpbmdTY2hlbWFzOmh9OjA9PT1kJiYocy5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoaCkscy52YWxpZGF0aW9uUmVzdWx0Lm1lcmdlRW51bVZhbHVlcyhjKSl9ZWxzZSBzLm1hdGNoaW5nU2NoZW1hcy5tZXJnZShoKSxzLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc01hdGNoZXMrPWMucHJvcGVydGllc01hdGNoZXMscy52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPWMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcztlbHNlIHM9e3NjaGVtYTp1LHZhbGlkYXRpb25SZXN1bHQ6YyxtYXRjaGluZ1NjaGVtYXM6aH19cmV0dXJuIG8ubGVuZ3RoPjEmJnQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6MX0sbWVzc2FnZTpBcygib25lT2ZXYXJuaW5nIiwiTWF0Y2hlcyBtdWx0aXBsZSBzY2hlbWFzIHdoZW4gb25seSBvbmUgbXVzdCB2YWxpZGF0ZS4iKX0pLHMmJihuLm1lcmdlKHMudmFsaWRhdGlvblJlc3VsdCksbi5wcm9wZXJ0aWVzTWF0Y2hlcys9cy52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9cy52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMsci5tZXJnZShzLm1hdGNoaW5nU2NoZW1hcykpLG8ubGVuZ3RofTtBcnJheS5pc0FycmF5KHQuYW55T2YpJiZtKHQuYW55T2YsITEpO0FycmF5LmlzQXJyYXkodC5vbmVPZikmJm0odC5vbmVPZiwhMCk7dmFyIGc9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFZzLG89ci5uZXdTdWIoKTtCcyhpLElzKGUpLHQsbyksbi5tZXJnZSh0KSxuLnByb3BlcnRpZXNNYXRjaGVzKz10LnByb3BlcnRpZXNNYXRjaGVzLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9dC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLHIubWVyZ2Uobyl9LHA9SXModC5pZik7cCYmKHY9cCxiPUlzKHQudGhlbikseT1Jcyh0LmVsc2UpLEM9SXModiksXz1uZXcgVnMsUz1yLm5ld1N1YigpLEJzKGksQyxfLFMpLHIubWVyZ2UoUyksXy5oYXNQcm9ibGVtcygpP3kmJmcoeSk6YiYmZyhiKSk7dmFyIHYsYix5LEMsXyxTO2lmKEFycmF5LmlzQXJyYXkodC5lbnVtKSl7Zm9yKHZhciB3PURzKGkpLEE9ITEseD0wLEU9dC5lbnVtO3g8RS5sZW5ndGg7eCsrKXtpZihZaSh3LEVbeF0pKXtBPSEwO2JyZWFrfX1uLmVudW1WYWx1ZXM9dC5lbnVtLG4uZW51bVZhbHVlTWF0Y2g9QSxBfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxjb2RlOmNzLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEFzKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0LmVudW0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9KSkuam9pbigiLCAiKSl9KX1pZihlbyh0LmNvbnN0KSl7WWkodz1EcyhpKSx0LmNvbnN0KT9uLmVudW1WYWx1ZU1hdGNoPSEwOihuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxjb2RlOmNzLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEFzKCJjb25zdFdhcm5pbmciLCJWYWx1ZSBtdXN0IGJlIHswfS4iLEpTT04uc3RyaW5naWZ5KHQuY29uc3QpKX0pLG4uZW51bVZhbHVlTWF0Y2g9ITEpLG4uZW51bVZhbHVlcz1bdC5jb25zdF19dC5kZXByZWNhdGlvbk1lc3NhZ2UmJmkucGFyZW50JiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5wYXJlbnQub2Zmc2V0LGxlbmd0aDppLnBhcmVudC5sZW5ndGh9LHNldmVyaXR5OlNpLldhcm5pbmcsbWVzc2FnZTp0LmRlcHJlY2F0aW9uTWVzc2FnZSxjb2RlOmNzLkRlcHJlY2F0ZWR9KX0oKSxyLmFkZCh7bm9kZTppLHNjaGVtYTp0fSl9fWZ1bmN0aW9uIFVzKGUsdCl7dmFyIG49W10scj0tMSxpPWUuZ2V0VGV4dCgpLG89emkoaSwhMSkscz10JiZ0LmNvbGxlY3RDb21tZW50cz9bXTp2b2lkIDA7ZnVuY3Rpb24gYSgpe2Zvcig7Oyl7dmFyIHQ9by5zY2FuKCk7c3dpdGNoKGMoKSx0KXtjYXNlIDEyOmNhc2UgMTM6QXJyYXkuaXNBcnJheShzKSYmcy5wdXNoKGlpLmNyZWF0ZShlLnBvc2l0aW9uQXQoby5nZXRUb2tlbk9mZnNldCgpKSxlLnBvc2l0aW9uQXQoby5nZXRUb2tlbk9mZnNldCgpK28uZ2V0VG9rZW5MZW5ndGgoKSkpKTticmVhaztjYXNlIDE1OmNhc2UgMTQ6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdH19fWZ1bmN0aW9uIGwodCxpLG8scyxhKXtpZih2b2lkIDA9PT1hJiYoYT1TaS5FcnJvciksMD09PW4ubGVuZ3RofHxvIT09cil7dmFyIGw9aWkuY3JlYXRlKGUucG9zaXRpb25BdChvKSxlLnBvc2l0aW9uQXQocykpO24ucHVzaChMaS5jcmVhdGUobCx0LGEsaSxlLmxhbmd1YWdlSWQpKSxyPW99fWZ1bmN0aW9uIHUoZSx0LG4scixzKXt2b2lkIDA9PT1uJiYobj12b2lkIDApLHZvaWQgMD09PXImJihyPVtdKSx2b2lkIDA9PT1zJiYocz1bXSk7dmFyIHU9by5nZXRUb2tlbk9mZnNldCgpLGM9by5nZXRUb2tlbk9mZnNldCgpK28uZ2V0VG9rZW5MZW5ndGgoKTtpZih1PT09YyYmdT4wKXtmb3IodS0tO3U+MCYmL1xzLy50ZXN0KGkuY2hhckF0KHUpKTspdS0tO2M9dSsxfWlmKGwoZSx0LHUsYyksbiYmaChuLCExKSxyLmxlbmd0aCtzLmxlbmd0aD4wKWZvcih2YXIgZD1vLmdldFRva2VuKCk7MTchPT1kOyl7aWYoLTEhPT1yLmluZGV4T2YoZCkpe2EoKTticmVha31pZigtMSE9PXMuaW5kZXhPZihkKSlicmVhaztkPWEoKX1yZXR1cm4gbn1mdW5jdGlvbiBjKCl7c3dpdGNoKG8uZ2V0VG9rZW5FcnJvcigpKXtjYXNlIDQ6cmV0dXJuIHUoQXMoIkludmFsaWRVbmljb2RlIiwiSW52YWxpZCB1bmljb2RlIHNlcXVlbmNlIGluIHN0cmluZy4iKSxjcy5JbnZhbGlkVW5pY29kZSksITA7Y2FzZSA1OnJldHVybiB1KEFzKCJJbnZhbGlkRXNjYXBlQ2hhcmFjdGVyIiwiSW52YWxpZCBlc2NhcGUgY2hhcmFjdGVyIGluIHN0cmluZy4iKSxjcy5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyKSwhMDtjYXNlIDM6cmV0dXJuIHUoQXMoIlVuZXhwZWN0ZWRFbmRPZk51bWJlciIsIlVuZXhwZWN0ZWQgZW5kIG9mIG51bWJlci4iKSxjcy5VbmV4cGVjdGVkRW5kT2ZOdW1iZXIpLCEwO2Nhc2UgMTpyZXR1cm4gdShBcygiVW5leHBlY3RlZEVuZE9mQ29tbWVudCIsIlVuZXhwZWN0ZWQgZW5kIG9mIGNvbW1lbnQuIiksY3MuVW5leHBlY3RlZEVuZE9mQ29tbWVudCksITA7Y2FzZSAyOnJldHVybiB1KEFzKCJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLCJVbmV4cGVjdGVkIGVuZCBvZiBzdHJpbmcuIiksY3MuVW5leHBlY3RlZEVuZE9mU3RyaW5nKSwhMDtjYXNlIDY6cmV0dXJuIHUoQXMoIkludmFsaWRDaGFyYWN0ZXIiLCJJbnZhbGlkIGNoYXJhY3RlcnMgaW4gc3RyaW5nLiBDb250cm9sIGNoYXJhY3RlcnMgbXVzdCBiZSBlc2NhcGVkLiIpLGNzLkludmFsaWRDaGFyYWN0ZXIpLCEwfXJldHVybiExfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gZS5sZW5ndGg9by5nZXRUb2tlbk9mZnNldCgpK28uZ2V0VG9rZW5MZW5ndGgoKS1lLm9mZnNldCx0JiZhKCksZX12YXIgZD1uZXcgVHModm9pZCAwLDAsMCk7ZnVuY3Rpb24gZih0LG4pe3ZhciByPW5ldyBPcyh0LG8uZ2V0VG9rZW5PZmZzZXQoKSxkKSxpPW0ocik7aWYoIWkpe2lmKDE2IT09by5nZXRUb2tlbigpKXJldHVybjt1KEFzKCJEb3VibGVRdW90ZXNFeHBlY3RlZCIsIlByb3BlcnR5IGtleXMgbXVzdCBiZSBkb3VibGVxdW90ZWQiKSxjcy5VbmRlZmluZWQpO3ZhciBzPW5ldyBUcyhyLG8uZ2V0VG9rZW5PZmZzZXQoKSxvLmdldFRva2VuTGVuZ3RoKCkpO3MudmFsdWU9by5nZXRUb2tlblZhbHVlKCksaT1zLGEoKX1yLmtleU5vZGU9aTt2YXIgYz1uW2kudmFsdWVdO2lmKGM/KGwoQXMoIkR1cGxpY2F0ZUtleVdhcm5pbmciLCJEdXBsaWNhdGUgb2JqZWN0IGtleSIpLGNzLkR1cGxpY2F0ZUtleSxyLmtleU5vZGUub2Zmc2V0LHIua2V5Tm9kZS5vZmZzZXQrci5rZXlOb2RlLmxlbmd0aCxTaS5XYXJuaW5nKSwib2JqZWN0Ij09dHlwZW9mIGMmJmwoQXMoIkR1cGxpY2F0ZUtleVdhcm5pbmciLCJEdXBsaWNhdGUgb2JqZWN0IGtleSIpLGNzLkR1cGxpY2F0ZUtleSxjLmtleU5vZGUub2Zmc2V0LGMua2V5Tm9kZS5vZmZzZXQrYy5rZXlOb2RlLmxlbmd0aCxTaS5XYXJuaW5nKSxuW2kudmFsdWVdPSEwKTpuW2kudmFsdWVdPXIsNj09PW8uZ2V0VG9rZW4oKSlyLmNvbG9uT2Zmc2V0PW8uZ2V0VG9rZW5PZmZzZXQoKSxhKCk7ZWxzZSBpZih1KEFzKCJDb2xvbkV4cGVjdGVkIiwiQ29sb24gZXhwZWN0ZWQiKSxjcy5Db2xvbkV4cGVjdGVkKSwxMD09PW8uZ2V0VG9rZW4oKSYmZS5wb3NpdGlvbkF0KGkub2Zmc2V0K2kubGVuZ3RoKS5saW5lPGUucG9zaXRpb25BdChvLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUpcmV0dXJuIHIubGVuZ3RoPWkubGVuZ3RoLHI7dmFyIGg9ZyhyKTtyZXR1cm4gaD8oci52YWx1ZU5vZGU9aCxyLmxlbmd0aD1oLm9mZnNldCtoLmxlbmd0aC1yLm9mZnNldCxyKTp1KEFzKCJWYWx1ZUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSxjcy5WYWx1ZUV4cGVjdGVkLHIsW10sWzIsNV0pfWZ1bmN0aW9uIG0oZSl7aWYoMTA9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyBUcyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSk7cmV0dXJuIHQudmFsdWU9by5nZXRUb2tlblZhbHVlKCksaCh0LCEwKX19ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoMz09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IGtzKGUsby5nZXRUb2tlbk9mZnNldCgpKTthKCk7Zm9yKHZhciBuPSExOzQhPT1vLmdldFRva2VuKCkmJjE3IT09by5nZXRUb2tlbigpOyl7aWYoNT09PW8uZ2V0VG9rZW4oKSl7bnx8dShBcygiVmFsdWVFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksY3MuVmFsdWVFeHBlY3RlZCk7dmFyIHI9by5nZXRUb2tlbk9mZnNldCgpO2lmKGEoKSw0PT09by5nZXRUb2tlbigpKXtuJiZsKEFzKCJUcmFpbGluZ0NvbW1hIiwiVHJhaWxpbmcgY29tbWEiKSxjcy5UcmFpbGluZ0NvbW1hLHIscisxKTtjb250aW51ZX19ZWxzZSBuJiZ1KEFzKCJFeHBlY3RlZENvbW1hIiwiRXhwZWN0ZWQgY29tbWEiKSxjcy5Db21tYUV4cGVjdGVkKTt2YXIgaT1nKHQpO2k/dC5pdGVtcy5wdXNoKGkpOnUoQXMoIlByb3BlcnR5RXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLGNzLlZhbHVlRXhwZWN0ZWQsdm9pZCAwLFtdLFs0LDVdKSxuPSEwfXJldHVybiA0IT09by5nZXRUb2tlbigpP3UoQXMoIkV4cGVjdGVkQ2xvc2VCcmFja2V0IiwiRXhwZWN0ZWQgY29tbWEgb3IgY2xvc2luZyBicmFja2V0IiksY3MuQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQsdCk6aCh0LCEwKX19KGUpfHxmdW5jdGlvbihlKXtpZigxPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgTXMoZSxvLmdldFRva2VuT2Zmc2V0KCkpLG49T2JqZWN0LmNyZWF0ZShudWxsKTthKCk7Zm9yKHZhciByPSExOzIhPT1vLmdldFRva2VuKCkmJjE3IT09by5nZXRUb2tlbigpOyl7aWYoNT09PW8uZ2V0VG9rZW4oKSl7cnx8dShBcygiUHJvcGVydHlFeHBlY3RlZCIsIlByb3BlcnR5IGV4cGVjdGVkIiksY3MuUHJvcGVydHlFeHBlY3RlZCk7dmFyIGk9by5nZXRUb2tlbk9mZnNldCgpO2lmKGEoKSwyPT09by5nZXRUb2tlbigpKXtyJiZsKEFzKCJUcmFpbGluZ0NvbW1hIiwiVHJhaWxpbmcgY29tbWEiKSxjcy5UcmFpbGluZ0NvbW1hLGksaSsxKTtjb250aW51ZX19ZWxzZSByJiZ1KEFzKCJFeHBlY3RlZENvbW1hIiwiRXhwZWN0ZWQgY29tbWEiKSxjcy5Db21tYUV4cGVjdGVkKTt2YXIgcz1mKHQsbik7cz90LnByb3BlcnRpZXMucHVzaChzKTp1KEFzKCJQcm9wZXJ0eUV4cGVjdGVkIiwiUHJvcGVydHkgZXhwZWN0ZWQiKSxjcy5Qcm9wZXJ0eUV4cGVjdGVkLHZvaWQgMCxbXSxbMiw1XSkscj0hMH1yZXR1cm4gMiE9PW8uZ2V0VG9rZW4oKT91KEFzKCJFeHBlY3RlZENsb3NlQnJhY2UiLCJFeHBlY3RlZCBjb21tYSBvciBjbG9zaW5nIGJyYWNlIiksY3MuQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZCx0KTpoKHQsITApfX0oZSl8fG0oZSl8fGZ1bmN0aW9uKGUpe2lmKDExPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgUnMoZSxvLmdldFRva2VuT2Zmc2V0KCkpO2lmKDA9PT1vLmdldFRva2VuRXJyb3IoKSl7dmFyIG49by5nZXRUb2tlblZhbHVlKCk7dHJ5e3ZhciByPUpTT04ucGFyc2Uobik7aWYoIVFpKHIpKXJldHVybiB1KEFzKCJJbnZhbGlkTnVtYmVyRm9ybWF0IiwiSW52YWxpZCBudW1iZXIgZm9ybWF0LiIpLGNzLlVuZGVmaW5lZCx0KTt0LnZhbHVlPXJ9Y2F0Y2goZSl7cmV0dXJuIHUoQXMoIkludmFsaWROdW1iZXJGb3JtYXQiLCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksY3MuVW5kZWZpbmVkLHQpfXQuaXNJbnRlZ2VyPS0xPT09bi5pbmRleE9mKCIuIil9cmV0dXJuIGgodCwhMCl9fShlKXx8ZnVuY3Rpb24oZSl7c3dpdGNoKG8uZ2V0VG9rZW4oKSl7Y2FzZSA3OnJldHVybiBoKG5ldyBMcyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSksITApO2Nhc2UgODpyZXR1cm4gaChuZXcgTnMoZSwhMCxvLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtjYXNlIDk6cmV0dXJuIGgobmV3IE5zKGUsITEsby5nZXRUb2tlbk9mZnNldCgpKSwhMCk7ZGVmYXVsdDpyZXR1cm59fShlKX12YXIgcD12b2lkIDA7cmV0dXJuIDE3IT09YSgpJiYoKHA9ZyhwKSk/MTchPT1vLmdldFRva2VuKCkmJnUoQXMoIkVuZCBvZiBmaWxlIGV4cGVjdGVkIiwiRW5kIG9mIGZpbGUgZXhwZWN0ZWQuIiksY3MuVW5kZWZpbmVkKTp1KEFzKCJJbnZhbGlkIHN5bWJvbCIsIkV4cGVjdGVkIGEgSlNPTiBvYmplY3QsIGFycmF5IG9yIGxpdGVyYWwuIiksY3MuVW5kZWZpbmVkKSksbmV3IHFzKHAsbixzKX1mdW5jdGlvbiAkcyhlLHQsbil7aWYobnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZSl7dmFyIHI9dCsiXHQiO2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iW10iO2Zvcih2YXIgaT0iW1xuIixvPTA7bzxlLmxlbmd0aDtvKyspaSs9ciskcyhlW29dLHIsbiksbzxlLmxlbmd0aC0xJiYoaSs9IiwiKSxpKz0iXG4iO3JldHVybiBpKz10KyJdIn12YXIgcz1PYmplY3Qua2V5cyhlKTtpZigwPT09cy5sZW5ndGgpcmV0dXJuInt9Ijtmb3IoaT0ie1xuIixvPTA7bzxzLmxlbmd0aDtvKyspe3ZhciBhPXNbb107aSs9citKU09OLnN0cmluZ2lmeShhKSsiOiAiKyRzKGVbYV0scixuKSxvPHMubGVuZ3RoLTEmJihpKz0iLCIpLGkrPSJcbiJ9cmV0dXJuIGkrPXQrIn0ifXJldHVybiBuKGUpfXZhciBXcz15cygpLEhzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49UHJvbWlzZSksdm9pZCAwPT09ciYmKHI9e30pLHRoaXMuc2NoZW1hU2VydmljZT1lLHRoaXMuY29udHJpYnV0aW9ucz10LHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPW4sdGhpcy5jbGllbnRDYXBhYmlsaXRpZXM9cn1yZXR1cm4gZS5wcm90b3R5cGUuZG9SZXNvbHZlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmNvbnRyaWJ1dGlvbnMubGVuZ3RoLTE7dD49MDt0LS0pe3ZhciBuPXRoaXMuY29udHJpYnV0aW9uc1t0XS5yZXNvbHZlQ29tcGxldGlvbjtpZihuKXt2YXIgcj1uKGUpO2lmKHIpcmV0dXJuIHJ9fXJldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvci5yZXNvbHZlKGUpfSxlLnByb3RvdHlwZS5kb0NvbXBsZXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLGk9e2l0ZW1zOltdLGlzSW5jb21wbGV0ZTohMX0sbz1lLmdldFRleHQoKSxzPWUub2Zmc2V0QXQodCksYT1uLmdldE5vZGVGcm9tT2Zmc2V0KHMsITApO2lmKHRoaXMuaXNJbkNvbW1lbnQoZSxhP2Eub2Zmc2V0OjAscykpcmV0dXJuIFByb21pc2UucmVzb2x2ZShpKTtpZihhJiZzPT09YS5vZmZzZXQrYS5sZW5ndGgmJnM+MCl7dmFyIGw9b1tzLTFdOygib2JqZWN0Ij09PWEudHlwZSYmIn0iPT09bHx8ImFycmF5Ij09PWEudHlwZSYmIl0iPT09bCkmJihhPWEucGFyZW50KX12YXIgdSxjPXRoaXMuZ2V0Q3VycmVudFdvcmQoZSxzKTtpZighYXx8InN0cmluZyIhPT1hLnR5cGUmJiJudW1iZXIiIT09YS50eXBlJiYiYm9vbGVhbiIhPT1hLnR5cGUmJiJudWxsIiE9PWEudHlwZSl7dmFyIGg9cy1jLmxlbmd0aDtoPjAmJiciJz09PW9baC0xXSYmaC0tLHU9aWkuY3JlYXRlKGUucG9zaXRpb25BdChoKSx0KX1lbHNlIHU9aWkuY3JlYXRlKGUucG9zaXRpb25BdChhLm9mZnNldCksZS5wb3NpdGlvbkF0KGEub2Zmc2V0K2EubGVuZ3RoKSk7dmFyIGQ9e30sZj17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGFiZWwsbj1kW3RdO2lmKG4pbi5kb2N1bWVudGF0aW9ufHwobi5kb2N1bWVudGF0aW9uPWUuZG9jdW1lbnRhdGlvbiksbi5kZXRhaWx8fChuLmRldGFpbD1lLmRldGFpbCk7ZWxzZXtpZigodD10LnJlcGxhY2UoL1tcbl0vZywi4oa1IikpLmxlbmd0aD42MCl7dmFyIHI9dC5zdWJzdHIoMCw1NykudHJpbSgpKyIuLi4iO2Rbcl18fCh0PXIpfXUmJnZvaWQgMCE9PWUuaW5zZXJ0VGV4dCYmKGUudGV4dEVkaXQ9VGkucmVwbGFjZSh1LGUuaW5zZXJ0VGV4dCkpLGUubGFiZWw9dCxkW3RdPWUsaS5pdGVtcy5wdXNoKGUpfX0sc2V0QXNJbmNvbXBsZXRlOmZ1bmN0aW9uKCl7aS5pc0luY29tcGxldGU9ITB9LGVycm9yOmZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoZSl9LGxvZzpmdW5jdGlvbihlKXtjb25zb2xlLmxvZyhlKX0sZ2V0TnVtYmVyT2ZQcm9wb3NhbHM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pdGVtcy5sZW5ndGh9fTtyZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLG4pLnRoZW4oKGZ1bmN0aW9uKHQpe3ZhciBsPVtdLGg9ITAsbT0iIixnPXZvaWQgMDtpZihhJiYic3RyaW5nIj09PWEudHlwZSl7dmFyIHA9YS5wYXJlbnQ7cCYmInByb3BlcnR5Ij09PXAudHlwZSYmcC5rZXlOb2RlPT09YSYmKGg9IXAudmFsdWVOb2RlLGc9cCxtPW8uc3Vic3RyKGEub2Zmc2V0KzEsYS5sZW5ndGgtMikscCYmKGE9cC5wYXJlbnQpKX1pZihhJiYib2JqZWN0Ij09PWEudHlwZSl7aWYoYS5vZmZzZXQ9PT1zKXJldHVybiBpO2EucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbihlKXtnJiZnPT09ZXx8KGRbZS5rZXlOb2RlLnZhbHVlXT14by5jcmVhdGUoIl9fIikpfSkpO3ZhciB2PSIiO2gmJih2PXIuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihlLGUub2Zmc2V0QXQodS5lbmQpKSksdD9yLmdldFByb3BlcnR5Q29tcGxldGlvbnModCxuLGEsaCx2LGYpOnIuZ2V0U2NoZW1hTGVzc1Byb3BlcnR5Q29tcGxldGlvbnMobixhLG0sZik7dmFyIGI9S3MoYSk7ci5jb250cmlidXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQuY29sbGVjdFByb3BlcnR5Q29tcGxldGlvbnMoZS51cmksYixjLGgsIiI9PT12LGYpO24mJmwucHVzaChuKX0pKSwhdCYmYy5sZW5ndGg+MCYmJyInIT09by5jaGFyQXQocy1jLmxlbmd0aC0xKSYmKGYuYWRkKHtraW5kOnBvLlByb3BlcnR5LGxhYmVsOnIuZ2V0TGFiZWxGb3JWYWx1ZShjKSxpbnNlcnRUZXh0OnIuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGMsdm9pZCAwLCExLHYpLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSksZi5zZXRBc0luY29tcGxldGUoKSl9dmFyIHk9e307cmV0dXJuIHQ/ci5nZXRWYWx1ZUNvbXBsZXRpb25zKHQsbixhLHMsZSxmLHkpOnIuZ2V0U2NoZW1hTGVzc1ZhbHVlQ29tcGxldGlvbnMobixhLHMsZSxmKSxyLmNvbnRyaWJ1dGlvbnMubGVuZ3RoPjAmJnIuZ2V0Q29udHJpYnV0ZWRWYWx1ZUNvbXBsZXRpb25zKG4sYSxzLGUsZixsKSxyLnByb21pc2VDb25zdHJ1Y3Rvci5hbGwobCkudGhlbigoZnVuY3Rpb24oKXtpZigwPT09Zi5nZXROdW1iZXJPZlByb3Bvc2FscygpKXt2YXIgdD1zOyFhfHwic3RyaW5nIiE9PWEudHlwZSYmIm51bWJlciIhPT1hLnR5cGUmJiJib29sZWFuIiE9PWEudHlwZSYmIm51bGwiIT09YS50eXBlfHwodD1hLm9mZnNldCthLmxlbmd0aCk7dmFyIG49ci5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGUsdCk7ci5hZGRGaWxsZXJWYWx1ZUNvbXBsZXRpb25zKHksbixmKX1yZXR1cm4gaX0pKX0pKX0sZS5wcm90b3R5cGUuZ2V0UHJvcGVydHlDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIHM9dGhpczt0LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxuLm9mZnNldCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5ub2RlPT09biYmIWUuaW52ZXJ0ZWQpe3ZhciB0PWUuc2NoZW1hLnByb3BlcnRpZXM7dCYmT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtpZigib2JqZWN0Ij09dHlwZW9mIG4mJiFuLmRlcHJlY2F0aW9uTWVzc2FnZSYmIW4uZG9Ob3RTdWdnZXN0KXt2YXIgYT17a2luZDpwby5Qcm9wZXJ0eSxsYWJlbDplLGluc2VydFRleHQ6cy5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoZSxuLHIsaSksaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGZpbHRlclRleHQ6cy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoZSksZG9jdW1lbnRhdGlvbjpzLmZyb21NYXJrdXAobi5tYXJrZG93bkRlc2NyaXB0aW9uKXx8bi5kZXNjcmlwdGlvbnx8IiJ9O3ZvaWQgMCE9PW4uc3VnZ2VzdFNvcnRUZXh0JiYoYS5zb3J0VGV4dD1uLnN1Z2dlc3RTb3J0VGV4dCksYS5pbnNlcnRUZXh0JiZubyhhLmluc2VydFRleHQsIiQxIi5jb25jYXQoaSkpJiYoYS5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxvLmFkZChhKX19KSk7dmFyIGE9ZS5zY2hlbWEucHJvcGVydHlOYW1lcztpZigib2JqZWN0Ij09dHlwZW9mIGEmJiFhLmRlcHJlY2F0aW9uTWVzc2FnZSYmIWEuZG9Ob3RTdWdnZXN0KXt2YXIgbD1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCk7dmFyIG49e2tpbmQ6cG8uUHJvcGVydHksbGFiZWw6ZSxpbnNlcnRUZXh0OnMuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGUsdm9pZCAwLHIsaSksaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGZpbHRlclRleHQ6cy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoZSksZG9jdW1lbnRhdGlvbjp0fHxzLmZyb21NYXJrdXAoYS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8YS5kZXNjcmlwdGlvbnx8IiJ9O3ZvaWQgMCE9PWEuc3VnZ2VzdFNvcnRUZXh0JiYobi5zb3J0VGV4dD1hLnN1Z2dlc3RTb3J0VGV4dCksbi5pbnNlcnRUZXh0JiZubyhuLmluc2VydFRleHQsIiQxIi5jb25jYXQoaSkpJiYobi5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxvLmFkZChuKX07aWYoYS5lbnVtKWZvcih2YXIgdT0wO3U8YS5lbnVtLmxlbmd0aDt1Kyspe3ZhciBjPXZvaWQgMDthLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmdTxhLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGg/Yz1zLmZyb21NYXJrdXAoYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbdV0pOmEuZW51bURlc2NyaXB0aW9ucyYmdTxhLmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYoYz1hLmVudW1EZXNjcmlwdGlvbnNbdV0pLGwoYS5lbnVtW3VdLGMpfWEuY29uc3QmJmwoYS5jb25zdCl9fX0pKX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hTGVzc1Byb3BlcnR5Q29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGUpe2UucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmtleU5vZGUudmFsdWU7ci5hZGQoe2tpbmQ6cG8uUHJvcGVydHksbGFiZWw6dCxpbnNlcnRUZXh0OmkuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHQsIiIpLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxmaWx0ZXJUZXh0OmkuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKHQpLGRvY3VtZW50YXRpb246IiJ9KX0pKX07aWYodC5wYXJlbnQpaWYoInByb3BlcnR5Ij09PXQucGFyZW50LnR5cGUpe3ZhciBzPXQucGFyZW50LmtleU5vZGUudmFsdWU7ZS52aXNpdCgoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZSE9PXQucGFyZW50JiZlLmtleU5vZGUudmFsdWU9PT1zJiZlLnZhbHVlTm9kZSYmIm9iamVjdCI9PT1lLnZhbHVlTm9kZS50eXBlJiZvKGUudmFsdWVOb2RlKSwhMH0pKX1lbHNlImFycmF5Ij09PXQucGFyZW50LnR5cGUmJnQucGFyZW50Lml0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKGUpeyJvYmplY3QiPT09ZS50eXBlJiZlIT09dCYmbyhlKX0pKTtlbHNlIm9iamVjdCI9PT10LnR5cGUmJnIuYWRkKHtraW5kOnBvLlByb3BlcnR5LGxhYmVsOiIkc2NoZW1hIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KCIkc2NoZW1hIix2b2lkIDAsITAsIiIpLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIiLGZpbHRlclRleHQ6dGhpcy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoIiRzY2hlbWEiKX0pfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPXRoaXMscz1uO2lmKCF0fHwic3RyaW5nIiE9PXQudHlwZSYmIm51bWJlciIhPT10LnR5cGUmJiJib29sZWFuIiE9PXQudHlwZSYmIm51bGwiIT09dC50eXBlfHwocz10Lm9mZnNldCt0Lmxlbmd0aCx0PXQucGFyZW50KSwhdClyZXR1cm4gaS5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6IkVtcHR5IG9iamVjdCIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSwiIiksaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSx2b2lkIGkuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IkVtcHR5IGFycmF5IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OmJvLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pO3ZhciBhPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihyLHMpLGw9ZnVuY3Rpb24oZSl7ZS5wYXJlbnQmJiFqcyhlLnBhcmVudCxuLCEwKSYmaS5hZGQoe2tpbmQ6by5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOm8uZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlKGUsciksaW5zZXJ0VGV4dDpvLmdldEluc2VydFRleHRGb3JNYXRjaGluZ05vZGUoZSxyLGEpLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSksImJvb2xlYW4iPT09ZS50eXBlJiZvLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb24oIWUudmFsdWUsYSxpKX07aWYoInByb3BlcnR5Ij09PXQudHlwZSYmbj4odC5jb2xvbk9mZnNldHx8MCkpe3ZhciB1PXQudmFsdWVOb2RlO2lmKHUmJihuPnUub2Zmc2V0K3UubGVuZ3RofHwib2JqZWN0Ij09PXUudHlwZXx8ImFycmF5Ij09PXUudHlwZSkpcmV0dXJuO3ZhciBjPXQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KChmdW5jdGlvbihlKXtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiZlLmtleU5vZGUudmFsdWU9PT1jJiZlLnZhbHVlTm9kZSYmbChlLnZhbHVlTm9kZSksITB9KSksIiRzY2hlbWEiPT09YyYmdC5wYXJlbnQmJiF0LnBhcmVudC5wYXJlbnQmJnRoaXMuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnMoYSxpKX1pZigiYXJyYXkiPT09dC50eXBlKWlmKHQucGFyZW50JiYicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIGg9dC5wYXJlbnQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KChmdW5jdGlvbihlKXtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiZlLmtleU5vZGUudmFsdWU9PT1oJiZlLnZhbHVlTm9kZSYmImFycmF5Ij09PWUudmFsdWVOb2RlLnR5cGUmJmUudmFsdWVOb2RlLml0ZW1zLmZvckVhY2gobCksITB9KSl9ZWxzZSB0Lml0ZW1zLmZvckVhY2gobCl9LGUucHJvdG90eXBlLmdldFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpLG8scyl7dmFyIGE9cixsPXZvaWQgMCx1PXZvaWQgMDtpZighbnx8InN0cmluZyIhPT1uLnR5cGUmJiJudW1iZXIiIT09bi50eXBlJiYiYm9vbGVhbiIhPT1uLnR5cGUmJiJudWxsIiE9PW4udHlwZXx8KGE9bi5vZmZzZXQrbi5sZW5ndGgsdT1uLG49bi5wYXJlbnQpLG4pe2lmKCJwcm9wZXJ0eSI9PT1uLnR5cGUmJnI+KG4uY29sb25PZmZzZXR8fDApKXt2YXIgYz1uLnZhbHVlTm9kZTtpZihjJiZyPmMub2Zmc2V0K2MubGVuZ3RoKXJldHVybjtsPW4ua2V5Tm9kZS52YWx1ZSxuPW4ucGFyZW50fWlmKG4mJih2b2lkIDAhPT1sfHwiYXJyYXkiPT09bi50eXBlKSl7Zm9yKHZhciBoPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihpLGEpLGQ9MCxmPXQuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLG4ub2Zmc2V0LHUpO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgbT1mW2RdO2lmKG0ubm9kZT09PW4mJiFtLmludmVydGVkJiZtLnNjaGVtYSl7aWYoImFycmF5Ij09PW4udHlwZSYmbS5zY2hlbWEuaXRlbXMpaWYoQXJyYXkuaXNBcnJheShtLnNjaGVtYS5pdGVtcykpe3ZhciBnPXRoaXMuZmluZEl0ZW1BdE9mZnNldChuLGkscik7ZzxtLnNjaGVtYS5pdGVtcy5sZW5ndGgmJnRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhtLnNjaGVtYS5pdGVtc1tnXSxoLG8scyl9ZWxzZSB0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMobS5zY2hlbWEuaXRlbXMsaCxvLHMpO2lmKHZvaWQgMCE9PWwpe3ZhciBwPSExO2lmKG0uc2NoZW1hLnByb3BlcnRpZXMpKF89bS5zY2hlbWEucHJvcGVydGllc1tsXSkmJihwPSEwLHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhfLGgsbyxzKSk7aWYobS5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMmJiFwKWZvcih2YXIgdj0wLGI9T2JqZWN0LmtleXMobS5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMpO3Y8Yi5sZW5ndGg7disrKXt2YXIgeT1iW3ZdLEM9cm8oeSk7aWYobnVsbD09Qz92b2lkIDA6Qy50ZXN0KGwpKXtwPSEwO3ZhciBfPW0uc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzW3ldO3RoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhfLGgsbyxzKX19aWYobS5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMmJiFwKXtfPW0uc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO3RoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhfLGgsbyxzKX19fX0iJHNjaGVtYSIhPT1sfHxuLnBhcmVudHx8dGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhoLG8pLHMuYm9vbGVhbiYmKHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMCxoLG8pLHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMSxoLG8pKSxzLm51bGwmJnRoaXMuYWRkTnVsbFZhbHVlQ29tcGxldGlvbihoLG8pfX1lbHNlIHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLnNjaGVtYSwiIixvLHMpfSxlLnByb3RvdHlwZS5nZXRDb250cmlidXRlZFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpLG8pe2lmKHQpe2lmKCJzdHJpbmciIT09dC50eXBlJiYibnVtYmVyIiE9PXQudHlwZSYmImJvb2xlYW4iIT09dC50eXBlJiYibnVsbCIhPT10LnR5cGV8fCh0PXQucGFyZW50KSx0JiYicHJvcGVydHkiPT09dC50eXBlJiZuPih0LmNvbG9uT2Zmc2V0fHwwKSl7dmFyIHM9dC5rZXlOb2RlLnZhbHVlLGE9dC52YWx1ZU5vZGU7aWYoKCFhfHxuPD1hLm9mZnNldCthLmxlbmd0aCkmJnQucGFyZW50KXt2YXIgbD1Lcyh0LnBhcmVudCk7dGhpcy5jb250cmlidXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sbGVjdFZhbHVlQ29tcGxldGlvbnMoci51cmksbCxzLGkpO3QmJm8ucHVzaCh0KX0pKX19fWVsc2UgdGhpcy5jb250cmlidXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sbGVjdERlZmF1bHRDb21wbGV0aW9ucyhyLnVyaSxpKTt0JiZvLnB1c2godCl9KSl9LGUucHJvdG90eXBlLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpczsib2JqZWN0Ij09dHlwZW9mIGUmJih0aGlzLmFkZEVudW1WYWx1ZUNvbXBsZXRpb25zKGUsdCxuKSx0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKGUsdCxuKSx0aGlzLmNvbGxlY3RUeXBlcyhlLHIpLEFycmF5LmlzQXJyYXkoZS5hbGxPZikmJmUuYWxsT2YuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQsbixyKX0pKSxBcnJheS5pc0FycmF5KGUuYW55T2YpJiZlLmFueU9mLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LG4scil9KSksQXJyYXkuaXNBcnJheShlLm9uZU9mKSYmZS5vbmVPZi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIpfSkpKX0sZS5wcm90b3R5cGUuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpczt2b2lkIDA9PT1yJiYocj0wKTt2YXIgbz0hMTtpZihlbyhlLmRlZmF1bHQpKXtmb3IodmFyIHM9ZS50eXBlLGE9ZS5kZWZhdWx0LGw9cjtsPjA7bC0tKWE9W2FdLHM9ImFycmF5IjtuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKHMpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShhKSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGEsdCksaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGRldGFpbDpXcygianNvbi5zdWdnZXN0LmRlZmF1bHQiLCJEZWZhdWx0IHZhbHVlIil9KSxvPSEwfUFycmF5LmlzQXJyYXkoZS5leGFtcGxlcykmJmUuZXhhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24ocyl7Zm9yKHZhciBhPWUudHlwZSxsPXMsdT1yO3U+MDt1LS0pbD1bbF0sYT0iYXJyYXkiO24uYWRkKHtraW5kOmkuZ2V0U3VnZ2VzdGlvbktpbmQoYSksbGFiZWw6aS5nZXRMYWJlbEZvclZhbHVlKGwpLGluc2VydFRleHQ6aS5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUobCx0KSxpbnNlcnRUZXh0Rm9ybWF0OmJvLlNuaXBwZXR9KSxvPSEwfSkpLEFycmF5LmlzQXJyYXkoZS5kZWZhdWx0U25pcHBldHMpJiZlLmRlZmF1bHRTbmlwcGV0cy5mb3JFYWNoKChmdW5jdGlvbihzKXt2YXIgYSxsLHU9ZS50eXBlLGM9cy5ib2R5LGg9cy5sYWJlbDtpZihlbyhjKSl7ZS50eXBlO2Zvcih2YXIgZD1yO2Q+MDtkLS0pYz1bY107YT1pLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWUoYyx0KSxsPWkuZ2V0RmlsdGVyVGV4dEZvclNuaXBwZXRWYWx1ZShjKSxoPWh8fGkuZ2V0TGFiZWxGb3JTbmlwcGV0VmFsdWUoYyl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIHMuYm9keVRleHQpcmV0dXJuO3ZhciBmPSIiLG09IiIsZz0iIjtmb3IoZD1yO2Q+MDtkLS0pZj1mK2crIltcbiIsbT1tKyJcbiIrZysiXSIsZys9Ilx0Iix1PSJhcnJheSI7YT1mK2crcy5ib2R5VGV4dC5zcGxpdCgiXG4iKS5qb2luKCJcbiIrZykrbSt0LGg9aHx8YSxsPWEucmVwbGFjZSgvW1xuXS9nLCIiKX1uLmFkZCh7a2luZDppLmdldFN1Z2dlc3Rpb25LaW5kKHUpLGxhYmVsOmgsZG9jdW1lbnRhdGlvbjppLmZyb21NYXJrdXAocy5tYXJrZG93bkRlc2NyaXB0aW9uKXx8cy5kZXNjcmlwdGlvbixpbnNlcnRUZXh0OmEsaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGZpbHRlclRleHQ6bH0pLG89ITB9KSksIW8mJiJvYmplY3QiPT10eXBlb2YgZS5pdGVtcyYmIUFycmF5LmlzQXJyYXkoZS5pdGVtcykmJnI8NSYmdGhpcy5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucyhlLml0ZW1zLHQsbixyKzEpfSxlLnByb3RvdHlwZS5hZGRFbnVtVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbil7aWYoZW8oZS5jb25zdCkmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUoZS5jb25zdCksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLmNvbnN0LHQpLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxkb2N1bWVudGF0aW9uOnRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRGVzY3JpcHRpb24pfHxlLmRlc2NyaXB0aW9ufSksQXJyYXkuaXNBcnJheShlLmVudW0pKWZvcih2YXIgcj0wLGk9ZS5lbnVtLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1lLmVudW1bcl0scz10aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8ZS5kZXNjcmlwdGlvbjtlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmcjxlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJnRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpP3M9dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW3JdKTplLmVudW1EZXNjcmlwdGlvbnMmJnI8ZS5lbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmKHM9ZS5lbnVtRGVzY3JpcHRpb25zW3JdKSxuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKG8pLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUobyx0KSxpbnNlcnRUZXh0Rm9ybWF0OmJvLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjpzfSl9fSxlLnByb3RvdHlwZS5jb2xsZWN0VHlwZXM9ZnVuY3Rpb24oZSx0KXtpZighQXJyYXkuaXNBcnJheShlLmVudW0pJiYhZW8oZS5jb25zdCkpe3ZhciBuPWUudHlwZTtBcnJheS5pc0FycmF5KG4pP24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV09ITB9KSk6biYmKHRbbl09ITApfX0sZS5wcm90b3R5cGUuYWRkRmlsbGVyVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbil7ZS5vYmplY3QmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm9iamVjdCIpLGxhYmVsOiJ7fSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUoe30sdCksaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGRldGFpbDpXcygiZGVmYXVsdHMub2JqZWN0IiwiTmV3IG9iamVjdCIpLGRvY3VtZW50YXRpb246IiJ9KSxlLmFycmF5JiZuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJhcnJheSIpLGxhYmVsOiJbXSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUoW10sdCksaW5zZXJ0VGV4dEZvcm1hdDpiby5TbmlwcGV0LGRldGFpbDpXcygiZGVmYXVsdHMuYXJyYXkiLCJOZXcgYXJyYXkiKSxkb2N1bWVudGF0aW9uOiIifSl9LGUucHJvdG90eXBlLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb249ZnVuY3Rpb24oZSx0LG4pe24uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImJvb2xlYW4iKSxsYWJlbDplPyJ0cnVlIjoiZmFsc2UiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KSxpbnNlcnRUZXh0Rm9ybWF0OmJvLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGROdWxsVmFsdWVDb21wbGV0aW9uPWZ1bmN0aW9uKGUsdCl7dC5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgibnVsbCIpLGxhYmVsOiJudWxsIixpbnNlcnRUZXh0OiJudWxsIitlLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9LGUucHJvdG90eXBlLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMuc2NoZW1hU2VydmljZS5nZXRSZWdpc3RlcmVkU2NoZW1hSWRzKChmdW5jdGlvbihlKXtyZXR1cm4iaHR0cCI9PT1lfHwiaHR0cHMiPT09ZX0pKTtyLmZvckVhY2goKGZ1bmN0aW9uKHIpe3JldHVybiB0LmFkZCh7a2luZDpwby5Nb2R1bGUsbGFiZWw6bi5nZXRMYWJlbEZvclZhbHVlKHIpLGZpbHRlclRleHQ6bi5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUociksaW5zZXJ0VGV4dDpuLmdldEluc2VydFRleHRGb3JWYWx1ZShyLGUpLGluc2VydFRleHRGb3JtYXQ6Ym8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9KSl9LGUucHJvdG90eXBlLmdldExhYmVsRm9yVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSxlLnByb3RvdHlwZS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSxlLnByb3RvdHlwZS5nZXRGaWx0ZXJUZXh0Rm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9cJFx7XGQrOihbXn1dKylcfXxcJFxkKy9nLCIkMSIpfSxlLnByb3RvdHlwZS5nZXRMYWJlbEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXCRce1xkKzooW159XSspXH18XCRcZCsvZywiJDEiKX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxcJFx9XS9nLCJcXCQmIil9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JWYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciBuPUpTT04uc3RyaW5naWZ5KGUsbnVsbCwiXHQiKTtyZXR1cm4ie30iPT09bj8ieyQxfSIrdDoiW10iPT09bj8iWyQxXSIrdDp0aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQobit0KX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbihlLHQpe3JldHVybiAkcyhlLCIiLChmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJiJeIj09PWVbMF0/ZS5zdWJzdHIoMSk6SlNPTi5zdHJpbmdpZnkoZSl9KSkrdH0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZT1mdW5jdGlvbihlLHQpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJvYmplY3QiOnJldHVybiBudWxsPT09ZT8iJHsxOm51bGx9Iit0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCk7Y2FzZSJzdHJpbmciOnZhciBuPUpTT04uc3RyaW5naWZ5KGUpO3JldHVybiBuPW4uc3Vic3RyKDEsbi5sZW5ndGgtMiksJyIkezE6Jysobj10aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQobikpKyd9IicrdDtjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4iJHsxOiIrSlNPTi5zdHJpbmdpZnkoZSkrIn0iK3R9cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCl9LGUucHJvdG90eXBlLmdldFN1Z2dlc3Rpb25LaW5kPWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciB0PWU7ZT10Lmxlbmd0aD4wP3RbMF06dm9pZCAwfWlmKCFlKXJldHVybiBwby5WYWx1ZTtzd2l0Y2goZSl7Y2FzZSJzdHJpbmciOmRlZmF1bHQ6cmV0dXJuIHBvLlZhbHVlO2Nhc2Uib2JqZWN0IjpyZXR1cm4gcG8uTW9kdWxlO2Nhc2UicHJvcGVydHkiOnJldHVybiBwby5Qcm9wZXJ0eX19LGUucHJvdG90eXBlLmdldExhYmVsVGV4dEZvck1hdGNoaW5nTm9kZT1mdW5jdGlvbihlLHQpe3N3aXRjaChlLnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiJbXSI7Y2FzZSJvYmplY3QiOnJldHVybiJ7fSI7ZGVmYXVsdDpyZXR1cm4gdC5nZXRUZXh0KCkuc3Vic3RyKGUub2Zmc2V0LGUubGVuZ3RoKX19LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JNYXRjaGluZ05vZGU9ZnVuY3Rpb24oZSx0LG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShbXSxuKTtjYXNlIm9iamVjdCI6cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHt9LG4pO2RlZmF1bHQ6dmFyIHI9dC5nZXRUZXh0KCkuc3Vic3RyKGUub2Zmc2V0LGUubGVuZ3RoKStuO3JldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQocil9fSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHk9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSwiIik7aWYoIW4pcmV0dXJuIGk7dmFyIG8scz1pKyI6ICIsYT0wO2lmKHQpe2lmKEFycmF5LmlzQXJyYXkodC5kZWZhdWx0U25pcHBldHMpKXtpZigxPT09dC5kZWZhdWx0U25pcHBldHMubGVuZ3RoKXt2YXIgbD10LmRlZmF1bHRTbmlwcGV0c1swXS5ib2R5O2VvKGwpJiYobz10aGlzLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWUobCwiIikpfWErPXQuZGVmYXVsdFNuaXBwZXRzLmxlbmd0aH1pZih0LmVudW0mJihvfHwxIT09dC5lbnVtLmxlbmd0aHx8KG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZW51bVswXSwiIikpLGErPXQuZW51bS5sZW5ndGgpLGVvKHQuZGVmYXVsdCkmJihvfHwobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5kZWZhdWx0LCIiKSksYSsrKSxBcnJheS5pc0FycmF5KHQuZXhhbXBsZXMpJiZ0LmV4YW1wbGVzLmxlbmd0aCYmKG98fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmV4YW1wbGVzWzBdLCIiKSksYSs9dC5leGFtcGxlcy5sZW5ndGgpLDA9PT1hKXt2YXIgdT1BcnJheS5pc0FycmF5KHQudHlwZSk/dC50eXBlWzBdOnQudHlwZTtzd2l0Y2godXx8KHQucHJvcGVydGllcz91PSJvYmplY3QiOnQuaXRlbXMmJih1PSJhcnJheSIpKSx1KXtjYXNlImJvb2xlYW4iOm89IiQxIjticmVhaztjYXNlInN0cmluZyI6bz0nIiQxIic7YnJlYWs7Y2FzZSJvYmplY3QiOm89InskMX0iO2JyZWFrO2Nhc2UiYXJyYXkiOm89IlskMV0iO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOm89IiR7MTowfSI7YnJlYWs7Y2FzZSJudWxsIjpvPSIkezE6bnVsbH0iO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGl9fX1yZXR1cm4oIW98fGE+MSkmJihvPSIkMSIpLHMrbytyfSxlLnByb3RvdHlwZS5nZXRDdXJyZW50V29yZD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10LTEscj1lLmdldFRleHQoKTtuPj0wJiYtMT09PScgXHRcblxyXHYiOntbLF19Jy5pbmRleE9mKHIuY2hhckF0KG4pKTspbi0tO3JldHVybiByLnN1YnN0cmluZyhuKzEsdCl9LGUucHJvdG90eXBlLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj16aShlLmdldFRleHQoKSwhMCk7c3dpdGNoKG4uc2V0UG9zaXRpb24odCksbi5zY2FuKCkpe2Nhc2UgNTpjYXNlIDI6Y2FzZSA0OmNhc2UgMTc6cmV0dXJuIiI7ZGVmYXVsdDpyZXR1cm4iLCJ9fSxlLnByb3RvdHlwZS5maW5kSXRlbUF0T2Zmc2V0PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9emkodC5nZXRUZXh0KCksITApLGk9ZS5pdGVtcyxvPWkubGVuZ3RoLTE7bz49MDtvLS0pe3ZhciBzPWlbb107aWYobj5zLm9mZnNldCtzLmxlbmd0aClyZXR1cm4gci5zZXRQb3NpdGlvbihzLm9mZnNldCtzLmxlbmd0aCksNT09PXIuc2NhbigpJiZuPj1yLmdldFRva2VuT2Zmc2V0KCkrci5nZXRUb2tlbkxlbmd0aCgpP28rMTpvO2lmKG4+PXMub2Zmc2V0KXJldHVybiBvfXJldHVybiAwfSxlLnByb3RvdHlwZS5pc0luQ29tbWVudD1mdW5jdGlvbihlLHQsbil7dmFyIHI9emkoZS5nZXRUZXh0KCksITEpO3Iuc2V0UG9zaXRpb24odCk7Zm9yKHZhciBpPXIuc2NhbigpOzE3IT09aSYmci5nZXRUb2tlbk9mZnNldCgpK3IuZ2V0VG9rZW5MZW5ndGgoKTxuOylpPXIuc2NhbigpO3JldHVybigxMj09PWl8fDEzPT09aSkmJnIuZ2V0VG9rZW5PZmZzZXQoKTw9bn0sZS5wcm90b3R5cGUuZnJvbU1hcmt1cD1mdW5jdGlvbihlKXtpZihlJiZ0aGlzLmRvZXNTdXBwb3J0TWFya2Rvd24oKSlyZXR1cm57a2luZDpmby5NYXJrZG93bix2YWx1ZTplfX0sZS5wcm90b3R5cGUuZG9lc1N1cHBvcnRNYXJrZG93bj1mdW5jdGlvbigpe2lmKCFlbyh0aGlzLnN1cHBvcnRzTWFya2Rvd24pKXt2YXIgZT10aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQmJnRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudC5jb21wbGV0aW9uO3RoaXMuc3VwcG9ydHNNYXJrZG93bj1lJiZlLmNvbXBsZXRpb25JdGVtJiZBcnJheS5pc0FycmF5KGUuY29tcGxldGlvbkl0ZW0uZG9jdW1lbnRhdGlvbkZvcm1hdCkmJi0xIT09ZS5jb21wbGV0aW9uSXRlbS5kb2N1bWVudGF0aW9uRm9ybWF0LmluZGV4T2YoZm8uTWFya2Rvd24pfXJldHVybiB0aGlzLnN1cHBvcnRzTWFya2Rvd259LGUucHJvdG90eXBlLmRvZXNTdXBwb3J0c0NvbW1pdENoYXJhY3RlcnM9ZnVuY3Rpb24oKXtpZighZW8odGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnMpKXt2YXIgZT10aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQmJnRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudC5jb21wbGV0aW9uO3RoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzPWUmJmUuY29tcGxldGlvbkl0ZW0mJiEhZS5jb21wbGV0aW9uSXRlbS5jb21taXRDaGFyYWN0ZXJzU3VwcG9ydH1yZXR1cm4gdGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnN9LGV9KCksenM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zY2hlbWFTZXJ2aWNlPWUsdGhpcy5jb250cmlidXRpb25zPXQsdGhpcy5wcm9taXNlPW58fFByb21pc2V9cmV0dXJuIGUucHJvdG90eXBlLmRvSG92ZXI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUub2Zmc2V0QXQodCksaT1uLmdldE5vZGVGcm9tT2Zmc2V0KHIpO2lmKCFpfHwoIm9iamVjdCI9PT1pLnR5cGV8fCJhcnJheSI9PT1pLnR5cGUpJiZyPmkub2Zmc2V0KzEmJnI8aS5vZmZzZXQraS5sZW5ndGgtMSlyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobnVsbCk7dmFyIG89aTtpZigic3RyaW5nIj09PWkudHlwZSl7dmFyIHM9aS5wYXJlbnQ7aWYocyYmInByb3BlcnR5Ij09PXMudHlwZSYmcy5rZXlOb2RlPT09aSYmIShpPXMudmFsdWVOb2RlKSlyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobnVsbCl9Zm9yKHZhciBhPWlpLmNyZWF0ZShlLnBvc2l0aW9uQXQoby5vZmZzZXQpLGUucG9zaXRpb25BdChvLm9mZnNldCtvLmxlbmd0aCkpLGw9ZnVuY3Rpb24oZSl7cmV0dXJue2NvbnRlbnRzOmUscmFuZ2U6YX19LHU9S3MoaSksYz10aGlzLmNvbnRyaWJ1dGlvbnMubGVuZ3RoLTE7Yz49MDtjLS0pe3ZhciBoPXRoaXMuY29udHJpYnV0aW9uc1tjXS5nZXRJbmZvQ29udHJpYnV0aW9uKGUudXJpLHUpO2lmKGgpcmV0dXJuIGgudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSl9KSl9cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSxuKS50aGVuKChmdW5jdGlvbihlKXtpZihlJiZpKXt2YXIgdD1uLmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxpLm9mZnNldCkscj12b2lkIDAsbz12b2lkIDAscz12b2lkIDAsYT12b2lkIDA7dC5ldmVyeSgoZnVuY3Rpb24oZSl7aWYoZS5ub2RlPT09aSYmIWUuaW52ZXJ0ZWQmJmUuc2NoZW1hJiYocj1yfHxlLnNjaGVtYS50aXRsZSxvPW98fGUuc2NoZW1hLm1hcmtkb3duRGVzY3JpcHRpb258fEdzKGUuc2NoZW1hLmRlc2NyaXB0aW9uKSxlLnNjaGVtYS5lbnVtKSl7dmFyIHQ9ZS5zY2hlbWEuZW51bS5pbmRleE9mKERzKGkpKTtlLnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnM/cz1lLnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbdF06ZS5zY2hlbWEuZW51bURlc2NyaXB0aW9ucyYmKHM9R3MoZS5zY2hlbWEuZW51bURlc2NyaXB0aW9uc1t0XSkpLHMmJiJzdHJpbmciIT10eXBlb2YoYT1lLnNjaGVtYS5lbnVtW3RdKSYmKGE9SlNPTi5zdHJpbmdpZnkoYSkpfXJldHVybiEwfSkpO3ZhciB1PSIiO3JldHVybiByJiYodT1HcyhyKSksbyYmKHUubGVuZ3RoPjAmJih1Kz0iXG5cbiIpLHUrPW8pLHMmJih1Lmxlbmd0aD4wJiYodSs9IlxuXG4iKSx1Kz0iYCIuY29uY2F0KGZ1bmN0aW9uKGUpe2lmKC0xIT09ZS5pbmRleE9mKCJgIikpcmV0dXJuImBgICIrZSsiIGBgIjtyZXR1cm4gZX0oYSksImA6ICIpLmNvbmNhdChzKSksbChbdV0pfXJldHVybiBudWxsfSkpfSxlfSgpO2Z1bmN0aW9uIEdzKGUpe2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvKFteXG5ccl0pKFxyP1xuKShbXlxuXHJdKS9nbSwiJDFcblxuJDMiKS5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9dmFyIEpzPXlzKCksWHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5qc29uU2NoZW1hU2VydmljZT1lLHRoaXMucHJvbWlzZT10LHRoaXMudmFsaWRhdGlvbkVuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmNvbmZpZ3VyZT1mdW5jdGlvbihlKXtlJiYodGhpcy52YWxpZGF0aW9uRW5hYmxlZD0hMSE9PWUudmFsaWRhdGUsdGhpcy5jb21tZW50U2V2ZXJpdHk9ZS5hbGxvd0NvbW1lbnRzP3ZvaWQgMDpTaS5FcnJvcil9LGUucHJvdG90eXBlLmRvVmFsaWRhdGlvbj1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzO2lmKCF0aGlzLnZhbGlkYXRpb25FbmFibGVkKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShbXSk7dmFyIG89W10scz17fSxhPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmFuZ2Uuc3RhcnQubGluZSsiICIrZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXIrIiAiK2UubWVzc2FnZTtzW3RdfHwoc1t0XT0hMCxvLnB1c2goZSkpfSxsPWZ1bmN0aW9uKHIpe3ZhciBzPShudWxsPT1uP3ZvaWQgMDpuLnRyYWlsaW5nQ29tbWFzKT9lYShuLnRyYWlsaW5nQ29tbWFzKTpTaS5FcnJvcixsPShudWxsPT1uP3ZvaWQgMDpuLmNvbW1lbnRzKT9lYShuLmNvbW1lbnRzKTppLmNvbW1lbnRTZXZlcml0eSx1PShudWxsPT1uP3ZvaWQgMDpuLnNjaGVtYVZhbGlkYXRpb24pP2VhKG4uc2NoZW1hVmFsaWRhdGlvbik6U2kuV2FybmluZyxjPShudWxsPT1uP3ZvaWQgMDpuLnNjaGVtYVJlcXVlc3QpP2VhKG4uc2NoZW1hUmVxdWVzdCk6U2kuV2FybmluZztpZihyKXtpZihyLmVycm9ycy5sZW5ndGgmJnQucm9vdCYmYyl7dmFyIGg9dC5yb290LGQ9Im9iamVjdCI9PT1oLnR5cGU/aC5wcm9wZXJ0aWVzWzBdOnZvaWQgMDtpZihkJiYiJHNjaGVtYSI9PT1kLmtleU5vZGUudmFsdWUpe3ZhciBmPWQudmFsdWVOb2RlfHxkLG09aWkuY3JlYXRlKGUucG9zaXRpb25BdChmLm9mZnNldCksZS5wb3NpdGlvbkF0KGYub2Zmc2V0K2YubGVuZ3RoKSk7YShMaS5jcmVhdGUobSxyLmVycm9yc1swXSxjLGNzLlNjaGVtYVJlc29sdmVFcnJvcikpfWVsc2V7bT1paS5jcmVhdGUoZS5wb3NpdGlvbkF0KGgub2Zmc2V0KSxlLnBvc2l0aW9uQXQoaC5vZmZzZXQrMSkpO2EoTGkuY3JlYXRlKG0sci5lcnJvcnNbMF0sYyxjcy5TY2hlbWFSZXNvbHZlRXJyb3IpKX19ZWxzZSBpZih1KXt2YXIgZz10LnZhbGlkYXRlKGUsci5zY2hlbWEsdSk7ZyYmZy5mb3JFYWNoKGEpfVlzKHIuc2NoZW1hKSYmKGw9dm9pZCAwKSxRcyhyLnNjaGVtYSkmJihzPXZvaWQgMCl9Zm9yKHZhciBwPTAsdj10LnN5bnRheEVycm9ycztwPHYubGVuZ3RoO3ArKyl7dmFyIGI9dltwXTtpZihiLmNvZGU9PT1jcy5UcmFpbGluZ0NvbW1hKXtpZigibnVtYmVyIiE9dHlwZW9mIHMpY29udGludWU7Yi5zZXZlcml0eT1zfWEoYil9aWYoIm51bWJlciI9PXR5cGVvZiBsKXt2YXIgeT1KcygiSW52YWxpZENvbW1lbnRUb2tlbiIsIkNvbW1lbnRzIGFyZSBub3QgcGVybWl0dGVkIGluIEpTT04uIik7dC5jb21tZW50cy5mb3JFYWNoKChmdW5jdGlvbihlKXthKExpLmNyZWF0ZShlLHksbCxjcy5Db21tZW50Tm90UGVybWl0dGVkKSl9KSl9cmV0dXJuIG99O2lmKHIpe3ZhciB1PXIuaWR8fCJzY2hlbWFzZXJ2aWNlOi8vdW50aXRsZWQvIitacysrO3JldHVybiB0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWEodSxbXSxyKS5nZXRSZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBsKGUpfSkpfXJldHVybiB0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBsKGUpfSkpfSxlLnByb3RvdHlwZS5nZXRMYW5ndWFnZVN0YXR1cz1mdW5jdGlvbihlLHQpe3JldHVybntzY2hlbWFzOnRoaXMuanNvblNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hVVJJc0ZvclJlc291cmNlKGUudXJpLHQpfX0sZX0oKSxacz0wO2Z1bmN0aW9uIFlzKGUpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7aWYodG8oZS5hbGxvd0NvbW1lbnRzKSlyZXR1cm4gZS5hbGxvd0NvbW1lbnRzO2lmKGUuYWxsT2YpZm9yKHZhciB0PTAsbj1lLmFsbE9mO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1ZcyhuW3RdKTtpZih0byhyKSlyZXR1cm4gcn19fWZ1bmN0aW9uIFFzKGUpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7aWYodG8oZS5hbGxvd1RyYWlsaW5nQ29tbWFzKSlyZXR1cm4gZS5hbGxvd1RyYWlsaW5nQ29tbWFzO3ZhciB0PWU7aWYodG8odC5hbGxvd3NUcmFpbGluZ0NvbW1hcykpcmV0dXJuIHQuYWxsb3dzVHJhaWxpbmdDb21tYXM7aWYoZS5hbGxPZilmb3IodmFyIG49MCxyPWUuYWxsT2Y7bjxyLmxlbmd0aDtuKyspe3ZhciBpPVFzKHJbbl0pO2lmKHRvKGkpKXJldHVybiBpfX19ZnVuY3Rpb24gZWEoZSl7c3dpdGNoKGUpe2Nhc2UiZXJyb3IiOnJldHVybiBTaS5FcnJvcjtjYXNlIndhcm5pbmciOnJldHVybiBTaS5XYXJuaW5nO2Nhc2UiaWdub3JlIjpyZXR1cm59fXZhciB0YT00OCxuYT01NyxyYT02NSxpYT05NyxvYT0xMDI7ZnVuY3Rpb24gc2EoZSl7cmV0dXJuIGU8dGE/MDplPD1uYT9lLXRhOihlPGlhJiYoZSs9aWEtcmEpLGU+PWlhJiZlPD1vYT9lLWlhKzEwOjApfWZ1bmN0aW9uIGFhKGUpe2lmKCIjIj09PWVbMF0pc3dpdGNoKGUubGVuZ3RoKXtjYXNlIDQ6cmV0dXJue3JlZDoxNypzYShlLmNoYXJDb2RlQXQoMSkpLzI1NSxncmVlbjoxNypzYShlLmNoYXJDb2RlQXQoMikpLzI1NSxibHVlOjE3KnNhKGUuY2hhckNvZGVBdCgzKSkvMjU1LGFscGhhOjF9O2Nhc2UgNTpyZXR1cm57cmVkOjE3KnNhKGUuY2hhckNvZGVBdCgxKSkvMjU1LGdyZWVuOjE3KnNhKGUuY2hhckNvZGVBdCgyKSkvMjU1LGJsdWU6MTcqc2EoZS5jaGFyQ29kZUF0KDMpKS8yNTUsYWxwaGE6MTcqc2EoZS5jaGFyQ29kZUF0KDQpKS8yNTV9O2Nhc2UgNzpyZXR1cm57cmVkOigxNipzYShlLmNoYXJDb2RlQXQoMSkpK3NhKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjooMTYqc2EoZS5jaGFyQ29kZUF0KDMpKStzYShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZTooMTYqc2EoZS5jaGFyQ29kZUF0KDUpKStzYShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6MX07Y2FzZSA5OnJldHVybntyZWQ6KDE2KnNhKGUuY2hhckNvZGVBdCgxKSkrc2EoZS5jaGFyQ29kZUF0KDIpKSkvMjU1LGdyZWVuOigxNipzYShlLmNoYXJDb2RlQXQoMykpK3NhKGUuY2hhckNvZGVBdCg0KSkpLzI1NSxibHVlOigxNipzYShlLmNoYXJDb2RlQXQoNSkpK3NhKGUuY2hhckNvZGVBdCg2KSkpLzI1NSxhbHBoYTooMTYqc2EoZS5jaGFyQ29kZUF0KDcpKStzYShlLmNoYXJDb2RlQXQoOCkpKS8yNTV9fX12YXIgbGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuc2NoZW1hU2VydmljZT1lfXJldHVybiBlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPXtyZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFfSk7dmFyIGk9dC5yb290O2lmKCFpKXJldHVybltdO3ZhciBvPW4ucmVzdWx0TGltaXR8fE51bWJlci5NQVhfVkFMVUUscz1lLnVyaTtpZigoInZzY29kZTovL2RlZmF1bHRzZXR0aW5ncy9rZXliaW5kaW5ncy5qc29uIj09PXN8fG5vKHMudG9Mb3dlckNhc2UoKSwiL3VzZXIva2V5YmluZGluZ3MuanNvbiIpKSYmImFycmF5Ij09PWkudHlwZSl7Zm9yKHZhciBhPVtdLGw9MCx1PWkuaXRlbXM7bDx1Lmxlbmd0aDtsKyspe3ZhciBjPXVbbF07aWYoIm9iamVjdCI9PT1jLnR5cGUpZm9yKHZhciBoPTAsZD1jLnByb3BlcnRpZXM7aDxkLmxlbmd0aDtoKyspe3ZhciBmPWRbaF07aWYoImtleSI9PT1mLmtleU5vZGUudmFsdWUmJmYudmFsdWVOb2RlKXt2YXIgbT1zaS5jcmVhdGUoZS51cmksdWEoZSxjKSk7aWYoYS5wdXNoKHtuYW1lOkRzKGYudmFsdWVOb2RlKSxraW5kOlBvLkZ1bmN0aW9uLGxvY2F0aW9uOm19KSwtLW88PTApcmV0dXJuIG4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChzKSxhfX19cmV0dXJuIGF9Zm9yKHZhciBnPVt7bm9kZTppLGNvbnRhaW5lck5hbWU6IiJ9XSxwPTAsdj0hMSxiPVtdLHk9ZnVuY3Rpb24odCxuKXsiYXJyYXkiPT09dC50eXBlP3QuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSYmZy5wdXNoKHtub2RlOmUsY29udGFpbmVyTmFtZTpufSl9KSk6Im9iamVjdCI9PT10LnR5cGUmJnQucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LnZhbHVlTm9kZTtpZihpKWlmKG8+MCl7by0tO3ZhciBzPXNpLmNyZWF0ZShlLnVyaSx1YShlLHQpKSxhPW4/bisiLiIrdC5rZXlOb2RlLnZhbHVlOnQua2V5Tm9kZS52YWx1ZTtiLnB1c2goe25hbWU6ci5nZXRLZXlMYWJlbCh0KSxraW5kOnIuZ2V0U3ltYm9sS2luZChpLnR5cGUpLGxvY2F0aW9uOnMsY29udGFpbmVyTmFtZTpufSksZy5wdXNoKHtub2RlOmksY29udGFpbmVyTmFtZTphfSl9ZWxzZSB2PSEwfSkpfTtwPGcubGVuZ3RoOyl7dmFyIEM9Z1twKytdO3koQy5ub2RlLEMuY29udGFpbmVyTmFtZSl9cmV0dXJuIHYmJm4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChzKSxifSxlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzMj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17cmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRX0pO3ZhciBpPXQucm9vdDtpZighaSlyZXR1cm5bXTt2YXIgbz1uLnJlc3VsdExpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFLHM9ZS51cmk7aWYoKCJ2c2NvZGU6Ly9kZWZhdWx0c2V0dGluZ3Mva2V5YmluZGluZ3MuanNvbiI9PT1zfHxubyhzLnRvTG93ZXJDYXNlKCksIi91c2VyL2tleWJpbmRpbmdzLmpzb24iKSkmJiJhcnJheSI9PT1pLnR5cGUpe2Zvcih2YXIgYT1bXSxsPTAsdT1pLml0ZW1zO2w8dS5sZW5ndGg7bCsrKXt2YXIgYz11W2xdO2lmKCJvYmplY3QiPT09Yy50eXBlKWZvcih2YXIgaD0wLGQ9Yy5wcm9wZXJ0aWVzO2g8ZC5sZW5ndGg7aCsrKXt2YXIgZj1kW2hdO2lmKCJrZXkiPT09Zi5rZXlOb2RlLnZhbHVlJiZmLnZhbHVlTm9kZSl7dmFyIG09dWEoZSxjKSxnPXVhKGUsZi5rZXlOb2RlKTtpZihhLnB1c2goe25hbWU6RHMoZi52YWx1ZU5vZGUpLGtpbmQ6UG8uRnVuY3Rpb24scmFuZ2U6bSxzZWxlY3Rpb25SYW5nZTpnfSksLS1vPD0wKXJldHVybiBuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQocyksYX19fXJldHVybiBhfWZvcih2YXIgcD1bXSx2PVt7bm9kZTppLHJlc3VsdDpwfV0sYj0wLHk9ITEsQz1mdW5jdGlvbih0LG4peyJhcnJheSI9PT10LnR5cGU/dC5pdGVtcy5mb3JFYWNoKChmdW5jdGlvbih0LGkpe2lmKHQpaWYobz4wKXtvLS07dmFyIHM9dWEoZSx0KSxhPXMsbD17bmFtZTpTdHJpbmcoaSksa2luZDpyLmdldFN5bWJvbEtpbmQodC50eXBlKSxyYW5nZTpzLHNlbGVjdGlvblJhbmdlOmEsY2hpbGRyZW46W119O24ucHVzaChsKSx2LnB1c2goe3Jlc3VsdDpsLmNoaWxkcmVuLG5vZGU6dH0pfWVsc2UgeT0hMH0pKToib2JqZWN0Ij09PXQudHlwZSYmdC5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXQudmFsdWVOb2RlO2lmKGkpaWYobz4wKXtvLS07dmFyIHM9dWEoZSx0KSxhPXVhKGUsdC5rZXlOb2RlKSxsPVtdLHU9e25hbWU6ci5nZXRLZXlMYWJlbCh0KSxraW5kOnIuZ2V0U3ltYm9sS2luZChpLnR5cGUpLHJhbmdlOnMsc2VsZWN0aW9uUmFuZ2U6YSxjaGlsZHJlbjpsLGRldGFpbDpyLmdldERldGFpbChpKX07bi5wdXNoKHUpLHYucHVzaCh7cmVzdWx0Omwsbm9kZTppfSl9ZWxzZSB5PSEwfSkpfTtiPHYubGVuZ3RoOyl7dmFyIF89dltiKytdO0MoXy5ub2RlLF8ucmVzdWx0KX1yZXR1cm4geSYmbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHMpLHB9LGUucHJvdG90eXBlLmdldFN5bWJvbEtpbmQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gUG8uTW9kdWxlO2Nhc2Uic3RyaW5nIjpyZXR1cm4gUG8uU3RyaW5nO2Nhc2UibnVtYmVyIjpyZXR1cm4gUG8uTnVtYmVyO2Nhc2UiYXJyYXkiOnJldHVybiBQby5BcnJheTtjYXNlImJvb2xlYW4iOnJldHVybiBQby5Cb29sZWFuO2RlZmF1bHQ6cmV0dXJuIFBvLlZhcmlhYmxlfX0sZS5wcm90b3R5cGUuZ2V0S2V5TGFiZWw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXlOb2RlLnZhbHVlO3JldHVybiB0JiYodD10LnJlcGxhY2UoL1tcbl0vZywi4oa1IikpLHQmJnQudHJpbSgpP3Q6JyInLmNvbmNhdCh0LCciJyl9LGUucHJvdG90eXBlLmdldERldGFpbD1mdW5jdGlvbihlKXtpZihlKXJldHVybiJib29sZWFuIj09PWUudHlwZXx8Im51bWJlciI9PT1lLnR5cGV8fCJudWxsIj09PWUudHlwZXx8InN0cmluZyI9PT1lLnR5cGU/U3RyaW5nKGUudmFsdWUpOiJhcnJheSI9PT1lLnR5cGU/ZS5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJbXSI6Im9iamVjdCI9PT1lLnR5cGU/ZS5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJ7fSI6dm9pZCAwfSxlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRDb2xvcnM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbigoZnVuY3Rpb24ocil7dmFyIGk9W107aWYocilmb3IodmFyIG89biYmIm51bWJlciI9PXR5cGVvZiBuLnJlc3VsdExpbWl0P24ucmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRSxzPXt9LGE9MCxsPXQuZ2V0TWF0Y2hpbmdTY2hlbWFzKHIuc2NoZW1hKTthPGwubGVuZ3RoO2ErKyl7dmFyIHU9bFthXTtpZighdS5pbnZlcnRlZCYmdS5zY2hlbWEmJigiY29sb3IiPT09dS5zY2hlbWEuZm9ybWF0fHwiY29sb3ItaGV4Ij09PXUuc2NoZW1hLmZvcm1hdCkmJnUubm9kZSYmInN0cmluZyI9PT11Lm5vZGUudHlwZSl7dmFyIGM9U3RyaW5nKHUubm9kZS5vZmZzZXQpO2lmKCFzW2NdKXt2YXIgaD1hYShEcyh1Lm5vZGUpKTtpZihoKXt2YXIgZD11YShlLHUubm9kZSk7aS5wdXNoKHtjb2xvcjpoLHJhbmdlOmR9KX1pZihzW2NdPSEwLC0tbzw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGUudXJpKSxpfX19cmV0dXJuIGl9KSl9LGUucHJvdG90eXBlLmdldENvbG9yUHJlc2VudGF0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPVtdLHM9TWF0aC5yb3VuZCgyNTUqbi5yZWQpLGE9TWF0aC5yb3VuZCgyNTUqbi5ncmVlbiksbD1NYXRoLnJvdW5kKDI1NSpuLmJsdWUpO2Z1bmN0aW9uIHUoZSl7dmFyIHQ9ZS50b1N0cmluZygxNik7cmV0dXJuIDIhPT10Lmxlbmd0aD8iMCIrdDp0fXJldHVybiBpPTE9PT1uLmFscGhhPyIjIi5jb25jYXQodShzKSkuY29uY2F0KHUoYSkpLmNvbmNhdCh1KGwpKToiIyIuY29uY2F0KHUocykpLmNvbmNhdCh1KGEpKS5jb25jYXQodShsKSkuY29uY2F0KHUoTWF0aC5yb3VuZCgyNTUqbi5hbHBoYSkpKSxvLnB1c2goe2xhYmVsOmksdGV4dEVkaXQ6VGkucmVwbGFjZShyLEpTT04uc3RyaW5naWZ5KGkpKX0pLG99LGV9KCk7ZnVuY3Rpb24gdWEoZSx0KXtyZXR1cm4gaWkuY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoKSl9dmFyIGNhLGhhLGRhLGZhLG1hLGdhLHBhPXlzKCksdmE9e3NjaGVtYUFzc29jaWF0aW9uczpbXSxzY2hlbWFzOnsiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEjIjp7JHJlZjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn0sImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI6eyRzY2hlbWE6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyIsZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxwb3NpdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0scG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOnt0eXBlOiJzdHJpbmciLGVudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfX0sdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntpZDp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6e30sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsZXhjbHVzaXZlTWluaW11bTohMH0sbWF4aW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWF4aW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWluaW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWluaW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4TGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5MZW5ndGg6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDp7fX0sbWF4SXRlbXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pbkl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHVuaXF1ZUl0ZW1zOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtYXhQcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5Qcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHJlcXVpcmVkOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxkZWZpbml0aW9uczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwYXR0ZXJuUHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxlbnVtOnt0eXBlOiJhcnJheSIsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0OnthbnlPZjpbe3R5cGU6InN0cmluZyIsZW51bTpbImRhdGUtdGltZSIsInVyaSIsImVtYWlsIiwiaG9zdG5hbWUiLCJpcHY0IiwiaXB2NiIsInJlZ2V4Il19LHt0eXBlOiJzdHJpbmcifV19LGFsbE9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LGFueU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG9uZU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG5vdDp7YWxsT2Y6W3skcmVmOiIjIn1dfX0sZGVwZW5kZW5jaWVzOntleGNsdXNpdmVNYXhpbXVtOlsibWF4aW11bSJdLGV4Y2x1c2l2ZU1pbmltdW06WyJtaW5pbXVtIl19LGRlZmF1bHQ6e319LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiOntkZWZpbml0aW9uczp7c2NoZW1hQXJyYXk6e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLGl0ZW1zOnskcmVmOiIjIn19LG5vbk5lZ2F0aXZlSW50ZWdlcjp7dHlwZToiaW50ZWdlciIsbWluaW11bTowfSxub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LHtkZWZhdWx0OjB9XX0sc2ltcGxlVHlwZXM6e2VudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSx1bmlxdWVJdGVtczohMCxkZWZhdWx0OltdfX0sdHlwZTpbIm9iamVjdCIsImJvb2xlYW4iXSxwcm9wZXJ0aWVzOnskaWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJHNjaGVtYTp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRyZWY6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJGNvbW1lbnQ6e3R5cGU6InN0cmluZyJ9LHRpdGxlOnt0eXBlOiJzdHJpbmcifSxkZXNjcmlwdGlvbjp7dHlwZToic3RyaW5nIn0sZGVmYXVsdDohMCxyZWFkT25seTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sZXhhbXBsZXM6e3R5cGU6ImFycmF5IixpdGVtczohMH0sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixleGNsdXNpdmVNaW5pbXVtOjB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6Im51bWJlciJ9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5MZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxwYXR0ZXJuOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoicmVnZXgifSxhZGRpdGlvbmFsSXRlbXM6eyRyZWY6IiMifSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDohMH0sbWF4SXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluSXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY29udGFpbnM6eyRyZWY6IiMifSxtYXhQcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pblByb3BlcnRpZXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxyZXF1aXJlZDp7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxwcm9wZXJ0eU5hbWVzOntmb3JtYXQ6InJlZ2V4In0sZGVmYXVsdDp7fX0sZGVwZW5kZW5jaWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX19LHByb3BlcnR5TmFtZXM6eyRyZWY6IiMifSxjb25zdDohMCxlbnVtOnt0eXBlOiJhcnJheSIsaXRlbXM6ITAsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0Ont0eXBlOiJzdHJpbmcifSxjb250ZW50TWVkaWFUeXBlOnt0eXBlOiJzdHJpbmcifSxjb250ZW50RW5jb2Rpbmc6e3R5cGU6InN0cmluZyJ9LGlmOnskcmVmOiIjIn0sdGhlbjp7JHJlZjoiIyJ9LGVsc2U6eyRyZWY6IiMifSxhbGxPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LGFueU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sb25lT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxub3Q6eyRyZWY6IiMifX0sZGVmYXVsdDohMH19fSxiYT17aWQ6cGEoInNjaGVtYS5qc29uLmlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkc2NoZW1hOnBhKCJzY2hlbWEuanNvbi4kc2NoZW1hIiwiVGhlIHNjaGVtYSB0byB2ZXJpZnkgdGhpcyBkb2N1bWVudCBhZ2FpbnN0LiIpLHRpdGxlOnBhKCJzY2hlbWEuanNvbi50aXRsZSIsIkEgZGVzY3JpcHRpdmUgdGl0bGUgb2YgdGhlIGVsZW1lbnQuIiksZGVzY3JpcHRpb246cGEoInNjaGVtYS5qc29uLmRlc2NyaXB0aW9uIiwiQSBsb25nIGRlc2NyaXB0aW9uIG9mIHRoZSBlbGVtZW50LiBVc2VkIGluIGhvdmVyIG1lbnVzIGFuZCBzdWdnZXN0aW9ucy4iKSxkZWZhdWx0OnBhKCJzY2hlbWEuanNvbi5kZWZhdWx0IiwiQSBkZWZhdWx0IHZhbHVlLiBVc2VkIGJ5IHN1Z2dlc3Rpb25zLiIpLG11bHRpcGxlT2Y6cGEoInNjaGVtYS5qc29uLm11bHRpcGxlT2YiLCJBIG51bWJlciB0aGF0IHNob3VsZCBjbGVhbmx5IGRpdmlkZSB0aGUgY3VycmVudCB2YWx1ZSAoaS5lLiBoYXZlIG5vIHJlbWFpbmRlcikuIiksbWF4aW11bTpwYSgic2NoZW1hLmpzb24ubWF4aW11bSIsIlRoZSBtYXhpbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWF4aW11bTpwYSgic2NoZW1hLmpzb24uZXhjbHVzaXZlTWF4aW11bSIsIk1ha2VzIHRoZSBtYXhpbXVtIHByb3BlcnR5IGV4Y2x1c2l2ZS4iKSxtaW5pbXVtOnBhKCJzY2hlbWEuanNvbi5taW5pbXVtIiwiVGhlIG1pbmltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNaW5pbXVtOnBhKCJzY2hlbWEuanNvbi5leGNsdXNpdmVNaW5pbnVtIiwiTWFrZXMgdGhlIG1pbmltdW0gcHJvcGVydHkgZXhjbHVzaXZlLiIpLG1heExlbmd0aDpwYSgic2NoZW1hLmpzb24ubWF4TGVuZ3RoIiwiVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLG1pbkxlbmd0aDpwYSgic2NoZW1hLmpzb24ubWluTGVuZ3RoIiwiVGhlIG1pbmltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLHBhdHRlcm46cGEoInNjaGVtYS5qc29uLnBhdHRlcm4iLCJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgc3RyaW5nIGFnYWluc3QuIEl0IGlzIG5vdCBpbXBsaWNpdGx5IGFuY2hvcmVkLiIpLGFkZGl0aW9uYWxJdGVtczpwYSgic2NoZW1hLmpzb24uYWRkaXRpb25hbEl0ZW1zIiwiRm9yIGFycmF5cywgb25seSB3aGVuIGl0ZW1zIGlzIHNldCBhcyBhbiBhcnJheS4gSWYgaXQgaXMgYSBzY2hlbWEsIHRoZW4gdGhpcyBzY2hlbWEgdmFsaWRhdGVzIGl0ZW1zIGFmdGVyIHRoZSBvbmVzIHNwZWNpZmllZCBieSB0aGUgaXRlbXMgYXJyYXkuIElmIGl0IGlzIGZhbHNlLCB0aGVuIGFkZGl0aW9uYWwgaXRlbXMgd2lsbCBjYXVzZSB2YWxpZGF0aW9uIHRvIGZhaWwuIiksaXRlbXM6cGEoInNjaGVtYS5qc29uLml0ZW1zIiwiRm9yIGFycmF5cy4gQ2FuIGVpdGhlciBiZSBhIHNjaGVtYSB0byB2YWxpZGF0ZSBldmVyeSBlbGVtZW50IGFnYWluc3Qgb3IgYW4gYXJyYXkgb2Ygc2NoZW1hcyB0byB2YWxpZGF0ZSBlYWNoIGl0ZW0gYWdhaW5zdCBpbiBvcmRlciAodGhlIGZpcnN0IHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgc2Vjb25kIHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBzZWNvbmQgZWxlbWVudCwgYW5kIHNvIG9uLiIpLG1heEl0ZW1zOnBhKCJzY2hlbWEuanNvbi5tYXhJdGVtcyIsIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBpbnNpZGUgYW4gYXJyYXkuIEluY2x1c2l2ZS4iKSxtaW5JdGVtczpwYSgic2NoZW1hLmpzb24ubWluSXRlbXMiLCJUaGUgbWluaW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgaW5zaWRlIGFuIGFycmF5LiBJbmNsdXNpdmUuIiksdW5pcXVlSXRlbXM6cGEoInNjaGVtYS5qc29uLnVuaXF1ZUl0ZW1zIiwiSWYgYWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkgbXVzdCBiZSB1bmlxdWUuIERlZmF1bHRzIHRvIGZhbHNlLiIpLG1heFByb3BlcnRpZXM6cGEoInNjaGVtYS5qc29uLm1heFByb3BlcnRpZXMiLCJUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvcGVydGllcyBhbiBvYmplY3QgY2FuIGhhdmUuIEluY2x1c2l2ZS4iKSxtaW5Qcm9wZXJ0aWVzOnBhKCJzY2hlbWEuanNvbi5taW5Qcm9wZXJ0aWVzIiwiVGhlIG1pbmltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMgYW4gb2JqZWN0IGNhbiBoYXZlLiBJbmNsdXNpdmUuIikscmVxdWlyZWQ6cGEoInNjaGVtYS5qc29uLnJlcXVpcmVkIiwiQW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgcHJvcGVydGllcyByZXF1aXJlZCBvbiB0aGlzIG9iamVjdC4iKSxhZGRpdGlvbmFsUHJvcGVydGllczpwYSgic2NoZW1hLmpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMiLCJFaXRoZXIgYSBzY2hlbWEgb3IgYSBib29sZWFuLiBJZiBhIHNjaGVtYSwgdGhlbiB1c2VkIHRvIHZhbGlkYXRlIGFsbCBwcm9wZXJ0aWVzIG5vdCBtYXRjaGVkIGJ5ICdwcm9wZXJ0aWVzJyBvciAncGF0dGVyblByb3BlcnRpZXMnLiBJZiBmYWxzZSwgdGhlbiBhbnkgcHJvcGVydGllcyBub3QgbWF0Y2hlZCBieSBlaXRoZXIgd2lsbCBjYXVzZSB0aGlzIHNjaGVtYSB0byBmYWlsLiIpLGRlZmluaXRpb25zOnBhKCJzY2hlbWEuanNvbi5kZWZpbml0aW9ucyIsIk5vdCB1c2VkIGZvciB2YWxpZGF0aW9uLiBQbGFjZSBzdWJzY2hlbWFzIGhlcmUgdGhhdCB5b3Ugd2lzaCB0byByZWZlcmVuY2UgaW5saW5lIHdpdGggJHJlZi4iKSxwcm9wZXJ0aWVzOnBhKCJzY2hlbWEuanNvbi5wcm9wZXJ0aWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgZWFjaCBwcm9wZXJ0eS4iKSxwYXR0ZXJuUHJvcGVydGllczpwYSgic2NoZW1hLmpzb24ucGF0dGVyblByb3BlcnRpZXMiLCJBIG1hcCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIG9uIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIG1hdGNoaW5nIHByb3BlcnRpZXMuIiksZGVwZW5kZW5jaWVzOnBhKCJzY2hlbWEuanNvbi5kZXBlbmRlbmNpZXMiLCJBIG1hcCBvZiBwcm9wZXJ0eSBuYW1lcyB0byBlaXRoZXIgYW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgb3IgYSBzY2hlbWEuIEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG1lYW5zIHRoZSBwcm9wZXJ0eSBuYW1lZCBpbiB0aGUga2V5IGRlcGVuZHMgb24gdGhlIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5IGJlaW5nIHByZXNlbnQgaW4gdGhlIG9iamVjdCBpbiBvcmRlciB0byBiZSB2YWxpZC4gSWYgdGhlIHZhbHVlIGlzIGEgc2NoZW1hLCB0aGVuIHRoZSBzY2hlbWEgaXMgb25seSBhcHBsaWVkIHRvIHRoZSBvYmplY3QgaWYgdGhlIHByb3BlcnR5IGluIHRoZSBrZXkgZXhpc3RzIG9uIHRoZSBvYmplY3QuIiksZW51bTpwYSgic2NoZW1hLmpzb24uZW51bSIsIlRoZSBzZXQgb2YgbGl0ZXJhbCB2YWx1ZXMgdGhhdCBhcmUgdmFsaWQuIiksdHlwZTpwYSgic2NoZW1hLmpzb24udHlwZSIsIkVpdGhlciBhIHN0cmluZyBvZiBvbmUgb2YgdGhlIGJhc2ljIHNjaGVtYSB0eXBlcyAobnVtYmVyLCBpbnRlZ2VyLCBudWxsLCBhcnJheSwgb2JqZWN0LCBib29sZWFuLCBzdHJpbmcpIG9yIGFuIGFycmF5IG9mIHN0cmluZ3Mgc3BlY2lmeWluZyBhIHN1YnNldCBvZiB0aG9zZSB0eXBlcy4iKSxmb3JtYXQ6cGEoInNjaGVtYS5qc29uLmZvcm1hdCIsIkRlc2NyaWJlcyB0aGUgZm9ybWF0IGV4cGVjdGVkIGZvciB0aGUgdmFsdWUuIiksYWxsT2Y6cGEoInNjaGVtYS5qc29uLmFsbE9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgYWxsIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksYW55T2Y6cGEoInNjaGVtYS5qc29uLmFueU9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgd2hlcmUgYXQgbGVhc3Qgb25lIG11c3QgbWF0Y2guIiksb25lT2Y6cGEoInNjaGVtYS5qc29uLm9uZU9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgZXhhY3RseSBvbmUgb2Ygd2hpY2ggbXVzdCBtYXRjaC4iKSxub3Q6cGEoInNjaGVtYS5qc29uLm5vdCIsIkEgc2NoZW1hIHdoaWNoIG11c3Qgbm90IG1hdGNoLiIpLCRpZDpwYSgic2NoZW1hLmpzb24uJGlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkcmVmOnBhKCJzY2hlbWEuanNvbi4kcmVmIiwiUmVmZXJlbmNlIGEgZGVmaW5pdGlvbiBob3N0ZWQgb24gYW55IGxvY2F0aW9uLiIpLCRjb21tZW50OnBhKCJzY2hlbWEuanNvbi4kY29tbWVudCIsIkNvbW1lbnRzIGZyb20gc2NoZW1hIGF1dGhvcnMgdG8gcmVhZGVycyBvciBtYWludGFpbmVycyBvZiB0aGUgc2NoZW1hLiIpLHJlYWRPbmx5OnBhKCJzY2hlbWEuanNvbi5yZWFkT25seSIsIkluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgaW5zdGFuY2UgaXMgbWFuYWdlZCBleGNsdXNpdmVseSBieSB0aGUgb3duaW5nIGF1dGhvcml0eS4iKSxleGFtcGxlczpwYSgic2NoZW1hLmpzb24uZXhhbXBsZXMiLCJTYW1wbGUgSlNPTiB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzY2hlbWEsIGZvciB0aGUgcHVycG9zZSBvZiBpbGx1c3RyYXRpbmcgdXNhZ2UuIiksY29udGFpbnM6cGEoInNjaGVtYS5qc29uLmNvbnRhaW5zIiwnQW4gYXJyYXkgaW5zdGFuY2UgaXMgdmFsaWQgYWdhaW5zdCAiY29udGFpbnMiIGlmIGF0IGxlYXN0IG9uZSBvZiBpdHMgZWxlbWVudHMgaXMgdmFsaWQgYWdhaW5zdCB0aGUgZ2l2ZW4gc2NoZW1hLicpLHByb3BlcnR5TmFtZXM6cGEoInNjaGVtYS5qc29uLnByb3BlcnR5TmFtZXMiLCJJZiB0aGUgaW5zdGFuY2UgaXMgYW4gb2JqZWN0LCB0aGlzIGtleXdvcmQgdmFsaWRhdGVzIGlmIGV2ZXJ5IHByb3BlcnR5IG5hbWUgaW4gdGhlIGluc3RhbmNlIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBwcm92aWRlZCBzY2hlbWEuIiksY29uc3Q6cGEoInNjaGVtYS5qc29uLmNvbnN0IiwiQW4gaW5zdGFuY2UgdmFsaWRhdGVzIHN1Y2Nlc3NmdWxseSBhZ2FpbnN0IHRoaXMga2V5d29yZCBpZiBpdHMgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIHRoZSBrZXl3b3JkLiIpLGNvbnRlbnRNZWRpYVR5cGU6cGEoInNjaGVtYS5qc29uLmNvbnRlbnRNZWRpYVR5cGUiLCJEZXNjcmliZXMgdGhlIG1lZGlhIHR5cGUgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksY29udGVudEVuY29kaW5nOnBhKCJzY2hlbWEuanNvbi5jb250ZW50RW5jb2RpbmciLCJEZXNjcmliZXMgdGhlIGNvbnRlbnQgZW5jb2Rpbmcgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksaWY6cGEoInNjaGVtYS5qc29uLmlmIiwnVGhlIHZhbGlkYXRpb24gb3V0Y29tZSBvZiB0aGUgImlmIiBzdWJzY2hlbWEgY29udHJvbHMgd2hpY2ggb2YgdGhlICJ0aGVuIiBvciAiZWxzZSIga2V5d29yZHMgYXJlIGV2YWx1YXRlZC4nKSx0aGVuOnBhKCJzY2hlbWEuanNvbi50aGVuIiwnVGhlICJpZiIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgc3VjY2VlZHMuJyksZWxzZTpwYSgic2NoZW1hLmpzb24uZWxzZSIsJ1RoZSAiZWxzZSIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgZmFpbHMuJyl9O2ZvcihtYSBpbiB2YS5zY2hlbWFzKWZvcihmYSBpbihjYT12YS5zY2hlbWFzW21hXSkucHJvcGVydGllcykiYm9vbGVhbiI9PXR5cGVvZihoYT1jYS5wcm9wZXJ0aWVzW2ZhXSkmJihoYT1jYS5wcm9wZXJ0aWVzW2ZhXT17fSksKGRhPWJhW2ZhXSk/aGEuZGVzY3JpcHRpb249ZGE6Y29uc29sZS5sb2coIiIuY29uY2F0KGZhLCI6IGxvY2FsaXplKCdzY2hlbWEuanNvbi4iKS5jb25jYXQoZmEsJ1wnLCAiIiknKSk7Z2E9KCgpPT57dmFyIGU9ezQ3MDplPT57ZnVuY3Rpb24gdChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KGUpKX1mdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuLHI9IiIsaT0wLG89LTEscz0wLGE9MDthPD1lLmxlbmd0aDsrK2Epe2lmKGE8ZS5sZW5ndGgpbj1lLmNoYXJDb2RlQXQoYSk7ZWxzZXtpZig0Nz09PW4pYnJlYWs7bj00N31pZig0Nz09PW4pe2lmKG89PT1hLTF8fDE9PT1zKTtlbHNlIGlmKG8hPT1hLTEmJjI9PT1zKXtpZihyLmxlbmd0aDwyfHwyIT09aXx8NDYhPT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSl8fDQ2IT09ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTIpKWlmKHIubGVuZ3RoPjIpe3ZhciBsPXIubGFzdEluZGV4T2YoIi8iKTtpZihsIT09ci5sZW5ndGgtMSl7LTE9PT1sPyhyPSIiLGk9MCk6aT0ocj1yLnNsaWNlKDAsbCkpLmxlbmd0aC0xLXIubGFzdEluZGV4T2YoIi8iKSxvPWEscz0wO2NvbnRpbnVlfX1lbHNlIGlmKDI9PT1yLmxlbmd0aHx8MT09PXIubGVuZ3RoKXtyPSIiLGk9MCxvPWEscz0wO2NvbnRpbnVlfXQmJihyLmxlbmd0aD4wP3IrPSIvLi4iOnI9Ii4uIixpPTIpfWVsc2Ugci5sZW5ndGg+MD9yKz0iLyIrZS5zbGljZShvKzEsYSk6cj1lLnNsaWNlKG8rMSxhKSxpPWEtby0xO289YSxzPTB9ZWxzZSA0Nj09PW4mJi0xIT09cz8rK3M6cz0tMX1yZXR1cm4gcn12YXIgcj17cmVzb2x2ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSxyPSIiLGk9ITEsbz1hcmd1bWVudHMubGVuZ3RoLTE7bz49LTEmJiFpO28tLSl7dmFyIHM7bz49MD9zPWFyZ3VtZW50c1tvXToodm9pZCAwPT09ZSYmKGU9cHJvY2Vzcy5jd2QoKSkscz1lKSx0KHMpLDAhPT1zLmxlbmd0aCYmKHI9cysiLyIrcixpPTQ3PT09cy5jaGFyQ29kZUF0KDApKX1yZXR1cm4gcj1uKHIsIWkpLGk/ci5sZW5ndGg+MD8iLyIrcjoiLyI6ci5sZW5ndGg+MD9yOiIuIn0sbm9ybWFsaXplOmZ1bmN0aW9uKGUpe2lmKHQoZSksMD09PWUubGVuZ3RoKXJldHVybiIuIjt2YXIgcj00Nz09PWUuY2hhckNvZGVBdCgwKSxpPTQ3PT09ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpO3JldHVybiAwIT09KGU9bihlLCFyKSkubGVuZ3RofHxyfHwoZT0iLiIpLGUubGVuZ3RoPjAmJmkmJihlKz0iLyIpLHI/Ii8iK2U6ZX0saXNBYnNvbHV0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdChlKSxlLmxlbmd0aD4wJiY0Nz09PWUuY2hhckNvZGVBdCgwKX0sam9pbjpmdW5jdGlvbigpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIGUsbj0wO248YXJndW1lbnRzLmxlbmd0aDsrK24pe3ZhciBpPWFyZ3VtZW50c1tuXTt0KGkpLGkubGVuZ3RoPjAmJih2b2lkIDA9PT1lP2U9aTplKz0iLyIraSl9cmV0dXJuIHZvaWQgMD09PWU/Ii4iOnIubm9ybWFsaXplKGUpfSxyZWxhdGl2ZTpmdW5jdGlvbihlLG4pe2lmKHQoZSksdChuKSxlPT09bilyZXR1cm4iIjtpZigoZT1yLnJlc29sdmUoZSkpPT09KG49ci5yZXNvbHZlKG4pKSlyZXR1cm4iIjtmb3IodmFyIGk9MTtpPGUubGVuZ3RoJiY0Nz09PWUuY2hhckNvZGVBdChpKTsrK2kpO2Zvcih2YXIgbz1lLmxlbmd0aCxzPW8taSxhPTE7YTxuLmxlbmd0aCYmNDc9PT1uLmNoYXJDb2RlQXQoYSk7KythKTtmb3IodmFyIGw9bi5sZW5ndGgtYSx1PXM8bD9zOmwsYz0tMSxoPTA7aDw9dTsrK2gpe2lmKGg9PT11KXtpZihsPnUpe2lmKDQ3PT09bi5jaGFyQ29kZUF0KGEraCkpcmV0dXJuIG4uc2xpY2UoYStoKzEpO2lmKDA9PT1oKXJldHVybiBuLnNsaWNlKGEraCl9ZWxzZSBzPnUmJig0Nz09PWUuY2hhckNvZGVBdChpK2gpP2M9aDowPT09aCYmKGM9MCkpO2JyZWFrfXZhciBkPWUuY2hhckNvZGVBdChpK2gpO2lmKGQhPT1uLmNoYXJDb2RlQXQoYStoKSlicmVhazs0Nz09PWQmJihjPWgpfXZhciBmPSIiO2ZvcihoPWkrYysxO2g8PW87KytoKWghPT1vJiY0NyE9PWUuY2hhckNvZGVBdChoKXx8KDA9PT1mLmxlbmd0aD9mKz0iLi4iOmYrPSIvLi4iKTtyZXR1cm4gZi5sZW5ndGg+MD9mK24uc2xpY2UoYStjKTooYSs9Yyw0Nz09PW4uY2hhckNvZGVBdChhKSYmKythLG4uc2xpY2UoYSkpfSxfbWFrZUxvbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGRpcm5hbWU6ZnVuY3Rpb24oZSl7aWYodChlKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2Zvcih2YXIgbj1lLmNoYXJDb2RlQXQoMCkscj00Nz09PW4saT0tMSxvPSEwLHM9ZS5sZW5ndGgtMTtzPj0xOy0tcylpZig0Nz09PShuPWUuY2hhckNvZGVBdChzKSkpe2lmKCFvKXtpPXM7YnJlYWt9fWVsc2Ugbz0hMTtyZXR1cm4tMT09PWk/cj8iLyI6Ii4iOnImJjE9PT1pPyIvLyI6ZS5zbGljZSgwLGkpfSxiYXNlbmFtZTpmdW5jdGlvbihlLG4pe2lmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7dChlKTt2YXIgcixpPTAsbz0tMSxzPSEwO2lmKHZvaWQgMCE9PW4mJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD1lLmxlbmd0aCl7aWYobi5sZW5ndGg9PT1lLmxlbmd0aCYmbj09PWUpcmV0dXJuIiI7dmFyIGE9bi5sZW5ndGgtMSxsPS0xO2ZvcihyPWUubGVuZ3RoLTE7cj49MDstLXIpe3ZhciB1PWUuY2hhckNvZGVBdChyKTtpZig0Nz09PXUpe2lmKCFzKXtpPXIrMTticmVha319ZWxzZS0xPT09bCYmKHM9ITEsbD1yKzEpLGE+PTAmJih1PT09bi5jaGFyQ29kZUF0KGEpPy0xPT0tLWEmJihvPXIpOihhPS0xLG89bCkpfXJldHVybiBpPT09bz9vPWw6LTE9PT1vJiYobz1lLmxlbmd0aCksZS5zbGljZShpLG8pfWZvcihyPWUubGVuZ3RoLTE7cj49MDstLXIpaWYoNDc9PT1lLmNoYXJDb2RlQXQocikpe2lmKCFzKXtpPXIrMTticmVha319ZWxzZS0xPT09byYmKHM9ITEsbz1yKzEpO3JldHVybi0xPT09bz8iIjplLnNsaWNlKGksbyl9LGV4dG5hbWU6ZnVuY3Rpb24oZSl7dChlKTtmb3IodmFyIG49LTEscj0wLGk9LTEsbz0hMCxzPTAsYT1lLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgbD1lLmNoYXJDb2RlQXQoYSk7aWYoNDchPT1sKS0xPT09aSYmKG89ITEsaT1hKzEpLDQ2PT09bD8tMT09PW4/bj1hOjEhPT1zJiYocz0xKTotMSE9PW4mJihzPS0xKTtlbHNlIGlmKCFvKXtyPWErMTticmVha319cmV0dXJuLTE9PT1ufHwtMT09PWl8fDA9PT1zfHwxPT09cyYmbj09PWktMSYmbj09PXIrMT8iIjplLnNsaWNlKG4saSl9LGZvcm1hdDpmdW5jdGlvbihlKXtpZihudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKTtyZXR1cm4gbj0odD1lKS5kaXJ8fHQucm9vdCxyPXQuYmFzZXx8KHQubmFtZXx8IiIpKyh0LmV4dHx8IiIpLG4/bj09PXQucm9vdD9uK3I6bisiLyIrcjpyO3ZhciB0LG4scn0scGFyc2U6ZnVuY3Rpb24oZSl7dChlKTt2YXIgbj17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiBuO3ZhciByLGk9ZS5jaGFyQ29kZUF0KDApLG89NDc9PT1pO28/KG4ucm9vdD0iLyIscj0xKTpyPTA7Zm9yKHZhciBzPS0xLGE9MCxsPS0xLHU9ITAsYz1lLmxlbmd0aC0xLGg9MDtjPj1yOy0tYylpZig0NyE9PShpPWUuY2hhckNvZGVBdChjKSkpLTE9PT1sJiYodT0hMSxsPWMrMSksNDY9PT1pPy0xPT09cz9zPWM6MSE9PWgmJihoPTEpOi0xIT09cyYmKGg9LTEpO2Vsc2UgaWYoIXUpe2E9YysxO2JyZWFrfXJldHVybi0xPT09c3x8LTE9PT1sfHwwPT09aHx8MT09PWgmJnM9PT1sLTEmJnM9PT1hKzE/LTEhPT1sJiYobi5iYXNlPW4ubmFtZT0wPT09YSYmbz9lLnNsaWNlKDEsbCk6ZS5zbGljZShhLGwpKTooMD09PWEmJm8/KG4ubmFtZT1lLnNsaWNlKDEscyksbi5iYXNlPWUuc2xpY2UoMSxsKSk6KG4ubmFtZT1lLnNsaWNlKGEscyksbi5iYXNlPWUuc2xpY2UoYSxsKSksbi5leHQ9ZS5zbGljZShzLGwpKSxhPjA/bi5kaXI9ZS5zbGljZSgwLGEtMSk6byYmKG4uZGlyPSIvIiksbn0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07ci5wb3NpeD1yLGUuZXhwb3J0cz1yfSw0NDc6KGUsdCxuKT0+e3ZhciByO2lmKG4ucih0KSxuLmQodCx7VVJJOigpPT5nLFV0aWxzOigpPT5FfSksIm9iamVjdCI9PXR5cGVvZiBwcm9jZXNzKXI9IndpbjMyIj09PXByb2Nlc3MucGxhdGZvcm07ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvcil7dmFyIGk9bmF2aWdhdG9yLnVzZXJBZ2VudDtyPWkuaW5kZXhPZigiV2luZG93cyIpPj0wfXZhciBvLHMsYT0obz1mdW5jdGlvbihlLHQpe3JldHVybihvPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcodCkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1vKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSksbD0vXlx3W1x3XGQrLi1dKiQvLHU9L15cLy8sYz0vXlwvXC8vO2Z1bmN0aW9uIGgoZSx0KXtpZighZS5zY2hlbWUmJnQpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIicuY29uY2F0KGUuYXV0aG9yaXR5LCciLCBwYXRoOiAiJykuY29uY2F0KGUucGF0aCwnIiwgcXVlcnk6ICInKS5jb25jYXQoZS5xdWVyeSwnIiwgZnJhZ21lbnQ6ICInKS5jb25jYXQoZS5mcmFnbWVudCwnIn0nKSk7aWYoZS5zY2hlbWUmJiFsLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCF1LnRlc3QoZS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGNvbnRhaW5zIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY29tcG9uZW50IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKSBjaGFyYWN0ZXInKX1lbHNlIGlmKGMudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfXZhciBkPSIiLGY9Ii8iLG09L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8sZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scixpLG8pe3ZhciBzLGE7dm9pZCAwPT09byYmKG89ITEpLCJvYmplY3QiPT10eXBlb2YgZT8odGhpcy5zY2hlbWU9ZS5zY2hlbWV8fGQsdGhpcy5hdXRob3JpdHk9ZS5hdXRob3JpdHl8fGQsdGhpcy5wYXRoPWUucGF0aHx8ZCx0aGlzLnF1ZXJ5PWUucXVlcnl8fGQsdGhpcy5mcmFnbWVudD1lLmZyYWdtZW50fHxkKToodGhpcy5zY2hlbWU9KGE9bywocz1lKXx8YT9zOiJmaWxlIiksdGhpcy5hdXRob3JpdHk9dHx8ZCx0aGlzLnBhdGg9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJodHRwcyI6Y2FzZSJodHRwIjpjYXNlImZpbGUiOnQ/dFswXSE9PWYmJih0PWYrdCk6dD1mfXJldHVybiB0fSh0aGlzLnNjaGVtZSxufHxkKSx0aGlzLnF1ZXJ5PXJ8fGQsdGhpcy5mcmFnbWVudD1pfHxkLGgodGhpcyxvKSl9cmV0dXJuIGUuaXNVcmk9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHwhIXQmJiJzdHJpbmciPT10eXBlb2YgdC5hdXRob3JpdHkmJiJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudCYmInN0cmluZyI9PXR5cGVvZiB0LnBhdGgmJiJzdHJpbmciPT10eXBlb2YgdC5xdWVyeSYmInN0cmluZyI9PXR5cGVvZiB0LnNjaGVtZSYmInN0cmluZyI9PXR5cGVvZiB0LmZzUGF0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQud2l0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQudG9TdHJpbmd9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8odGhpcywhMSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUud2l0aD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4gdGhpczt2YXIgdD1lLnNjaGVtZSxuPWUuYXV0aG9yaXR5LHI9ZS5wYXRoLGk9ZS5xdWVyeSxvPWUuZnJhZ21lbnQ7cmV0dXJuIHZvaWQgMD09PXQ/dD10aGlzLnNjaGVtZTpudWxsPT09dCYmKHQ9ZCksdm9pZCAwPT09bj9uPXRoaXMuYXV0aG9yaXR5Om51bGw9PT1uJiYobj1kKSx2b2lkIDA9PT1yP3I9dGhpcy5wYXRoOm51bGw9PT1yJiYocj1kKSx2b2lkIDA9PT1pP2k9dGhpcy5xdWVyeTpudWxsPT09aSYmKGk9ZCksdm9pZCAwPT09bz9vPXRoaXMuZnJhZ21lbnQ6bnVsbD09PW8mJihvPWQpLHQ9PT10aGlzLnNjaGVtZSYmbj09PXRoaXMuYXV0aG9yaXR5JiZyPT09dGhpcy5wYXRoJiZpPT09dGhpcy5xdWVyeSYmbz09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgdih0LG4scixpLG8pfSxlLnBhcnNlPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPW0uZXhlYyhlKTtyZXR1cm4gbj9uZXcgdihuWzJdfHxkLHgobls0XXx8ZCkseChuWzVdfHxkKSx4KG5bN118fGQpLHgobls5XXx8ZCksdCk6bmV3IHYoZCxkLGQsZCxkKX0sZS5maWxlPWZ1bmN0aW9uKGUpe3ZhciB0PWQ7aWYociYmKGU9ZS5yZXBsYWNlKC9cXC9nLGYpKSxlWzBdPT09ZiYmZVsxXT09PWYpe3ZhciBuPWUuaW5kZXhPZihmLDIpOy0xPT09bj8odD1lLnN1YnN0cmluZygyKSxlPWYpOih0PWUuc3Vic3RyaW5nKDIsbiksZT1lLnN1YnN0cmluZyhuKXx8Zil9cmV0dXJuIG5ldyB2KCJmaWxlIix0LGUsZCxkKX0sZS5mcm9tPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB2KGUuc2NoZW1lLGUuYXV0aG9yaXR5LGUucGF0aCxlLnF1ZXJ5LGUuZnJhZ21lbnQpO3JldHVybiBoKHQsITApLHR9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksUyh0aGlzLGUpfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5yZXZpdmU9ZnVuY3Rpb24odCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuIHQ7dmFyIG49bmV3IHYodCk7cmV0dXJuIG4uX2Zvcm1hdHRlZD10LmV4dGVybmFsLG4uX2ZzUGF0aD10Ll9zZXA9PT1wP3QuZnNQYXRoOm51bGwsbn1yZXR1cm4gdH0sZX0oKSxwPXI/MTp2b2lkIDAsdj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0Ll9mb3JtYXR0ZWQ9bnVsbCx0Ll9mc1BhdGg9bnVsbCx0fXJldHVybiBhKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJmc1BhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPV8odGhpcywhMSkpLHRoaXMuX2ZzUGF0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLGU/Uyh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPVModGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9LHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBlPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihlLmZzUGF0aD10aGlzLl9mc1BhdGgsZS5fc2VwPXApLHRoaXMuX2Zvcm1hdHRlZCYmKGUuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihlLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGUuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGUuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoZS5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoZS5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxlfSx0fShnKSxiPSgocz17fSlbNThdPSIlM0EiLHNbNDddPSIlMkYiLHNbNjNdPSIlM0YiLHNbMzVdPSIlMjMiLHNbOTFdPSIlNUIiLHNbOTNdPSIlNUQiLHNbNjRdPSIlNDAiLHNbMzNdPSIlMjEiLHNbMzZdPSIlMjQiLHNbMzhdPSIlMjYiLHNbMzldPSIlMjciLHNbNDBdPSIlMjgiLHNbNDFdPSIlMjkiLHNbNDJdPSIlMkEiLHNbNDNdPSIlMkIiLHNbNDRdPSIlMkMiLHNbNTldPSIlM0IiLHNbNjFdPSIlM0QiLHNbMzJdPSIlMjAiLHMpO2Z1bmN0aW9uIHkoZSx0KXtmb3IodmFyIG49dm9pZCAwLHI9LTEsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lLmNoYXJDb2RlQXQoaSk7aWYobz49OTcmJm88PTEyMnx8bz49NjUmJm88PTkwfHxvPj00OCYmbzw9NTd8fDQ1PT09b3x8NDY9PT1vfHw5NT09PW98fDEyNj09PW98fHQmJjQ3PT09byktMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksdm9pZCAwIT09biYmKG4rPWUuY2hhckF0KGkpKTtlbHNle3ZvaWQgMD09PW4mJihuPWUuc3Vic3RyKDAsaSkpO3ZhciBzPWJbb107dm9pZCAwIT09cz8oLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLG4rPXMpOi0xPT09ciYmKHI9aSl9fXJldHVybi0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyKSkpLHZvaWQgMCE9PW4/bjplfWZ1bmN0aW9uIEMoZSl7Zm9yKHZhciB0PXZvaWQgMCxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWUuY2hhckNvZGVBdChuKTszNT09PXJ8fDYzPT09cj8odm9pZCAwPT09dCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9YltyXSk6dm9pZCAwIT09dCYmKHQrPWVbbl0pfXJldHVybiB2b2lkIDAhPT10P3Q6ZX1mdW5jdGlvbiBfKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hdXRob3JpdHkmJmUucGF0aC5sZW5ndGg+MSYmImZpbGUiPT09ZS5zY2hlbWU/Ii8vIi5jb25jYXQoZS5hdXRob3JpdHkpLmNvbmNhdChlLnBhdGgpOjQ3PT09ZS5wYXRoLmNoYXJDb2RlQXQoMCkmJihlLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8ZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmNTg9PT1lLnBhdGguY2hhckNvZGVBdCgyKT90P2UucGF0aC5zdWJzdHIoMSk6ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTplLnBhdGgsciYmKG49bi5yZXBsYWNlKC9cLy9nLCJcXCIpKSxufWZ1bmN0aW9uIFMoZSx0KXt2YXIgbj10P0M6eSxyPSIiLGk9ZS5zY2hlbWUsbz1lLmF1dGhvcml0eSxzPWUucGF0aCxhPWUucXVlcnksbD1lLmZyYWdtZW50O2lmKGkmJihyKz1pLHIrPSI6IiksKG98fCJmaWxlIj09PWkpJiYocis9ZixyKz1mKSxvKXt2YXIgdT1vLmluZGV4T2YoIkAiKTtpZigtMSE9PXUpe3ZhciBjPW8uc3Vic3RyKDAsdSk7bz1vLnN1YnN0cih1KzEpLC0xPT09KHU9Yy5pbmRleE9mKCI6IikpP3IrPW4oYywhMSk6KHIrPW4oYy5zdWJzdHIoMCx1KSwhMSkscis9IjoiLHIrPW4oYy5zdWJzdHIodSsxKSwhMSkpLHIrPSJAIn0tMT09PSh1PShvPW8udG9Mb3dlckNhc2UoKSkuaW5kZXhPZigiOiIpKT9yKz1uKG8sITEpOihyKz1uKG8uc3Vic3RyKDAsdSksITEpLHIrPW8uc3Vic3RyKHUpKX1pZihzKXtpZihzLmxlbmd0aD49MyYmNDc9PT1zLmNoYXJDb2RlQXQoMCkmJjU4PT09cy5jaGFyQ29kZUF0KDIpKShoPXMuY2hhckNvZGVBdCgxKSk+PTY1JiZoPD05MCYmKHM9Ii8iLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGgrMzIpLCI6IikuY29uY2F0KHMuc3Vic3RyKDMpKSk7ZWxzZSBpZihzLmxlbmd0aD49MiYmNTg9PT1zLmNoYXJDb2RlQXQoMSkpe3ZhciBoOyhoPXMuY2hhckNvZGVBdCgwKSk+PTY1JiZoPD05MCYmKHM9IiIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUoaCszMiksIjoiKS5jb25jYXQocy5zdWJzdHIoMikpKX1yKz1uKHMsITApfXJldHVybiBhJiYocis9Ij8iLHIrPW4oYSwhMSkpLGwmJihyKz0iIyIscis9dD9sOnkobCwhMSkpLHJ9ZnVuY3Rpb24gdyhlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK3coZS5zdWJzdHIoMykpOmV9fXZhciBBPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGUubWF0Y2goQSk/ZS5yZXBsYWNlKEEsKGZ1bmN0aW9uKGUpe3JldHVybiB3KGUpfSkpOmV9dmFyIEUsTCxOPW4oNDcwKSxrPWZ1bmN0aW9uKGUsdCxuKXtpZihufHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHIsaT0wLG89dC5sZW5ndGg7aTxvO2krKykhciYmaSBpbiB0fHwocnx8KHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLGkpKSxyW2ldPXRbaV0pO3JldHVybiBlLmNvbmNhdChyfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9LFI9Ti5wb3NpeHx8TjsoTD1FfHwoRT17fSkpLmpvaW5QYXRoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3JldHVybiBlLndpdGgoe3BhdGg6Ui5qb2luLmFwcGx5KFIsayhbZS5wYXRoXSx0LCExKSl9KX0sTC5yZXNvbHZlUGF0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTt2YXIgcj1lLnBhdGh8fCIvIjtyZXR1cm4gZS53aXRoKHtwYXRoOlIucmVzb2x2ZS5hcHBseShSLGsoW3JdLHQsITEpKX0pfSxMLmRpcm5hbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9Ui5kaXJuYW1lKGUucGF0aCk7cmV0dXJuIDE9PT10Lmxlbmd0aCYmNDY9PT10LmNoYXJDb2RlQXQoMCk/ZTplLndpdGgoe3BhdGg6dH0pfSxMLmJhc2VuYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBSLmJhc2VuYW1lKGUucGF0aCl9LEwuZXh0bmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gUi5leHRuYW1lKGUucGF0aCl9fX0sdD17fTtmdW5jdGlvbiBuKHIpe2lmKHRbcl0pcmV0dXJuIHRbcl0uZXhwb3J0czt2YXIgaT10W3JdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtyXShpLGkuZXhwb3J0cyxuKSxpLmV4cG9ydHN9cmV0dXJuIG4uZD0oZSx0KT0+e2Zvcih2YXIgciBpbiB0KW4ubyh0LHIpJiYhbi5vKGUscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6ITAsZ2V0OnRbcl19KX0sbi5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxuLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LG4oNDQ3KX0pKCk7dmFye1VSSTp5YSxVdGlsczpDYX09Z2E7ZnVuY3Rpb24gX2EoZSx0KXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKTtmb3IodmFyIG4scj1TdHJpbmcoZSksaT0iIixvPSEhdCYmISF0LmV4dGVuZGVkLHM9ISF0JiYhIXQuZ2xvYnN0YXIsYT0hMSxsPXQmJiJzdHJpbmciPT10eXBlb2YgdC5mbGFncz90LmZsYWdzOiIiLHU9MCxjPXIubGVuZ3RoO3U8Yzt1Kyspc3dpdGNoKG49clt1XSl7Y2FzZSIvIjpjYXNlIiQiOmNhc2UiXiI6Y2FzZSIrIjpjYXNlIi4iOmNhc2UiKCI6Y2FzZSIpIjpjYXNlIj0iOmNhc2UiISI6Y2FzZSJ8IjppKz0iXFwiK247YnJlYWs7Y2FzZSI/IjppZihvKXtpKz0iLiI7YnJlYWt9Y2FzZSJbIjpjYXNlIl0iOmlmKG8pe2krPW47YnJlYWt9Y2FzZSJ7IjppZihvKXthPSEwLGkrPSIoIjticmVha31jYXNlIn0iOmlmKG8pe2E9ITEsaSs9IikiO2JyZWFrfWNhc2UiLCI6aWYoYSl7aSs9InwiO2JyZWFrfWkrPSJcXCIrbjticmVhaztjYXNlIioiOmZvcih2YXIgaD1yW3UtMV0sZD0xOyIqIj09PXJbdSsxXTspZCsrLHUrKzt2YXIgZj1yW3UrMV07aWYocylkPjEmJigiLyI9PT1ofHx2b2lkIDA9PT1ofHwieyI9PT1ofHwiLCI9PT1oKSYmKCIvIj09PWZ8fHZvaWQgMD09PWZ8fCIsIj09PWZ8fCJ9Ij09PWYpPygiLyI9PT1mP3UrKzoiLyI9PT1oJiZpLmVuZHNXaXRoKCJcXC8iKSYmKGk9aS5zdWJzdHIoMCxpLmxlbmd0aC0yKSksaSs9IigoPzpbXi9dKig/Oi98JCkpKikiKTppKz0iKFteL10qKSI7ZWxzZSBpKz0iLioiO2JyZWFrO2RlZmF1bHQ6aSs9bn1yZXR1cm4gbCYmfmwuaW5kZXhPZigiZyIpfHwoaT0iXiIraSsiJCIpLG5ldyBSZWdFeHAoaSxsKX12YXIgU2Esd2E9eXMoKSxBYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmdsb2JXcmFwcGVycz1bXTt0cnl7Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLG89IiEiIT09aVswXTtvfHwoaT1pLnN1YnN0cmluZygxKSksaS5sZW5ndGg+MCYmKCIvIj09PWlbMF0mJihpPWkuc3Vic3RyaW5nKDEpKSx0aGlzLmdsb2JXcmFwcGVycy5wdXNoKHtyZWdleHA6X2EoIioqLyIraSx7ZXh0ZW5kZWQ6ITAsZ2xvYnN0YXI6ITB9KSxpbmNsdWRlOm99KSl9dGhpcy51cmlzPXR9Y2F0Y2goZSl7dGhpcy5nbG9iV3JhcHBlcnMubGVuZ3RoPTAsdGhpcy51cmlzPVtdfX1yZXR1cm4gZS5wcm90b3R5cGUubWF0Y2hlc1BhdHRlcm49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSExLG49MCxyPXRoaXMuZ2xvYldyYXBwZXJzO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLG89aS5yZWdleHAscz1pLmluY2x1ZGU7by50ZXN0KGUpJiYodD1zKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuZ2V0VVJJcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVyaXN9LGV9KCkseGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnNlcnZpY2U9ZSx0aGlzLnVyaT10LHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5hbmNob3JzPXZvaWQgMCxuJiYodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5wcm9taXNlLnJlc29sdmUobmV3IEVhKG4pKSl9cmV0dXJuIGUucHJvdG90eXBlLmdldFVucmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnJlc29sdmVkU2NoZW1hfHwodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5sb2FkU2NoZW1hKHRoaXMudXJpKSksdGhpcy51bnJlc29sdmVkU2NoZW1hfSxlLnByb3RvdHlwZS5nZXRSZXNvbHZlZFNjaGVtYT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWF8fCh0aGlzLnJlc29sdmVkU2NoZW1hPXRoaXMuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBlLnNlcnZpY2UucmVzb2x2ZVNjaGVtYUNvbnRlbnQodCxlKX0pKSksdGhpcy5yZXNvbHZlZFNjaGVtYX0sZS5wcm90b3R5cGUuY2xlYXJTY2hlbWE9ZnVuY3Rpb24oKXt2YXIgZT0hIXRoaXMudW5yZXNvbHZlZFNjaGVtYTtyZXR1cm4gdGhpcy5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy51bnJlc29sdmVkU2NoZW1hPXZvaWQgMCx0aGlzLmRlcGVuZGVuY2llcy5jbGVhcigpLHRoaXMuYW5jaG9ycz12b2lkIDAsZX0sZX0oKSxFYT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXR9LExhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXR9cmV0dXJuIGUucHJvdG90eXBlLmdldFNlY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdGhpcy5zY2hlbWEpO2lmKHQpcmV0dXJuIElzKHQpfSxlLnByb3RvdHlwZS5nZXRTZWN0aW9uUmVjdXJzaXZlPWZ1bmN0aW9uKGUsdCl7aWYoIXR8fCJib29sZWFuIj09dHlwZW9mIHR8fDA9PT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj1lLnNoaWZ0KCk7aWYodC5wcm9wZXJ0aWVzJiYodC5wcm9wZXJ0aWVzW25dLDEpKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LnByb3BlcnRpZXNbbl0pO2lmKHQucGF0dGVyblByb3BlcnRpZXMpZm9yKHZhciByPTAsaT1PYmplY3Qua2V5cyh0LnBhdHRlcm5Qcm9wZXJ0aWVzKTtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXSxzPXJvKG8pO2lmKG51bGw9PXM/dm9pZCAwOnMudGVzdChuKSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5wYXR0ZXJuUHJvcGVydGllc1tvXSl9ZWxzZXtpZigib2JqZWN0Ij09dHlwZW9mIHQuYWRkaXRpb25hbFByb3BlcnRpZXMpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuYWRkaXRpb25hbFByb3BlcnRpZXMpO2lmKG4ubWF0Y2goIlswLTldKyIpKWlmKEFycmF5LmlzQXJyYXkodC5pdGVtcykpe3ZhciBhPXBhcnNlSW50KG4sMTApO2lmKCFpc05hTihhKSYmdC5pdGVtc1thXSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5pdGVtc1thXSl9ZWxzZSBpZih0Lml0ZW1zKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0Lml0ZW1zKX19LGV9KCksTmE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLmNvbnRleHRTZXJ2aWNlPXQsdGhpcy5yZXF1ZXN0U2VydmljZT1lLHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPW58fFByb21pc2UsdGhpcy5jYWxsT25EaXNwb3NlPVtdLHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcz17fSx0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucz1bXSx0aGlzLnNjaGVtYXNCeUlkPXt9LHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM9W10sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcz17fX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0UmVnaXN0ZXJlZFNjaGVtYUlkcz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcykuZmlsdGVyKChmdW5jdGlvbih0KXt2YXIgbj15YS5wYXJzZSh0KS5zY2hlbWU7cmV0dXJuInNjaGVtYXNlcnZpY2UiIT09biYmKCFlfHxlKG4pKX0pKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwcm9taXNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuY2FsbE9uRGlzcG9zZS5sZW5ndGg+MDspdGhpcy5jYWxsT25EaXNwb3NlLnBvcCgpKCl9LGUucHJvdG90eXBlLm9uUmVzb3VyY2VDaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMDtmb3IodmFyIG49ITEscj1bZT1SYShlKV0saT1PYmplY3Qua2V5cyh0aGlzLnNjaGVtYXNCeUlkKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVtYXNCeUlkW2VdfSkpO3IubGVuZ3RoOylmb3IodmFyIG89ci5wb3AoKSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBhPWlbc107YSYmKGEudXJpPT09b3x8YS5kZXBlbmRlbmNpZXMuaGFzKG8pKSYmKGEudXJpIT09byYmci5wdXNoKGEudXJpKSxhLmNsZWFyU2NoZW1hKCkmJihuPSEwKSxpW3NdPXZvaWQgMCl9cmV0dXJuIG59LGUucHJvdG90eXBlLnNldFNjaGVtYUNvbnRyaWJ1dGlvbnM9ZnVuY3Rpb24oZSl7aWYoZS5zY2hlbWFzKXt2YXIgdD1lLnNjaGVtYXM7Zm9yKHZhciBuIGluIHQpe3ZhciByPVJhKG4pO3RoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tyXT10aGlzLmFkZFNjaGVtYUhhbmRsZShyLHRbbl0pfX1pZihBcnJheS5pc0FycmF5KGUuc2NoZW1hQXNzb2NpYXRpb25zKSlmb3IodmFyIGk9MCxvPWUuc2NoZW1hQXNzb2NpYXRpb25zO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1vW2ldLGE9cy51cmlzLm1hcChSYSksbD10aGlzLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb24ocy5wYXR0ZXJuLGEpO3RoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zLnB1c2gobCl9fSxlLnByb3RvdHlwZS5hZGRTY2hlbWFIYW5kbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgeGEodGhpcyxlLHQpO3JldHVybiB0aGlzLnNjaGVtYXNCeUlkW2VdPW4sbn0sZS5wcm90b3R5cGUuZ2V0T3JBZGRTY2hlbWFIYW5kbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXXx8dGhpcy5hZGRTY2hlbWFIYW5kbGUoZSx0KX0sZS5wcm90b3R5cGUuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBBYShlLHQpO3JldHVybiB0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2gobiksbn0sZS5wcm90b3R5cGUucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYT1mdW5jdGlvbihlLHQsbil7dmFyIHI9UmEoZSk7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbcl09ITAsdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsdCYmdGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKHQsW3JdKSxuP3RoaXMuYWRkU2NoZW1hSGFuZGxlKHIsbik6dGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZShyKX0sZS5wcm90b3R5cGUuY2xlYXJFeHRlcm5hbFNjaGVtYXM9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e30sdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsdGhpcy5jb250cmlidXRpb25TY2hlbWFzKXRoaXMuc2NoZW1hc0J5SWRbZV09dGhpcy5jb250cmlidXRpb25TY2hlbWFzW2VdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbZV09ITA7Zm9yKHZhciB0PTAsbj10aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9uczt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTt0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2gocil9fSxlLnByb3RvdHlwZS5nZXRSZXNvbHZlZFNjaGVtYT1mdW5jdGlvbihlKXt2YXIgdD1SYShlKSxuPXRoaXMuc2NoZW1hc0J5SWRbdF07cmV0dXJuIG4/bi5nZXRSZXNvbHZlZFNjaGVtYSgpOnRoaXMucHJvbWlzZS5yZXNvbHZlKHZvaWQgMCl9LGUucHJvdG90eXBlLmxvYWRTY2hlbWE9ZnVuY3Rpb24oZSl7aWYoIXRoaXMucmVxdWVzdFNlcnZpY2Upe3ZhciB0PXdhKCJqc29uLnNjaGVtYS5ub3JlcXVlc3RzZXJ2aWNlIiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfScuIE5vIHNjaGVtYSByZXF1ZXN0IHNlcnZpY2UgYXZhaWxhYmxlIixUYShlKSk7cmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG5ldyBFYSh7fSxbdF0pKX1yZXR1cm4gdGhpcy5yZXF1ZXN0U2VydmljZShlKS50aGVuKChmdW5jdGlvbih0KXtpZighdCl7dmFyIG49d2EoImpzb24uc2NoZW1hLm5vY29udGVudCIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nOiBObyBjb250ZW50LiIsVGEoZSkpO3JldHVybiBuZXcgRWEoe30sW25dKX12YXIgcixpPVtdO3I9R2kodCxpKTt2YXIgbz1pLmxlbmd0aD9bd2EoImpzb24uc2NoZW1hLmludmFsaWRGb3JtYXQiLCJVbmFibGUgdG8gcGFyc2UgY29udGVudCBmcm9tICd7MH0nOiBQYXJzZSBlcnJvciBhdCBvZmZzZXQgezF9LiIsVGEoZSksaVswXS5vZmZzZXQpXTpbXTtyZXR1cm4gbmV3IEVhKHIsbyl9KSwoZnVuY3Rpb24odCl7dmFyIG49dC50b1N0cmluZygpLHI9dC50b1N0cmluZygpLnNwbGl0KCJFcnJvcjogIik7cmV0dXJuIHIubGVuZ3RoPjEmJihuPXJbMV0pLG5vKG4sIi4iKSYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSksbmV3IEVhKHt9LFt3YSgianNvbi5zY2hlbWEubm9jb250ZW50IiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfSc6IHsxfS4iLFRhKGUpLG4pXSl9KSl9LGUucHJvdG90eXBlLnJlc29sdmVTY2hlbWFDb250ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPWUuZXJyb3JzLnNsaWNlKDApLGk9ZS5zY2hlbWE7aWYoaS4kc2NoZW1hKXt2YXIgbz1SYShpLiRzY2hlbWEpO2lmKCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTAzL3NjaGVtYSI9PT1vKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShuZXcgTGEoe30sW3dhKCJqc29uLnNjaGVtYS5kcmFmdDAzLm5vdHN1cHBvcnRlZCIsIkRyYWZ0LTAzIHNjaGVtYXMgYXJlIG5vdCBzdXBwb3J0ZWQuIildKSk7Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMTktMDkvc2NoZW1hIj09PW8/ci5wdXNoKHdhKCJqc29uLnNjaGVtYS5kcmFmdDIwMTkwOS5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDE5LTA5IHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKToiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPT09byYmci5wdXNoKHdhKCJqc29uLnNjaGVtYS5kcmFmdDIwMjAxMi5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDIwLTEyIHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKX12YXIgcz10aGlzLmNvbnRleHRTZXJ2aWNlLGE9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8scyxhLGw7dm9pZCAwPT09aXx8MD09PWkubGVuZ3RoP289dDoiLyI9PT1pLmNoYXJBdCgwKT9vPWZ1bmN0aW9uKGUsdCl7dD1kZWNvZGVVUklDb21wb25lbnQodCk7dmFyIG49ZTtyZXR1cm4iLyI9PT10WzBdJiYodD10LnN1YnN0cmluZygxKSksdC5zcGxpdCgiLyIpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKSwhKG49bltlXSl9KSksbn0odCxpKToocz10LGw9aSwoYT1uKS5hbmNob3JzfHwoYS5hbmNob3JzPWMocykpLG89YS5hbmNob3JzLmdldChsKSksbz9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJiFlLmhhc093blByb3BlcnR5KG4pJiYiaWQiIT09biYmIiRpZCIhPT1uJiYoZVtuXT10W25dKX0oZSxvKTpyLnB1c2god2EoImpzb24uc2NoZW1hLmludmFsaWRpZCIsIiRyZWYgJ3swfScgaW4gJ3sxfScgY2FuIG5vdCBiZSByZXNvbHZlZC4iLGksbi51cmkpKX0sbD1mdW5jdGlvbihlLHQsaSxvKXtzJiYhL15bQS1aYS16XVtBLVphLXowLTkrXC0uK10qOlwvXC8uKi8udGVzdCh0KSYmKHQ9cy5yZXNvbHZlUmVsYXRpdmVQYXRoKHQsby51cmkpKSx0PVJhKHQpO3ZhciBsPW4uZ2V0T3JBZGRTY2hlbWFIYW5kbGUodCk7cmV0dXJuIGwuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKG4pe2lmKG8uZGVwZW5kZW5jaWVzLmFkZCh0KSxuLmVycm9ycy5sZW5ndGgpe3ZhciBzPWk/dCsiIyIraTp0O3IucHVzaCh3YSgianNvbi5zY2hlbWEucHJvYmxlbWxvYWRpbmdyZWYiLCJQcm9ibGVtcyBsb2FkaW5nIHJlZmVyZW5jZSAnezB9JzogezF9IixzLG4uZXJyb3JzWzBdKSl9cmV0dXJuIGEoZSxuLnNjaGVtYSxsLGkpLHUoZSxuLnNjaGVtYSxsKX0pKX0sdT1mdW5jdGlvbihlLHQscil7dmFyIGk9W107cmV0dXJuIG4udHJhdmVyc2VOb2RlcyhlLChmdW5jdGlvbihlKXtmb3IodmFyIG49bmV3IFNldDtlLiRyZWY7KXt2YXIgbz1lLiRyZWYscz1vLnNwbGl0KCIjIiwyKTtpZihkZWxldGUgZS4kcmVmLHNbMF0ubGVuZ3RoPjApcmV0dXJuIHZvaWQgaS5wdXNoKGwoZSxzWzBdLHNbMV0scikpO2lmKCFuLmhhcyhvKSl7dmFyIHU9c1sxXTthKGUsdCxyLHUpLG4uYWRkKG8pfX19KSksbi5wcm9taXNlLmFsbChpKX0sYz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgTWFwO3JldHVybiBuLnRyYXZlcnNlTm9kZXMoZSwoZnVuY3Rpb24oZSl7dmFyIG49ZS4kaWR8fGUuaWQ7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYiIyI9PT1uLmNoYXJBdCgwKSl7dmFyIGk9bi5zdWJzdHJpbmcoMSk7dC5oYXMoaSk/ci5wdXNoKHdhKCJqc29uLnNjaGVtYS5kdXBsaWNhdGVpZCIsIkR1cGxpY2F0ZSBpZCBkZWNsYXJhdGlvbjogJ3swfSciLG4pKTp0LnNldChpLGUpfX0pKSx0fTtyZXR1cm4gdShpLGksdCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMYShpLHIpfSkpfSxlLnByb3RvdHlwZS50cmF2ZXJzZU5vZGVzPWZ1bmN0aW9uKGUsdCl7aWYoIWV8fCJvYmplY3QiIT10eXBlb2YgZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO2Zvcih2YXIgbj1uZXcgU2V0LHI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dOyJvYmplY3QiPT10eXBlb2YgaSYmcy5wdXNoKGkpfX0saT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoIm9iamVjdCI9PXR5cGVvZiBpKWZvcih2YXIgbyBpbiBpKXt2YXIgYT1pW29dOyJvYmplY3QiPT10eXBlb2YgYSYmcy5wdXNoKGEpfX19LG89ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTAsYT1pO288YS5sZW5ndGg7bysrKXt2YXIgbD1hW29dOyJvYmplY3QiPT10eXBlb2YgbCYmcy5wdXNoKGwpfX19LHM9W2VdLGE9cy5wb3AoKTthOyluLmhhcyhhKXx8KG4uYWRkKGEpLHQoYSkscihhLml0ZW1zLGEuYWRkaXRpb25hbEl0ZW1zLGEuYWRkaXRpb25hbFByb3BlcnRpZXMsYS5ub3QsYS5jb250YWlucyxhLnByb3BlcnR5TmFtZXMsYS5pZixhLnRoZW4sYS5lbHNlKSxpKGEuZGVmaW5pdGlvbnMsYS5wcm9wZXJ0aWVzLGEucGF0dGVyblByb3BlcnRpZXMsYS5kZXBlbmRlbmNpZXMpLG8oYS5hbnlPZixhLmFsbE9mLGEub25lT2YsYS5pdGVtcykpLGE9cy5wb3AoKX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hRnJvbVByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZigib2JqZWN0Ij09PShudWxsPT09KG49dC5yb290KXx8dm9pZCAwPT09bj92b2lkIDA6bi50eXBlKSlmb3IodmFyIGk9MCxvPXQucm9vdC5wcm9wZXJ0aWVzO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1vW2ldO2lmKCIkc2NoZW1hIj09PXMua2V5Tm9kZS52YWx1ZSYmInN0cmluZyI9PT0obnVsbD09PShyPXMudmFsdWVOb2RlKXx8dm9pZCAwPT09cj92b2lkIDA6ci50eXBlKSl7dmFyIGE9cy52YWx1ZU5vZGUudmFsdWU7cmV0dXJuIHRoaXMuY29udGV4dFNlcnZpY2UmJiEvXlx3W1x3XGQrLi1dKjovLnRlc3QoYSkmJihhPXRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZVJlbGF0aXZlUGF0aChhLGUpKSxhfX19LGUucHJvdG90eXBlLmdldEFzc29jaWF0ZWRTY2hlbWFzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLG49W10scj1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIHlhLnBhcnNlKGUpLndpdGgoe2ZyYWdtZW50Om51bGwscXVlcnk6bnVsbH0pLnRvU3RyaW5nKCEwKX1jYXRjaCh0KXtyZXR1cm4gZX19KGUpLGk9MCxvPXRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM7aTxvLmxlbmd0aDtpKyspe3ZhciBzPW9baV07aWYocy5tYXRjaGVzUGF0dGVybihyKSlmb3IodmFyIGE9MCxsPXMuZ2V0VVJJcygpO2E8bC5sZW5ndGg7YSsrKXt2YXIgdT1sW2FdO3RbdV18fChuLnB1c2godSksdFt1XT0hMCl9fXJldHVybiBufSxlLnByb3RvdHlwZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10JiZ0aGlzLmdldFNjaGVtYUZyb21Qcm9wZXJ0eShlLHQpO3JldHVybiBuP1tuXTp0aGlzLmdldEFzc29jaWF0ZWRTY2hlbWFzKGUpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGb3JSZXNvdXJjZT1mdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPXRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7aWYobil7dmFyIHI9UmEobik7cmV0dXJuIHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUocikuZ2V0UmVzb2x2ZWRTY2hlbWEoKX19aWYodGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZSYmdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvdXJjZT09PWUpcmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb2x2ZWRTY2hlbWE7dmFyIGk9dGhpcy5nZXRBc3NvY2lhdGVkU2NoZW1hcyhlKSxvPWkubGVuZ3RoPjA/dGhpcy5jcmVhdGVDb21iaW5lZFNjaGVtYShlLGkpLmdldFJlc29sdmVkU2NoZW1hKCk6dGhpcy5wcm9taXNlLnJlc29sdmUodm9pZCAwKTtyZXR1cm4gdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT17cmVzb3VyY2U6ZSxyZXNvbHZlZFNjaGVtYTpvfSxvfSxlLnByb3RvdHlwZS5jcmVhdGVDb21iaW5lZFNjaGVtYT1mdW5jdGlvbihlLHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZSh0WzBdKTt2YXIgbj0ic2NoZW1hc2VydmljZTovL2NvbWJpbmVkU2NoZW1hLyIrZW5jb2RlVVJJQ29tcG9uZW50KGUpLHI9e2FsbE9mOnQubWFwKChmdW5jdGlvbihlKXtyZXR1cm57JHJlZjplfX0pKX07cmV0dXJuIHRoaXMuYWRkU2NoZW1hSGFuZGxlKG4scil9LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQsbil7aWYobil7dmFyIHI9bi5pZHx8InNjaGVtYXNlcnZpY2U6Ly91bnRpdGxlZC9tYXRjaGluZ1NjaGVtYXMvIitrYSsrO3JldHVybiB0aGlzLmFkZFNjaGVtYUhhbmRsZShyLG4pLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmludmVydGVkfSkpfSkpfXJldHVybiB0aGlzLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlP3QuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmludmVydGVkfSkpOltdfSkpfSxlfSgpLGthPTA7ZnVuY3Rpb24gUmEoZSl7dHJ5e3JldHVybiB5YS5wYXJzZShlKS50b1N0cmluZyghMCl9Y2F0Y2godCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFRhKGUpe3RyeXt2YXIgdD15YS5wYXJzZShlKTtpZigiZmlsZSI9PT10LnNjaGVtZSlyZXR1cm4gdC5mc1BhdGh9Y2F0Y2goZSl7fXJldHVybiBlfWZ1bmN0aW9uIE9hKGUsdCl7dmFyIG49W10scj1bXSxpPVtdLG89LTEscz16aShlLmdldFRleHQoKSwhMSksYT1zLnNjYW4oKTtmdW5jdGlvbiBsKGUpe24ucHVzaChlKSxyLnB1c2goaS5sZW5ndGgpfWZvcig7MTchPT1hOyl7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDM6dmFyIHU9e3N0YXJ0TGluZTpkPWUucG9zaXRpb25BdChzLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsZW5kTGluZTpkLGtpbmQ6MT09PWE/Im9iamVjdCI6ImFycmF5In07aS5wdXNoKHUpO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6dmFyIGM9Mj09PWE/Im9iamVjdCI6ImFycmF5IjtpZihpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdLmtpbmQ9PT1jKXt1PWkucG9wKCk7dmFyIGg9ZS5wb3NpdGlvbkF0KHMuZ2V0VG9rZW5PZmZzZXQoKSkubGluZTt1JiZoPnUuc3RhcnRMaW5lKzEmJm8hPT11LnN0YXJ0TGluZSYmKHUuZW5kTGluZT1oLTEsbCh1KSxvPXUuc3RhcnRMaW5lKX1icmVhaztjYXNlIDEzOnZhciBkPWUucG9zaXRpb25BdChzLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsZj1lLnBvc2l0aW9uQXQocy5nZXRUb2tlbk9mZnNldCgpK3MuZ2V0VG9rZW5MZW5ndGgoKSkubGluZTsxPT09cy5nZXRUb2tlbkVycm9yKCkmJmQrMTxlLmxpbmVDb3VudD9zLnNldFBvc2l0aW9uKGUub2Zmc2V0QXQobmkuY3JlYXRlKGQrMSwwKSkpOmQ8ZiYmKGwoe3N0YXJ0TGluZTpkLGVuZExpbmU6ZixraW5kOnBpLkNvbW1lbnR9KSxvPWQpO2JyZWFrO2Nhc2UgMTI6dmFyIG09ZS5nZXRUZXh0KCkuc3Vic3RyKHMuZ2V0VG9rZW5PZmZzZXQoKSxzLmdldFRva2VuTGVuZ3RoKCkpLm1hdGNoKC9eXC9cL1xzKiMocmVnaW9uXGIpfChlbmRyZWdpb25cYikvKTtpZihtKXtoPWUucG9zaXRpb25BdChzLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7aWYobVsxXSl7dT17c3RhcnRMaW5lOmgsZW5kTGluZTpoLGtpbmQ6cGkuUmVnaW9ufTtpLnB1c2godSl9ZWxzZXtmb3IodmFyIGc9aS5sZW5ndGgtMTtnPj0wJiZpW2ddLmtpbmQhPT1waS5SZWdpb247KWctLTtpZihnPj0wKXt1PWlbZ107aS5sZW5ndGg9ZyxoPnUuc3RhcnRMaW5lJiZvIT09dS5zdGFydExpbmUmJih1LmVuZExpbmU9aCxsKHUpLG89dS5zdGFydExpbmUpfX19fWE9cy5zY2FuKCl9dmFyIHA9dCYmdC5yYW5nZUxpbWl0O2lmKCJudW1iZXIiIT10eXBlb2YgcHx8bi5sZW5ndGg8PXApcmV0dXJuIG47dCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZChlLnVyaSk7Zm9yKHZhciB2PVtdLGI9MCx5PXI7Yjx5Lmxlbmd0aDtiKyspeyhBPXlbYl0pPDMwJiYodltBXT0odltBXXx8MCkrMSl9dmFyIEM9MCxfPTA7Zm9yKGc9MDtnPHYubGVuZ3RoO2crKyl7dmFyIFM9dltnXTtpZihTKXtpZihTK0M+cCl7Xz1nO2JyZWFrfUMrPVN9fXZhciB3PVtdO2ZvcihnPTA7ZzxuLmxlbmd0aDtnKyspe3ZhciBBOyJudW1iZXIiPT10eXBlb2YoQT1yW2ddKSYmKEE8X3x8QT09PV8mJkMrKzxwKSYmdy5wdXNoKG5bZ10pfXJldHVybiB3fWZ1bmN0aW9uIE1hKGUsdCxuKXtmdW5jdGlvbiByKHQsbil7cmV0dXJuIGlpLmNyZWF0ZShlLnBvc2l0aW9uQXQodCksZS5wb3NpdGlvbkF0KG4pKX12YXIgaT16aShlLmdldFRleHQoKSwhMCk7ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBpLnNldFBvc2l0aW9uKGUpLGkuc2NhbigpPT09dD9pLmdldFRva2VuT2Zmc2V0KCkraS5nZXRUb2tlbkxlbmd0aCgpOi0xfXJldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7Zm9yKHZhciBpPWUub2Zmc2V0QXQodCkscz1uLmdldE5vZGVGcm9tT2Zmc2V0KGksITApLGE9W107czspe3N3aXRjaChzLnR5cGUpe2Nhc2Uic3RyaW5nIjpjYXNlIm9iamVjdCI6Y2FzZSJhcnJheSI6dmFyIGw9cy5vZmZzZXQrMSx1PXMub2Zmc2V0K3MubGVuZ3RoLTE7bDx1JiZpPj1sJiZpPD11JiZhLnB1c2gocihsLHUpKSxhLnB1c2gocihzLm9mZnNldCxzLm9mZnNldCtzLmxlbmd0aCkpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOmNhc2UibnVsbCI6Y2FzZSJwcm9wZXJ0eSI6YS5wdXNoKHIocy5vZmZzZXQscy5vZmZzZXQrcy5sZW5ndGgpKX1pZigicHJvcGVydHkiPT09cy50eXBlfHxzLnBhcmVudCYmImFycmF5Ij09PXMucGFyZW50LnR5cGUpe3ZhciBjPW8ocy5vZmZzZXQrcy5sZW5ndGgsNSk7LTEhPT1jJiZhLnB1c2gocihzLm9mZnNldCxjKSl9cz1zLnBhcmVudH1mb3IodmFyIGg9dm9pZCAwLGQ9YS5sZW5ndGgtMTtkPj0wO2QtLSloPVFvLmNyZWF0ZShhW2RdLGgpO3JldHVybiBofHwoaD1Rby5jcmVhdGUoaWkuY3JlYXRlKHQsdCkpKSxofSkpfWZ1bmN0aW9uIElhKGUsdCl7dmFyIG49W107cmV0dXJuIHQudmlzaXQoKGZ1bmN0aW9uKHIpe3ZhciBpO2lmKCJwcm9wZXJ0eSI9PT1yLnR5cGUmJiIkcmVmIj09PXIua2V5Tm9kZS52YWx1ZSYmInN0cmluZyI9PT0obnVsbD09PShpPXIudmFsdWVOb2RlKXx8dm9pZCAwPT09aT92b2lkIDA6aS50eXBlKSl7dmFyIG89ci52YWx1ZU5vZGUudmFsdWUscz1mdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUpe2lmKCIjIj09PWUpcmV0dXJuW107aWYoIiMiIT09ZVswXXx8Ii8iIT09ZVsxXSlyZXR1cm4gbnVsbDtyZXR1cm4gZS5zdWJzdHJpbmcoMikuc3BsaXQoL1wvLykubWFwKFZhKX0odCk7aWYoIW4pcmV0dXJuIG51bGw7cmV0dXJuIEZhKG4sZS5yb290KX0odCxvKTtpZihzKXt2YXIgYT1lLnBvc2l0aW9uQXQocy5vZmZzZXQpO24ucHVzaCh7dGFyZ2V0OiIiLmNvbmNhdChlLnVyaSwiIyIpLmNvbmNhdChhLmxpbmUrMSwiLCIpLmNvbmNhdChhLmNoYXJhY3RlcisxKSxyYW5nZTpQYShlLHIudmFsdWVOb2RlKX0pfX1yZXR1cm4hMH0pKSxQcm9taXNlLnJlc29sdmUobil9ZnVuY3Rpb24gUGEoZSx0KXtyZXR1cm4gaWkuY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCsxKSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgtMSkpfWZ1bmN0aW9uIEZhKGUsdCl7aWYoIXQpcmV0dXJuIG51bGw7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O3ZhciBuPWUuc2hpZnQoKTtpZih0JiYib2JqZWN0Ij09PXQudHlwZSl7dmFyIHI9dC5wcm9wZXJ0aWVzLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleU5vZGUudmFsdWU9PT1ufSkpO3JldHVybiByP0ZhKGUsci52YWx1ZU5vZGUpOm51bGx9aWYodCYmImFycmF5Ij09PXQudHlwZSYmbi5tYXRjaCgvXigwfFsxLTldWzAtOV0qKSQvKSl7dmFyIGk9TnVtYmVyLnBhcnNlSW50KG4pLG89dC5pdGVtc1tpXTtyZXR1cm4gbz9GYShlLG8pOm51bGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gVmEoZSl7cmV0dXJuIGUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1mdW5jdGlvbiBEYShlKXt2YXIgdD1lLnByb21pc2VDb25zdHJ1Y3Rvcnx8UHJvbWlzZSxuPW5ldyBOYShlLnNjaGVtYVJlcXVlc3RTZXJ2aWNlLGUud29ya3NwYWNlQ29udGV4dCx0KTtuLnNldFNjaGVtYUNvbnRyaWJ1dGlvbnModmEpO3ZhciByPW5ldyBIcyhuLGUuY29udHJpYnV0aW9ucyx0LGUuY2xpZW50Q2FwYWJpbGl0aWVzKSxpPW5ldyB6cyhuLGUuY29udHJpYnV0aW9ucyx0KSxvPW5ldyBsYShuKSxzPW5ldyBYcyhuLHQpO3JldHVybntjb25maWd1cmU6ZnVuY3Rpb24oZSl7bi5jbGVhckV4dGVybmFsU2NoZW1hcygpLGUuc2NoZW1hcyYmZS5zY2hlbWFzLmZvckVhY2goKGZ1bmN0aW9uKGUpe24ucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShlLnVyaSxlLmZpbGVNYXRjaCxlLnNjaGVtYSl9KSkscy5jb25maWd1cmUoZSl9LHJlc2V0U2NoZW1hOmZ1bmN0aW9uKGUpe3JldHVybiBuLm9uUmVzb3VyY2VDaGFuZ2UoZSl9LGRvVmFsaWRhdGlvbjpzLmRvVmFsaWRhdGlvbi5iaW5kKHMpLGdldExhbmd1YWdlU3RhdHVzOnMuZ2V0TGFuZ3VhZ2VTdGF0dXMuYmluZChzKSxwYXJzZUpTT05Eb2N1bWVudDpmdW5jdGlvbihlKXtyZXR1cm4gVXMoZSx7Y29sbGVjdENvbW1lbnRzOiEwfSl9LG5ld0pTT05Eb2N1bWVudDpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1bXSksbmV3IHFzKGUsdCxbXSl9KGUsdCl9LGdldE1hdGNoaW5nU2NoZW1hczpuLmdldE1hdGNoaW5nU2NoZW1hcy5iaW5kKG4pLGRvUmVzb2x2ZTpyLmRvUmVzb2x2ZS5iaW5kKHIpLGRvQ29tcGxldGU6ci5kb0NvbXBsZXRlLmJpbmQociksZmluZERvY3VtZW50U3ltYm9sczpvLmZpbmREb2N1bWVudFN5bWJvbHMuYmluZChvKSxmaW5kRG9jdW1lbnRTeW1ib2xzMjpvLmZpbmREb2N1bWVudFN5bWJvbHMyLmJpbmQobyksZmluZERvY3VtZW50Q29sb3JzOm8uZmluZERvY3VtZW50Q29sb3JzLmJpbmQobyksZ2V0Q29sb3JQcmVzZW50YXRpb25zOm8uZ2V0Q29sb3JQcmVzZW50YXRpb25zLmJpbmQobyksZG9Ib3ZlcjppLmRvSG92ZXIuYmluZChpKSxnZXRGb2xkaW5nUmFuZ2VzOk9hLGdldFNlbGVjdGlvblJhbmdlczpNYSxmaW5kRGVmaW5pdGlvbjpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoW10pfSxmaW5kTGlua3M6SWEsZm9ybWF0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj12b2lkIDA7aWYodCl7dmFyIGk9ZS5vZmZzZXRBdCh0LnN0YXJ0KTtyPXtvZmZzZXQ6aSxsZW5ndGg6ZS5vZmZzZXRBdCh0LmVuZCktaX19dmFyIG89e3RhYlNpemU6bj9uLnRhYlNpemU6NCxpbnNlcnRTcGFjZXM6ITA9PT0obnVsbD09bj92b2lkIDA6bi5pbnNlcnRTcGFjZXMpLGluc2VydEZpbmFsTmV3bGluZTohMD09PShudWxsPT1uP3ZvaWQgMDpuLmluc2VydEZpbmFsTmV3bGluZSksZW9sOiJcbiJ9O3JldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIEdyKGUsdCxuKX0oZS5nZXRUZXh0KCkscixvKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBUaS5yZXBsYWNlKGlpLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aCkpLHQuY29udGVudCl9KSl9fX0idW5kZWZpbmVkIiE9dHlwZW9mIGZldGNoJiYoU2E9ZnVuY3Rpb24oZSl7cmV0dXJuIGZldGNoKGUpLnRoZW4oKGU9PmUudGV4dCgpKSl9KTt2YXIgS2E9Ii8iLmNoYXJDb2RlQXQoMCksamE9Ii4iLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gcWEoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBlKTA9PT1uLmxlbmd0aHx8MT09PW4ubGVuZ3RoJiZuLmNoYXJDb2RlQXQoMCk9PT1qYXx8KDI9PT1uLmxlbmd0aCYmbi5jaGFyQ29kZUF0KDApPT09amEmJm4uY2hhckNvZGVBdCgxKT09PWphP3QucG9wKCk6dC5wdXNoKG4pKTtlLmxlbmd0aD4xJiYwPT09ZVtlLmxlbmd0aC0xXS5sZW5ndGgmJnQucHVzaCgiIik7bGV0IG49dC5qb2luKCIvIik7cmV0dXJuIDA9PT1lWzBdLmxlbmd0aCYmKG49Ii8iK24pLG59c2VsZi5vbm1lc3NhZ2U9KCk9PntVcigoKGUsdCk9Pm5ldyBjbGFzc3tfY3R4O19sYW5ndWFnZVNlcnZpY2U7X2xhbmd1YWdlU2V0dGluZ3M7X2xhbmd1YWdlSWQ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9jdHg9ZSx0aGlzLl9sYW5ndWFnZVNldHRpbmdzPXQubGFuZ3VhZ2VTZXR0aW5ncyx0aGlzLl9sYW5ndWFnZUlkPXQubGFuZ3VhZ2VJZCx0aGlzLl9sYW5ndWFnZVNlcnZpY2U9RGEoe3dvcmtzcGFjZUNvbnRleHQ6e3Jlc29sdmVSZWxhdGl2ZVBhdGg6KGUsdCk9PmZ1bmN0aW9uKGUsdCl7aWYoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckNvZGVBdCgwKT09PUthfSh0KSl7Y29uc3Qgbj15YS5wYXJzZShlKSxyPXQuc3BsaXQoIi8iKTtyZXR1cm4gbi53aXRoKHtwYXRoOnFhKHIpfSkudG9TdHJpbmcoKX1yZXR1cm4gZnVuY3Rpb24oZSwuLi50KXtjb25zdCBuPXlhLnBhcnNlKGUpLHI9bi5wYXRoLnNwbGl0KCIvIik7Zm9yKGxldCBlIG9mIHQpci5wdXNoKC4uLmUuc3BsaXQoIi8iKSk7cmV0dXJuIG4ud2l0aCh7cGF0aDpxYShyKX0pLnRvU3RyaW5nKCl9KGUsdCl9KHQuc3Vic3RyKDAsdC5sYXN0SW5kZXhPZigiLyIpKzEpLGUpfSxzY2hlbWFSZXF1ZXN0U2VydmljZTp0LmVuYWJsZVNjaGVtYVJlcXVlc3Q/U2E6dm9pZCAwfSksdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmNvbmZpZ3VyZSh0aGlzLl9sYW5ndWFnZVNldHRpbmdzKX1hc3luYyBkb1ZhbGlkYXRpb24oZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKHQpe2xldCBlPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvVmFsaWRhdGlvbih0LGUsdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyl9cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSl9YXN5bmMgZG9Db21wbGV0ZShlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobik7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0NvbXBsZXRlKG4sdCxyKX1hc3luYyBkb1Jlc29sdmUoZSl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1Jlc29sdmUoZSl9YXN5bmMgZG9Ib3ZlcihlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobik7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0hvdmVyKG4sdCxyKX1hc3luYyBmb3JtYXQoZSx0LG4pe2xldCByPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZm9ybWF0KHIsdCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfWFzeW5jIHJlc2V0U2NoZW1hKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnJlc2V0U2NoZW1hKGUpKX1hc3luYyBmaW5kRG9jdW1lbnRTeW1ib2xzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCkscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50U3ltYm9scyh0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZmluZERvY3VtZW50Q29sb3JzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCkscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50Q29sb3JzKHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBnZXRDb2xvclByZXNlbnRhdGlvbnMoZSx0LG4pe2xldCByPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQociksbz10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Q29sb3JQcmVzZW50YXRpb25zKHIsaSx0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUobyl9YXN5bmMgZ2V0Rm9sZGluZ1JhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Rm9sZGluZ1JhbmdlcyhuLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZ2V0U2VsZWN0aW9uUmFuZ2VzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKSxpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRTZWxlY3Rpb25SYW5nZXMobix0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9X2dldFRleHREb2N1bWVudChlKXtsZXQgdD10aGlzLl9jdHguZ2V0TWlycm9yTW9kZWxzKCk7Zm9yKGxldCBuIG9mIHQpaWYobi51cmkudG9TdHJpbmcoKT09PWUpcmV0dXJuIGxzLmNyZWF0ZShlLHRoaXMuX2xhbmd1YWdlSWQsbi52ZXJzaW9uLG4uZ2V0VmFsdWUoKSk7cmV0dXJuIG51bGx9fShlLHQpKSl9fSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1qc29uLndvcmtlci5qcy5tYXAKCg==', null, false);
4
4
  /* eslint-enable */
5
5
 
6
6
  export { WorkerFactory as default };