[{"Attribute":[{"category":"External analysis","disable_correlation":false,"first_seen":"2023-05-24T15:11:53.465000+00:00","to_ids":false,"type":"link","uuid":"6df0b2a0-e4ee-4152-83c9-46c3cf11c373","value":"https://lookyloo.circl.lu/tree/a73260d0-5338-425b-a4ee-b2f8f4b614c8"},{"category":"External analysis","comment":"Screenshot of the page at the end of the capture","data":"iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAYAAADo08FDAAAAAXNSR0IArs4c6QAAIABJREFUeJzs3WdAU2ffBvArCQkzEAzKECQ44kAUxYVWRVu1Vq2o3Utsn+7h7LK1il1Ph1Vr91Lbvq21raNS6xa1ilVRFKmKgyjIUCJhQwLJ+yHkkJAEAuqjtdfvS/HM+5yEQLnO/3+LCgtzTSAiIqJrTqkMvtZDICIiIiIiImoxrTbvWg+BiIiIAIiv9QCIiIiIiIiIiIiIiIiIiOjKYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDcLvWAyAiIqJrKyV7OrSVaY1uo/SMho97OEJ84qD0ina6Xc25ZBjOJcNYchbGYk2jx3TvPhmyqIQWjZmIiIiIiIiIiIiIHGMATERE9C+nrUxDbmlyo9tYr5fLVIgJmQu10hzemqp1qNq/CNUHFsNUrXP5vG5hQ1s2YCIiIiIiIiIiIiJyigEwERERNUupXoNkzRSkX1iMgWUT4bn7g2YFv9ejeamZAACV3BMJ6rAWb2ORnKtFcp4WAJCgDoVK7gUAWJaZDU1pJQBgWlQEFDJp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13jJycnEx8eTnZ1NQECAwzDzz4iKisLLy8uYb2pqKikpKTaVqCK/FxcXh7Oz813/PImIPEixsdcf9hREREQEVQCLiIiIiIjIHfz/Cn/h3l80MJvNfzj8hZxWyHm53/AXctr9/pn53M3v1wj28PDAw8PjL7uf5A9FihR52FMQEREREZGHxHFPIhERERERERERERERERER+cdRACwiIiIiIiIiIiIiIiIikk8oABYRERERERERERERERERyScUAIuIiIiIiIiIiIiIiIiI5BMKgEVERERERERERERERERE8gkFwCIiIiIiIiIiIiIiIiIi+YQCYBERERERERERERERERGRfML5YU9ARERE8pfjx48/7CkA0Lx5c+DvMx+Rf7ratWtz5coVbt269bCnIiIiIpLv5P77i4iIiMiDYIqJibA+7EmIiIgI+PoGPOwpiIiIiIiIiPxhsbHXH/YUREREBLWAFhERERERERERERERERHJNxQAi4iIiIiIiIiIiIiIiIjkEwqARURERERERERERERERETyCQXAIiIiIiIiIiIiIiIiIiL5hAJgEREREREREREREREREZF8QgGwiIiIiIiIiIiIiIiIiEg+oQBYRERERERERERERERERCSfUAAsIiIiIiIiIiIiIiIiIpJPKAAWEREREREREREREREREcknFACLiIiIiIiIiIiIiIiIiOQTCoBFRERERERERERERERERPIJBcAiIiIiIiIiIiIiIiIiIvmEAmARERERERERERERERERkXxCAbCIiIiIiIiIiIiIiIiISD6hAFhEREREREREREREREREJJ9QACwiIiIiIiIiIiIiIiIikk8oABYRERERERERERERERERySecH/YERERERPJy+vRpihYtip+f3196n7Nnz3Lo0CHCw8Mxm82UKFGCf/3rX5QpU+Yvva/8eaGhoTg5OVGyZEljX2xsLDExMVSpUuVPjx8SEkJAQAAFCxb802P9Xfz8889UrFgRb2/vhz2VvwWLxYrZbHrY0xAREREREREReWAUAIuIiMgD99tvv+Hl5UWZMmW4dOkSixcvtjneunVrvvnmG5t9AwcOJCAgwGbf3Llzad26Ne3atQMgPDyc7Oxsh/cMCAjA2fn+/tEmLCyMqVOnUqRIEVq1asVTTz2Fk5MToaGhrFmzhpiYGIYMGULx4sXvOlZ0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nGDVqlUOj3t7e+e5DrGTkxMBAQGcOnWKL7/80q46df78+XTr1s1mbVxHLl68mGdIfenSpTyvS09PZ+jQocTGxjJ58mRq165Nt27daNu2LZ06dSIiIoJx48bRu3dvm/bJ7u7uFCpUyG48Nzc3h/t/P7egoCB++eUXYzsqKgqz2czx48eNfcnJyURFRdlUVv/444+8//77duP/+uuvlChRgqysLCwWC2azmYMHDzJ69GgWLlzI2rVrbcJfgE2bNpGUlISHhweRkZFUr16dSpUq0aJFC6pUqXLHNau7d+9O9+7dje1p06aRnp7OggULHFawJyUlsWvXLjIyMjh79iwpKSn069ePc+fOUbduXYKCghg/fjxjx47l6NGjTJgwwab9+JNPPmlU20+aNIkLFy7QtWtXm3C6YsWKeHl52bVlP336NBkZGaSmppKQkEBYWBje3t4MGzaM7Oxs6tSpw+uvv84zzzxj83nu3LmTzMxMo1177hgnTpygaNGiPProoxQvXhyr1eowJL8XdwqBXZydKORp/5t2NjsxauJuY/udD78jLCKBr78P4evvQ3i772MU8cm7kllERERERERE5J9CAbCIiIj8JUwmE82a5ayz6eHhwYIFCyhXrhwhISEUKVKEggULsmDBAooXL87Zs2epXLkyrVq1AmDv3r0A9O/f32YN4Pu1ZcsWrFarzfqyoaGhFC5cmLJlywJw5swZIiMjee2114xzatWqhYeHB9euXaN+/fqULVsWV1dXwsLCjEA1PDyckSNHcvnyZT788EOys7M5f/68McY777zD8uXL6datG126dKFz5842lZUxMTHEx8cbn1Fe4uPjiY2NtQkhR44cyc8//wzktOWdOnUqCxcuJDk5GZPJxKZNm4iLi8PLy4tNmzYBOWsJjxs3zmbs2rVrs3//fvbv35/n/R999FGH+8ePH09aWhpLly412v/e/vkUL16cmTNn8vrrrzNz5kw++OADABo0aEBCQoJNVW+pUqXyDLp/7/XXX6dNmzbG9saNG3F1deW5554z9sXGxhIUFGQ8O2AEjcnJySxYsIDw8HDCwsIICwsjMzOT9u3bYzKZGDBgAJ06deK5557j3XffZcWKFXZzmDlzpvH3jRs35j//+Q8VK1bk/PnzjB07llmzZt2x6jrXkiVL2L59O/Pnz8/z+ZOTk9m5cycFChQgJSUF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YBERERERERERERERERGRfEIBsIiIiIiIiIiIiIiIiIhIPqEAWEREREREREREREREREQkn1AALCIiIiIiIiIiIiIiIiKSTygAFhERERERERERERERERHJJxQAi4iIiIiIiIiIiIiIiIjkEwqARURERERERERERERERETyCQXAIiIiIiIiIiIiIiIiIiL5hAJgEREREREREREREREREZF8QgGwiIiIiIiIiIiIiIiIiEg+oQBYRERERERERERERERERCSfUAAsIiIiIiIiIiIiIiIiIpJPKAAWEREREREREREREREREcknFACLiIiIiIiIiIiIiIiIiOQTzg97AiIiIpK//PDDDw97CgA0b94c+PvMR+Sfrnbt2ly5coVbt2497KmIiIiI5Du5//4iIiIi8iCYYmIirA97EiIiIgK+vgEPewoPxM2bNx/2FADw8fEB/j7zEfmny/0zJSIiIiKSl9jY6w97CiIiIoJaQIuIiIiIiIiIiIiIiIiI5BsKgEVERERERERERERERERE8gkFwCIiIiIiIiIiIiIiIiIi+YQCYBERERERERERERERERGRfEIBsIiIiIiIiIiIiIiIiIhIPuH8sCcgIiIiIiL/TOXLl3/YU5C/iTJlyrB79+6HPQ0RERERERERQRXAIiIiIiIi8ieUKVOGhg0bPuxpiIiIiIiIiMj/UQWwiIiIiIj8KZcurXnYU5CHaPjwTX96jNjYWG7dukWFChXu67qIiAjMZjP+/v73fc/Q0FAASpcubTdm8eLF72usGzduEB0dTWBg4H3P4zrnElMAACAASURBVGG7dOkSLi4ulCpV6mFPRURERERERB4QBcAiIiIiwI8//sipU6eoVasWDRo0uOv5GRkZREdH3/U8Hx8fChQocE9zsFqt3Lx5k+joaMLDwwkLC+Ppp5+mWLFidudmZWVhsVjuOqaTkxMuLi42+85fvEmFct6YnUw2+y0WK2az7T6AsyFxVK1U5J6eQUTkXqSlpeHu7m5s79y5k23btrFy5Upj38WLFylXrhxOTo4bV1mtVt59911KlChBt27djP1eXl52oW6ujIwMZs2aRe/evQkODsZisdC6dWtWrFjB2LFjSUhI4IUXXmDHjh14eXnd8/Ps3bvXbv7/FJ9//jl+fn688cYbxr6VK1fi5OTE888/T1pamrHfbDbj6+v7wO4dGhpq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u5IH/kb7UuEvE65NsfvMlD4/eX8N3Ncm3Ru6B82U64oB4Er6UG6haB/KdcZgud52GAB+vC3D94l+X4xcp6L9qVC/0v7oN/Ik51z8u5QBYJ0zXoXvKkD/+q10XdG+GL+ODLVpqA0GgImIiOhpkj7rDhARERERVUdVmcuZiIiIiIiIiIjoaWEAmIiIiIiIiIiIiIiIiIiommAAmIiIiIiIiIiIiIiIiIiommAAmIiIiIiIiIiIiIiIiIiomjB71h0gIiKi6kUz4bVn3QUiIiIiIiIiIiKi/7eYAUxEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE2YPesOEBERUfXy559/PusuEFUrAQEBiI+PR05OzrPuChERERH9Q1566aVn3QUiIiKqRiQZGSmaZ90JIiIiApydPZ51F56K7OzsZ90FomrFycnpWXeBiIiIiMgkmZkPnnUXiIiICBwCmoiIiIiIiIiIiIiIiIio2mAAmIiIiIiIiIiIiIiIiIiommAAmIiIiP7z1Go11Gr1s+4GERERERERERER0TPHADARERH9J2RlZSEvL09veUREBKZNm4bvvvvO5LY0Gs3T7FqlLl26hM8++wwbNmyAXC7/V7f9tBQUFCAhIQE5OTnPuitERETPhczMTMTGxlZ5vZSUFDx8+PBvb/fcuXMoLi7WWXbr1i2T2kxISEBCQoJon6oqNTUVERERVV7vaRD7Tfg8KCkpwblz5551N54rV69eRW5u7rPuBhEREdH/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U8OHD9fgwYM1Z84cp2H7gQMHtHDhQh04cECDBg1yhFn3gsjISLm4uDjaL9aqVStbsHazU6dOqV+/ftm2b9++XXXq1Lnl9cxms+bOnasBAwbIbDbrhRdeuOX6mzn5K5VAjz32mFJSUjR58mTFxcWpdOnSjjU409LSNHbsWFWrVk2VKlXSkCFDNHv2bMe/5U2bNumdd96RzWZT79691a1bN/n4+Cg1NVXLli3T0qVL1b17d0eb0+HDh2vAgAGaN2+eQkJCdOLECZ06dSrbnH777TeZTCZ9++23Tudcs2bNLC1Et27dqokTJ6pRo0YaMmRIlmNvPPQxaNAg9e7dW6NHj1bLli2zHGMymTR+/HidOHFCCxcudPo5nj59WjabTaVKlXJsu7Ge942WzX+2b9++LNWYf14DWMr8WbF7925duHBBY8aMyfZwxq0qgKXM1qQvv/yybDabWrZsqdDQUHl7eys9PV3u7u5Z3k/x4sX11VdfqVSpUtq5c6djXdKbFS1aVF5eXho/fryOHDmiunXrqk2bNpIyg/Bly5YpLCzMMa67u7u6deumt956S71791bVqlXl4eGhlJQUxcbGql69egoJCdGrr76q8uXLO0LF4cOHq1SpUpo7d6727t2rBQsWaP78+apRo4Zq166tw4cP5+vDAuXLl9f7778vX1/fXH8HuLq6/uVuBAcOHNDkyZNlNpu1YMGCbK1u79SqVav0xRdf6LfffpOfn5/atWunXr165fqQSufOnRUSEpJr14eb9enTRwMHDnR8BufPn9fcuXO1ZcsWR5eAG8GplNnKetq0aRo1apRGjRqlN9980/H35WaXLl3Sp59+qlWrVumxxx7ThAkT7nrXh7xKSEiQxWJxPEATFBSUp99LN1otb926VR9++KHj92W/fv2UnJysnj17qm/fvnrqqaeyBX8JCQl69dVXHVXIr776qr766it98MEHqlKliqMNvc1mU1RUVLYlAp599ln9+OOPGjFihLp166YqVao47jPsdnuOYf+N+65Zs2YpLCxMvr6+MhgMMpvNSklJUUpKikJDQ3Ndi3nIkCE6ceKEunfvrvbt26thw4YqX768QkJCst2DvPDCC9q4caN69Oiha9cW0MyeAAAgAElEQVSuqVevXnl6KOJO7kvv9J62Tp06cnNz04QJE/Tiiy9mC7n/fP9nMpmUmpqqSpUq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QwN99OzmilFD/TGkv4/Gc8nNr8aV+FzcuFWExFuFMDDQw/bvJsHIUB8lZWLMeu0wxo0KxGvP9dSY33jPwZu4dDUHNbVSWJgb4vU5vbSqrk+eS0VlVT2mT+wMADh4NBlyhRKO9mZwdDCHi6OFRiVsUUktvvruL3y6cIhQmVsnkcPE2KDdVMsWFteisKgGfj62wmAAIiIiav9KS/P/7UMgIiIiMAAmIiL6X6M9BcBEpJtUqkB5pQRSqQKODmYwMWZDHkAdFhaX1sLP21ajqvhh5Oar58pta4CqUKo0BnDUimX/+MAFIiIiovaOATAREdH/DgyAiYiI/pdgAExERERERET/lzEAJiIi+t9B78GrEBERERERERERERERERHR/wUMgImIiIiIiIiIiIiIiIiI2gkGwERERERERERERERERERE7QQDYCIiIiIiIiIiIiIiIiKidoIBMBERERERERERERERERFRO8EAmIiIiIiIiIiIiIiIiIionWAATERERERERERERERERETUTjAAJiIiIiIiIiIiIiIiIiJqJxgAExERERERERERERERERG1EwyAiYiIiIiIiIiIiIiIiIjaCQbARERERERERERERERERETtBANgIiIiIiIiIiIiIiIiIqJ2ggEwEREREREREREREREREVE7wQCYiIiIiIiIiIiIiIiIiKidYABMRERERERERERERERERNROMAAmIiIiIiIiIiIiIiIiImonGAATEREREREREREREREREbUTDICJiIiIiIiIiIiIiIiIiNoJBsBERERERERERERERERERO0EA2AiIiIiIiIiIiIiIiIionaCATARERERERERERERERERUTvBAJiIiIiIiIiIiIiIiIiIqJ1gAExERERERERERERERERE1E4wACYiIiIiIiIiIiIiIiIiaicYABMRERERERERERERERERtRMMgImIiIiIiIiIiIiIiIiI2gkGwERERERERERERERERERE7QQDYCIiIiIiIiIiIiIiIiKidoIBMBERERERERERERERERFRO8EAmIiIiIiIiIiIiIiIiIionWAATERERERERERERERERETUTjAAJiIiIiIiIiIiIiIiIiJqJxgAExERERERERERERERERG1EwyAiYiIiIiIiIiIiIiIiIjaCQbARERERERERERERERERETtBANgIiIiIiIiIiIiIiIiIqJ2ggEwEREREREREREREREREVE7wQCYiIiIiIiIiIiIiIiIiKidYABMRERERERERERERERERNROMAAmIiIiIiIiIiIiIiIiImonGAATEREREREREREREREREbUTDICJiIiIiIiIiIiIiIiIiNoJBsBERERERERERERERERERO2Ewb99AERERPTvOpJf8W8fAhERERERET1GE11t/u1DICIion8RK4CJiIiIiIiIiIiIiIiIiNoJBsBERERERERERERERERERO0EA2AiIiIiIiIiIiIiIiIionaCATARERERERERERERERERUTvBAJiIiIiIiIiIiIiIiIiIqJ1gAExERERERERERERERERE1E4wACYiIiIiIiIiIiIiIiIiaicYABMRERERERERERERERERtRMMgImIiIiIiIiIiIiIiIiI2gkGwERERERERERERERERERE7QQDYCIiIiIiIiIiIiIiIiKidoIBMBERERERERERERERERFRO8EAmIiIiIiIiIiIiIiIiIionWAATERERERERERERERERETUTjAAJiIiIiIiIiIiIiIiIiJqJxgAExERERERERERERERERG1EwyAiYiIiIiIiIiIiIiIiIjaCQbARERERERERERERERERETtBANgIiIiIiIiIiIiIiIiIqJ2ggEwEREREREREREREREREVE7YfBvHwARERH9uya62vzbh0BEREREREREREREjwkrgImIiIiIiIiIiIiIiIiI2gkGwERERNQm1TVSSGWKf+2x428U6LwvO7cKmTmVD9yHXK7Epas5UCpVj/vw2pWq6nrEJeb/24dB/wClUgWZTKmxTKUCpNIHf67lciUUiqbPTnWNFOI62UMfQ1FJLUpKxQ+9XX29Aqp/8aNbUiZGaXndv3cAj+BuWhkk9fIW75fJlP/rr4t5BdWorpH+24dB9I/hdy8RERERET1ubAFNREREbfLD9qvQ19fDgD5eqHtA8OPoYI5OgQ6trrNt73WYmxli+sTOD3zstMxyLFsTiUPbn9S67/jpu5BKFZj/cu9W91FTK8W7i0/i/JHnYGSkDwCIjctF0u1irXXHjwqEg53ZA4/rYV1PKkTHAHuYGD/4T7Bjp+5CoVDqvK9fL0842D/4+GQyJQwNtcf7ietkuHQ1F726u8HSwkjjvnvpZfj0y0j8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M2YoJydH48ePV2RkpJo1a1ap47OkgoICtW7dWrm5uTp69KgiIiKUlpamqKgoPfLIIzp06JDd9unp6bYZrZMnT9azzz6rmTNn2u5fsWKFxowZo2bNmikmJsZ2u9lsVmZmpl1bWVlZduUCi9qujtI+OxXtzw0bNqhz58666667lJ6eruPHj0tSpT4nkvTTTz8pNjZWOTk5OnfunG6++WYNGjTIdv+3336rrl27qlevXrp06ZImTZqkdu3aKTw8XBaLRceOHZOfn59mz54ts9msqVOnavfu3Q6zdA8cOKAvv/yyUkF0RYofk1U9vqQ/9lGzZs00ZMgQ/fjjj7a1/axWq2bPnq3IyEjdd999ys/P17vvvqvVq1frkUceUXJysubPn6/HH39cHTt2VFZWlubMmXNZrwcAgPIcO3ZMPj4+slgsioqKktVqLXf70NBQBQQEyNXVVefOnZOLi4vS0tIUFhamsLCwalWNkaRatWqpTp06On/+vC0A9vPz07Bhw8o915Acz4/279+vESNG6IknnlBqaqpee+01bdiwQXfffbfd48o7f0hISNDs2bM1YsSICp8/JSWl1POPoKAgpaSkONx+9OhRxcXFqUePHtVuAwAAoKSruyAGAAD4r1V0MaiiEmq7du1SSEiI7YKGu7u7hg8froMHDyo5Odm2Xb9+/WyzU2+44QZFRkZq165dkqTbb79dW7dulVQYOB44cEA9e/a0PTYhIUEjRoxQSEhIqf08d+6cWrduLamwxFz9+vV15swZ2zZubm4aOXKkvLy85O3trYiICJ0/f77S70XRBSYvLy/l5uaWu11F5a3j4+P1yiuv6Ny5c3rjjTdso/vLe59LXpjLzs7WggUL9OWXX2rChAm65ZZb7O43Go3q1q2bunbtqvT0dG3fvr3Mtj08PDR69GjNmjVLISEhmjFjhpYsWVLhxcDivL29bTNKW7ZsqczMTA0dOlQuLi5q06aNcnJylJSUVKm2Kns8DR48WO7u7mrSpIk8PDzUp08f1apVyzaT4ty5c1VqrySDwaDu3bvr+++/l1QYtrdr167MdWTLExoaqs2bN+vixYtq0qRJuaWaa1p5n53ShIaGas+ePTp58qT8/Px00003Ven5GjdurM6dO6tLly7q0KGDfv75Z1u5SEl65JFH1KNHD128eFFJSUkKCQmxmzXk5uamRx99VEaj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nAQBMAAAAAAAAAAAAAA4CQJgAAAAAAAAAAAAAHASBMAAAAAAAAAAAAAA4CQIgAEAAAAAAAAAAADASRAAAwAAAAAAAAAAAICTIAAGAAAAAAAAAAAAACdBAAwAAAAAAAAAAAAAToIAGAAAAAAAAAAAAACcBAEwAAAAAAAAAAAAADgJAmAAAAAAAAAAAAAAcBIEwAAAAAAAAAAAAADgJAiAAQAAAAAAAAAAAMBJEAADAAAAAAAAAAAAgJMgAAYAAAAAAAAAAAAAJ0EADAAAAAAAAAAAAABOggAYAAAAAAAAAAAAAJwEATAAAAAAAAAAAAAAOAkCYAAAAAAAAAAAAABwEgTAAAAAAAAAAAAAAOAkCIABAAAAAAAAAAAAwEkQAAMAAAAAAAAAAACAkyAABgAAAAAAAAAAAAAnQQAMAAAAAAAAAAAAAE6CABgAAAAAAAAAAAAAnAQBMAAAAAAAAAAAAAA4CQJgAAAAAAAAAAAAAHASBMAAAAAAAAAAAAAA4CQIgAEAAAAAAAAAAADASRAAAwAAAAAAAAAAAICTIAAGAAAAAAAAAAAAACdBAAwAAAAAAAAAAAAAToIAGAAAAAAAAAAAAACcBAEwAAAAAAAAAAAAADgJAmAAAAAAAAAAAAAAcBIEwAAAAAAAAAAAAADgJAiAAQAAAAAAAAAAAMBJEAADAAAAAAAAAAAAgJMgAAYAAAAAAAAAAAAAJ0EADAAAAAAAAAAAAABOggAYAAAAAAAAAAAAAJwEATAAAAAAAAAAAAAAOAkCYAAAAAAAAAAAAABwEgTAAAAAAAAAAAAAAOAkCIABAAAAAAAAAAAAwEkQAAMAAAAAAAAAAACAkyAABgAAAAAAAAAAAAAnQQAMAAAAAAAAAAAAAE6CABgAAAAAAAAAAAAAnAQBMAAAAAAAAAAAAAA4CQJgAAAAAAAAAAAAAHASBMAAAAAAAAAAAAAA4CQIgAEAAAAAAAAAAADASRAAAwAAAAAAAAAAAICTIAAGAAAAAAAAAAAAACdBAAwAAAAAAAAAAAAAToIAGAAAAAAAAAAAAACcBAEwAAAAAAAAAAAAADgJAmAAAAAAAAAAAAAAcBIEwAAAAAAAAAAAAADgJAiAAQAAAAAAAAAAAMBJ/D+csEkLy5WglQAAAABJRU5ErkJggg==","disable_correlation":true,"first_seen":"2023-05-24T15:11:53.465000+00:00","to_ids":false,"type":"attachment","uuid":"a1e0abe9-8f3f-48b1-89d6-71c822bc0663","value":"screenshot_landing_page.png"},{"category":"External analysis","comment":"HTTP Archive (HAR) of the whole capture","data":"eyJsb2ciOiB7InZlcnNpb24iOiAiMS4yIiwgImNyZWF0b3IiOiB7Im5hbWUiOiAiUGxheXdyaWdodCIsICJ2ZXJzaW9uIjogIjEuMzMuMCJ9LCAiYnJvd3NlciI6IHsibmFtZSI6ICJjaHJvbWl1bSIsICJ2ZXJzaW9uIjogIjExMy4wLjU2NzIuNTMifSwgInBhZ2VzIjogW3sic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjRUMTU6MTE6NTMuNDU5WiIsICJpZCI6ICJwYWdlQGZiOWIyNjQ3ODU1NDIwNmJlMDIwZWQ1YmRkMmIzYzE1IiwgInRpdGxlIjogIlx1NGUwOVx1NGU5NVx1NGY0Zlx1NTNjYlx1NGZlMVx1OGExN1x1MzBjMFx1MzBhNFx1MzBlY1x1MzBhZlx1MzBjOFx1MzAwMFx1MzBlZFx1MzBiMFx1MzBhNFx1MzBmMyIsICJwYWdlVGltaW5ncyI6IHsib25Db250ZW50TG9hZCI6IDEyOTIsICJvbkxvYWQiOiAxMjkyfX1dLCAiZW50cmllcyI6IFt7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI0VDE1OjExOjUzLjQ2NVoiLCAidGltZSI6IDU5Mi40NTQwMDAwMDAwMDAxLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2NsaWVudC9pc3BjLnBocCIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogIndlaWxvZ2luLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9pYmcvY2xpZW50L2lzcGMucGhwIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC43In0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImRvY3VtZW50In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuYXZpZ2F0ZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAibm9uZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXVzZXIiLCAidmFsdWUiOiAiPzEifSwgeyJuYW1lIjogInVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNTU0LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJjb250ZW50LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNToxMTo1MyBHTVQifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJuZ2lueCJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwIn0sIHsibmFtZSI6ICJ2YXJ5IiwgInZhbHVlIjogIkFjY2VwdC1FbmNvZGluZyJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAtMSwgIm1pbWVUeXBlIjogInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIsICJjb21wcmVzc2lvbiI6IDB9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiA1OTEsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDU5MX0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogMS4xNjMsICJjb25uZWN0IjogMjkzLjM4OSwgInNzbCI6IDE1MC4yNDUsICJzZW5kIjogMCwgIndhaXQiOiAxNDQuMjU4LCAicmVjZWl2ZSI6IDMuMzk5fSwgInBhZ2VyZWYiOiAicGFnZUBmYjliMjY0Nzg1NTQyMDZiZTAyMGVkNWJkZDJiM2MxNSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3LndlaWxvZ2luLmNvbSIsICJpc3N1ZXIiOiAiUjMiLCAidmFsaWRGcm9tIjogMTY4NDg5MzE1NywgInZhbGlkVG8iOiAxNjkyNjY5MTU2fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjRUMTU6MTE6NTMuOTI2WiIsICJ0aW1lIjogMTQ4LjI4MzAwMDAwMDAwMDAyLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2NsaWVudC9sX2hvbWVfcC5waHAiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJ3ZWlsb2dpbi5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvaWJnL2NsaWVudC9sX2hvbWVfcC5waHAifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICJ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgsYXBwbGljYXRpb24vc2lnbmVkLWV4Y2hhbmdlO3Y9YjM7cT0wLjcifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3dlaWxvZ2luLmNvbS9pYmcvY2xpZW50L2lzcGMucGhwIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJkb2N1bWVudCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibmF2aWdhdGUifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDYwMCwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9odG1sOyBjaGFyc2V0PVVURi04In0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTU6MTE6NTMgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogNTExMTYsICJtaW1lVHlwZSI6ICJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiLCAiY29tcHJlc3Npb24iOiA0MzIzMiwgInRleHQiOiAiXG48IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuXHQ8aGVhZD5cblx0XHQ8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cblx0XHQ8dGl0bGU+XHU0ZTA5XHU0ZTk1XHU0ZjRmXHU1M2NiXHU0ZmUxXHU4YTE3XHUzMGMwXHUzMGE0XHUzMGVjXHUzMGFmXHUzMGM4XHUzMDAwXHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzPC90aXRsZT5cblx0XHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgbWVkaWE9XCJhbGxcIiBocmVmPVwiLi4vY3NzL3BjL3RhYmxlcy5jc3NcIj5cblx0XHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgbWVkaWE9XCJhbGxcIiBocmVmPVwiLi4vY3NzL3BjL3NjcmVlbi5jc3NcIj5cblx0XHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgbWVkaWE9XCJhbGxcIiBocmVmPVwiLi4vY3NzL3BjL3NjcmVlbl9lZGdlLmNzc1wiPlxuXHRcdDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiB0eXBlPVwidGV4dC9jc3NcIiBtZWRpYT1cInByaW50XCIgaHJlZj1cIi4uL2Nzcy9wYy9wcmludC5jc3NcIj5cblx0XHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgbWVkaWE9XCJhbGxcIiBocmVmPVwiLi4vY3NzL3BjL2lzTG9naW4uY3NzXCI+XG5cdFx0PGxpbmsgcmVsPVwic2hvcnRjdXQgaWNvblwiIGhyZWY9XCJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9mYXZpY29uLmljb1wiIHNpemVzPVwiMTZ4MTZcIj5cblx0XHQ8bGluayByZWw9XCJpY29uXCIgaHJlZj1cImh0dHBzOi8vZGlyZWN0LnNtdGIuanAvL2Zhdmljb24uaWNvXCIgc2l6ZXM9XCIxNngxNlwiPlxuXHRcdDxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjE4MHgxODBcIiBocmVmPVwiaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi5wbmdcIj5cblx0XHQ8bGluayByZWw9XCJhcHBsZS10b3VjaC1pY29uXCIgc2l6ZXM9XCI1N3g1N1wiIGhyZWY9XCJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTU3eDU3LnBuZ1wiPlxuXHRcdDxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjYweDYwXCIgaHJlZj1cImh0dHBzOi8vZGlyZWN0LnNtdGIuanAvL2FwcGxlLXRvdWNoLWljb24tNjB4NjAucG5nXCI+XG5cdFx0PGxpbmsgcmVsPVwiYXBwbGUtdG91Y2gtaWNvblwiIHNpemVzPVwiNzJ4NzJcIiBocmVmPVwiaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi03Mng3Mi5wbmdcIj5cblx0XHQ8bGluayByZWw9XCJhcHBsZS10b3VjaC1pY29uXCIgc2l6ZXM9XCI3Nng3NlwiIGhyZWY9XCJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTc2eDc2LnBuZ1wiPlxuXHRcdDxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjExNHgxMTRcIiBocmVmPVwiaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xMTR4MTE0LnBuZ1wiPlxuXHRcdDxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjEyMHgxMjBcIiBocmVmPVwiaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xMjB4MTIwLnBuZ1wiPlxuXHRcdDxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjE0NHgxNDRcIiBocmVmPVwiaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xNDR4MTQ0LnBuZ1wiPlxuXHRcdDxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjE1MngxNTJcIiBocmVmPVwiaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xNTJ4MTUyLnBuZ1wiPlxuXHRcdDxzdHlsZT5cblx0XHRcdC5hY3RpdmUge1xuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDIwMCk7XG5cdFx0XHR9XG5cblx0XHRcdC51bmFjdGl2ZSB7XG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6IHJnYigyMDksIDIxMywgMjE5KTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0LmxvYWRpbmcge1xuXHRcdFx0XHRoZWlnaHQ6IDEwMHZoO1xuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSB7XG5cdFx0XHRcdHdpZHRoOiAxNTBweDtcblx0XHRcdFx0aGVpZ2h0OiAxNXB4O1xuXHRcdFx0XHRtYXJnaW46IDAgYXV0bztcblx0XHRcdFx0bWFyZ2luLXRvcDogMTAwcHg7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSBzcGFuIHtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHR3aWR0aDogMTVweDtcblx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRtYXJnaW4tcmlnaHQ6IDVweDtcblx0XHRcdFx0YmFja2dyb3VuZDogYmxhY2s7XG5cdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uOiBsb2FkIDEuMDRzIGVhc2UgaW5maW5pdGU7XG5cdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHQubG9hZGluZzEgc3BhbjpsYXN0LWNoaWxkIHtcblx0XHRcdFx0bWFyZ2luLXJpZ2h0OiAwcHg7XG5cdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRALXdlYmtpdC1rZXlmcmFtZXMgbG9hZCB7XG5cdFx0XHRcdDAlIHtcblx0XHRcdFx0XHRvcGFjaXR5OiAxO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdDEwMCUge1xuXHRcdFx0XHRcdG9wYWNpdHk6IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCgxKSB7XG5cdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjEzcztcblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCgyKSB7XG5cdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjI2cztcblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCgzKSB7XG5cdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjM5cztcblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCg0KSB7XG5cdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjUycztcblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCg1KSB7XG5cdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjY1cztcblx0XHRcdH1cblx0XHQ8L3N0eWxlPlxuXHQ8L2hlYWQ+XG5cdDxib2R5PlxuXHRcdDxkaXYgaWQ9XCJwYWdlXCI+XG5cblxuXG5cblx0XHRcdDxkaXYgaWQ9XCJwcmludC1tYXN0aGVhZFwiPlxuXHRcdFx0XHQ8dGFibGUgd2lkdGg9XCIxMDAlXCIgYm9yZGVyPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiPlxuXHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMTNcIj48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjEzXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMjAzXCIgaGVpZ2h0PVwiMzFcIj48aW1nIHNyYz1cIi4uL2ltZy9sb2dvX2NvX3ByaW50LmdpZlwiIGhlaWdodD1cIjMxXCIgd2lkdGg9XCIyMDNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiXHU0ZTA5XHU0ZTk1XHU0ZjRmXHU1M2NiXHU0ZmUxXHU4YTE3XHU5MjgwXHU4ODRjXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiMTgzXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjEzXCI+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0PHRkIGhlaWdodD1cIjMxXCIgY29sc3Bhbj1cIjNcIiBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJtaWRkbGVcIj48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjEzXCI+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0PHRkIGhlaWdodD1cIjMwXCIgY29sc3Bhbj1cIjNcIiBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJtaWRkbGVcIj5cblx0XHRcdFx0XHRcdFx0XHQ8aDE+XHUzMGE0XHUzMGYzXHUzMGJmXHUzMGZjXHUzMGNkXHUzMGMzXHUzMGM4XHUzMGQwXHUzMGYzXHUzMGFkXHUzMGYzXHUzMGIwXHUzMDAwXHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzPC9oMT5cblx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0PC90YWJsZT5cblx0XHRcdDwvZGl2PlxuXG5cblx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCI+XG5cdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdDx0ZD5cblxuXG5cblxuXG5cdFx0XHRcdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgaWQ9XCJtYXN0aGVhZC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIyMDNcIiBoZWlnaHQ9XCIzNlwiPjxhIGhyZWY9XCJodHRwczovL3d3dy5zbXRiLmpwXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGltZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIuLi9pbWcvbG9nb19jby5naWZcIiBoZWlnaHQ9XCIzMVwiIHdpZHRoPVwiMjAzXCIgYm9yZGVyPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlx1NGUwOVx1NGU5NVx1NGY0Zlx1NTNjYlx1NGZlMVx1OGExN1x1OTI4MFx1ODg0Y1wiPjwvYT48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgYWxpZ249XCJyaWdodFwiIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCIgYWxpZ249XCJyaWdodFwiIGNlbGxwYWRkaW5nPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImdsb2JhbG5hdmlcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjEyXCIgd2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwiZ25hdmktdGQxXCI+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwibWNwLW5vLXJlcGxhY2UtdXJsIG1jcC1wY3NwLWxpbmtcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRocmVmPVwiamF2YXNjcmlwdDpwb3N0VG9VcmwoJ2h0dHBzOi8vc3AuZGlyZWN0LnNtdGIuanAuLi9pbWdiL2xvZ2luLmRvJylcIj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdTMwYjlcdTMwZGVcdTMwZmNcdTMwYzhcdTMwZDVcdTMwYTlcdTMwZjNcdTMwYjVcdTMwYTRcdTMwYzhcdTMwNmZcdTMwNTNcdTMwNjFcdTMwODlcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPiB8XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3RvcCcpO1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdTMwZDhcdTMwZWJcdTMwZDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvYT4gfCA8YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRocmVmPVwiaHR0cHM6Ly9mYXEuc210Yi5qcC9jYXRlZ29yeS9zaG93LzE2Mj9zaXRlX2RvbWFpbj1kZWZhdWx0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0PVwiX2JsYW5rXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx1MzA4OFx1MzA0Zlx1MzA0Mlx1MzA4Ylx1MzA1NFx1OGNlYVx1NTU0ZlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPiB8IDxhIGhyZWY9XCJodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL3JhdGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXQ9XCJfYmxhbmtcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHU5MWQxXHU1MjI5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2E+IHwgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnNtdGIuanAvcGVyc29uYWwvY2hhcmdlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0PVwiX2JsYW5rXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx1NjI0Ylx1NjU3MFx1NjU5OVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPiB8IDxhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhyZWY9XCJodHRwczovL2RpcmVjdC5zbXRiLmpwL2FwMy9zaXJ5b3VTZWlreXV1L3NpcnlvdVNlaWt5dXVHb2FubmFpLmRvXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0PVwiX2JsYW5rXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx1OGNjN1x1NjU5OVx1OGFjYlx1NmM0MjwvYT4mbmJzcDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIxNlwiPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiMTZcIiBhbHQ9XCJcIj48L3RkPlxuXG5cblx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjBcIiBjZWxscGFkZGluZz1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIiBpZD1cIm1hc3RoZWFkLTJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjExXCIgd2lkdGg9XCI3XCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0PC90Ym9keT5cblx0XHRcdDwvdGFibGU+XG5cdFx0XHQ8Zm9ybSBuYW1lPVwiaWJMb2dpbkFjdGlvbkZvcm1cIiBtZXRob2Q9XCJwb3N0XCIgYWN0aW9uPVwiLi4vaW1nYi9sb2dpbi5kb1wiIG9uc3VibWl0PVwicmV0dXJuIGZhbHNlO1wiPjxpbnB1dFxuXHRcdFx0XHRcdHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwib3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmh0bWwuVE9LRU5cIlxuXHRcdFx0XHRcdHZhbHVlPVwiZWRlNWVhY2Q2NmNjMjIyYWZhNzI0NmMwYzY4Mjc3YjNcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJhdG9tLnNjcmVlbkZsb3cudG9rZW4uZGVmYXVsdFwiXG5cdFx0XHRcdFx0dmFsdWU9XCI2MzlkN2JiZWRkMDVjZGFiNTk0NTIyZTU1MmY4MDhlNFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImF0b21fYWN0aW9uUGFyYW1ldGVyXCIgdmFsdWU9XCJcIj5cblxuXG5cdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCI+XG5cdFx0XHRcdFx0PHRib2R5PlxuXG5cdFx0XHRcdFx0XHQ8dHI+XG5cblx0XHRcdFx0XHRcdFx0PHRkIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgaWQ9XCJwYWdldGl0bGVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjY1JVwiIHZhbGlnbj1cIm1pZGRsZVwiIGNsYXNzPVwidGQtcGFnZXRpdGxlMVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGgxPlx1MzBhNFx1MzBmM1x1MzBiZlx1MzBmY1x1MzBjZFx1MzBjM1x1MzBjOFx1MzBkMFx1MzBmM1x1MzBhZFx1MzBmM1x1MzBiMFx1MzAwMFx1MzBlZFx1MzBiMFx1MzBhNFx1MzBmMzwvaDE+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIzNSVcIiBoZWlnaHQ9XCIzMFwiIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiIGNsYXNzPVwidGQtcGFnZXRpdGxlMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMVwiIGFsdD1cIlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cblx0XHRcdFx0XHRcdFx0XHQ8YnI+XG5cblx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgd2lkdGg9XCIxMDAlXCIgYm9yZGVyPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNsYXNzPVwiaW5mb3RhYmxlNlwiIHYtc2hvdz0ndGlwc1Nob3cnPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cblxuXG5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjQwXCIgYWxpZ249XCJjZW50ZXJcIiB2YWxpZ249XCJ0b3BcIiBjbGFzcz1cImluZm90YWJsZTYtdGQxXCI+PGltZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIuLi9pbWcvaWNvX2FsZXJ0LmdpZlwiIGhlaWdodD1cIjMzXCIgd2lkdGg9XCIyNVwiIGFsdD1cIlwiPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiIGNsYXNzPVwiaW5mb3RhYmxlNi10ZDJcIj48c3BhbiBjbGFzcz1cImFsZXJ0XCI+XG5cblxuXG5cblxuXG5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aDI+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdTUxNjVcdTUyOWJcdTUxODVcdTViYjlcdTMwNmJcdTRlMGRcdTUwOTlcdTMwNGNcdTMwNDJcdTMwOGFcdTMwN2VcdTMwNTlcdTMwMDIoXHUzMGUxXHUzMGMzXHUzMGJiXHUzMGZjXHUzMGI4XHU3NTZhXHU1M2Y3OkEwMEkxMDMpXG5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2gyPlxuXG5cblxuXG5cblxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cblxuXG5cblxuXG5cblxuXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7dGlwc319XG5cblxuXG5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImxvYWRpbmdcIlxuXHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogY2VudGVyO2FsaWduLWl0ZW1zOiBjZW50ZXI7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIlxuXHRcdFx0XHRcdFx0XHRcdFx0di1zaG93PVwibG9hZGluZ1Nob3dcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxwPlx1NzhiYVx1OGE4ZFx1NGUyZFx1MzAwMVx1MzBkYVx1MzBmY1x1MzBiOFx1MzA5Mlx1OTU4OVx1MzA1OFx1MzA2YVx1MzA0NFx1MzA2N1x1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMjwvcD5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJsb2FkaW5nMVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIiBjZWxscGFkZGluZz1cIjBcIiBpZD1cImNvbnRlbnQtbWFpblwiIHYtc2hvdz0nY29udGVudFNob3cnPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMjBcIj48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjIwXCIgYWx0PVwiXCI+PC90ZD5cblxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHZhbGlnbj1cInRvcFwiPlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2xhc3M9XCJpbmZvdGFibGUxXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJoYWxmLXJvdy1zcGFjaW5nXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGhyZWY9XCJodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL2RpcmVjdC9pbmZvcm1hdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCIxXCI+PGltZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3JjPVwiLi4vaW1nL2ljb19saW5rX2Z3Ml9wb3B1cC5naWZcIiBoZWlnaHQ9XCIxNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aWR0aD1cIjE2XCIgYWx0PVwiR29cIj48dT5cdTMwZTFcdTMwZjNcdTMwYzZcdTMwY2FcdTMwZjNcdTMwYjlcdTYwYzVcdTU4MzFcdTMwZmJcdTMwNGFcdTc3ZTVcdTMwODlcdTMwNWJcdTMwNmZcdTMwNTNcdTMwNjFcdTMwODk8L3U+PC9hPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBjbGFzcz1cImhhbGYtcm93LXNwYWNpbmdcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgaHJlZj1cImh0dHBzOi8vd3d3LnNtdGIuanAvcGVyc29uYWwvZGlyZWN0L3N0YXJ0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIjJcIj48aW1nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIuLi9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZlwiIGhlaWdodD1cIjE2XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoPVwiMTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiR29cIj48dT5cdTUyMWRcdTY3MWZcdTc2N2JcdTkzMzJcdTMwNGNcdTMwNGFcdTZlMDhcdTMwN2ZcdTMwNjdcdTMwNmFcdTMwNDRcdTMwNGFcdTViYTJcdTMwNTVcdTMwN2VcdTMwNmZcdTMwNTNcdTMwNjFcdTMwODk8L3U+PC9hPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJjb250ZW50LW1haW5cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLUJlZ2luQ29udGVudHMtLT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjE5XCIgYm9yZGVyPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2xhc3M9XCJzdWJoZWFkMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMTZcIiB2YWxpZ249XCJ0b3BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwic3ViaGVhZDItdGQxXCI+PGltZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3JjPVwiLi4vaW1nL2ljb19zdWJoZWFkXzEuZ2lmXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhlaWdodD1cIjE5XCIgd2lkdGg9XCIxNlwiIGFsdD1cIlwiPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBoZWlnaHQ9XCIxOVwiIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cIm1pZGRsZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzdWJoZWFkMi10ZDJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aDI+XHUzMDRhXHU1YmEyXHUzMDU1XHUzMDdlXHU2MGM1XHU1ODMxXHUzMDZlXHU1MTY1XHU1MjliPC9oMj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxwYWRkaW5nPVwiMFwiIGNsYXNzPVwiZGF0YS10YWJsZTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBjb2xzcGFuPVwiM1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx1MzBjMFx1MzBhNFx1MzBlY1x1MzBhZlx1MzBjOFx1MzA1NFx1NTIyOVx1NzUyOFx1MzBhYlx1MzBmY1x1MzBjOVx1MzA2Ylx1NGYxYVx1NTRlMVx1NzU2YVx1NTNmN1x1MzA2ZVx1OGExOFx1OGYwOVx1MzA0Y1x1MzA2YVx1MzA0NFx1MzA0YVx1NWJhMlx1MzA1NVx1MzA3ZVx1MzA2Zlx1MjQ2MFx1MzA2Ylx1MzAwMVx1OGExOFx1OGYwOVx1MzA0Y1x1MzA0Mlx1MzA4Ylx1MzA0YVx1NWJhMlx1MzA1NVx1MzA3ZVx1MzA2Zlx1MjQ2MVx1MzA2Ylx1NTE2NVx1NTI5Ylx1MzA1N1x1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNvbHNwYW49XCIzXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMWVtO1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx1OTA3OFx1NjI5ZVx1ZmYxYVx1MjQ2MFx1NGYxYVx1NTRlMVx1NzU2YVx1NTNmN1x1MzA2ZVx1OGExOFx1OGYwOVx1MzA0Y1x1MzA2YVx1MzA0NFx1MzA0YVx1NWJhMlx1MzA1NVx1MzA3ZSA8aW1nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIuLi9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTZcIiBhbHQ9XCJHb1wiPjxhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRocmVmPVwiamF2YXNjcmlwdDpvcGVuV2luZG93KCcnLCdodHRwczovL2ZhcS5zbXRiLmpwL2ZhcS9zaG93LzMyMzI/c2l0ZV9kb21haW49ZGVmYXVsdCcsJycpO1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjNcIj5cdThhYWNcdTY2MGU8L2E+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSBcdTVlOTdcdTc1NmFcdTUzZjcgLS0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJsZWZ0XCIgdmFsaWduPVwibWlkZGxlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjQlXCIgcm93c3Bhbj1cIjJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiZGF0YS10YWJsZTItdGgxLXZsaW4tdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWxpZ249XCJjZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhZGlvXCIgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJrYWlpbk5vS2lzYWlVbXVcIiB0YWJpbmRleD1cIjRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9XCIwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjI1JVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxzcGFjaW5nPVwiMFwiIHdpZHRoPVwiMTAwJVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRoIHdpZHRoPVwiMSVcIj48L3RoPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0aCB3aWR0aD1cIjkyJVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImRhdGEtdGFibGUyLXRoMS12bGluLXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJwYWRkaW5nOiA3cHggM3B4XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsaWduPVwibGVmdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxpZ249XCJtaWRkbGVcIj5cdTVlOTdcdTc1NmFcdTUzZjc8YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRocmVmPVwiSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF90b3AnKVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPVwiXHUzMGQ4XHUzMGViXHUzMGQ3XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCI1XCI+PGI+XHUyMDNiPC9iPjwvYT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJkYXRhLXRhYmxlMi10ZDMtdmxpbi10XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cInBhZGRpbmctbGVmdDogM3B4OyBwYWRkaW5nLXJpZ2h0OiAzcHhcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgYm9yZGVyPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxsc3BhY2luZz1cIjBcIiB3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjQwJVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIGJvcmRlcj1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxscGFkZGluZz1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxsc3BhY2luZz1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjglXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxMHB4XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJoYW5rYWt1XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwidGV4dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwidGVubm9cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4bGVuZ3RoPVwiM1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2LW1vZGVsPVwiZGlhbmZhbmhhb1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaXplPVwiNFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPSdjaG9zZSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz17J3VuYWN0aXZlJzpjaG9zZSwnYWN0aXZlJzohY2hvc2V9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPlx1NTM0YVx1ODlkMlx1NjU3MFx1NWI1NzNcdTY4NDFcdTMwNjdcdTUxNjVcdTUyOWJcdTMwNTdcdTMwNjZcdTMwNGZcdTMwNjBcdTMwNTVcdTMwNDRcdTMwMDJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIFx1NGVlM1x1ODg2OFx1NTNlM1x1NWVhNyAtLT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMjUlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIGJvcmRlcj1cIjBcIiBjZWxscGFkZGluZz1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2VsbHNwYWNpbmc9XCIwXCIgd2lkdGg9XCIxMDAlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGggd2lkdGg9XCIxJVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cInBhZGRpbmctdG9wOiAxLjVlbTsgcGFkZGluZy1ib3R0b206IDEuNWVtO1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGg+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRoIHdpZHRoPVwiOTIlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiZGF0YS10YWJsZTItdGgxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwicGFkZGluZzogMTRweCAzcHhcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWxpZ249XCJsZWZ0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbGlnbj1cIm1pZGRsZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHU0ZWUzXHU4ODY4XHU2NjZlXHU5MDFhXHU5ODEwXHU5MWQxXHU1M2UzXHU1ZWE3XHU3NTZhXHU1M2Y3PGFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfd29yZCcpXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJcdTMwZDhcdTMwZWJcdTMwZDdcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjdcIj48Yj5cdTIwM2I8L2I+PC9hPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGg+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBjbGFzcz1cImRhdGEtdGFibGUyLXRkM1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxzcGFjaW5nPVwiMFwiIHdpZHRoPVwiMTAwJVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJsZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiNDAlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgYm9yZGVyPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxzcGFjaW5nPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxwYWRkaW5nPVwiMFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiaGFua2FrdVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cImtvemFub1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhsZW5ndGg9XCI3XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHYtbW9kZWw9XCJrb3V6dW9mYW5oYW9cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cIjlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCI4XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPVwiXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD0nY2hvc2UnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6Y2xhc3M9eyd1bmFjdGl2ZSc6Y2hvc2UsJ2FjdGl2ZSc6IWNob3NlfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD4mbmJzcDsmbmJzcDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+XHUzMDU0XHU1MjI5XHU3NTI4XHU3NTMzXHU4ZmJjXHU2NjQyXHUzMDZiXHU3NjdiXHU5MzMyXHUzMDU3XHUzMDVmXHUzMGE0XHUzMGYzXHUzMGJmXHUzMGZjXHUzMGNkXHUzMGMzXHUzMGM4XHUzMGQwXHUzMGYzXHUzMGFkXHUzMGYzXHUzMGIwXHU0ZWUzXHU4ODY4XHU2NjZlXHU5MDFhXHU5ODEwXHU5MWQxXHU1M2UzXHU1ZWE3XHU3NTZhXHU1M2Y3XHUzMDkyXHU1MzRhXHU4OWQyXHU2NTcwXHU1YjU3N1x1Njg0MVx1MzA2N1x1NTE2NVx1NTI5Ylx1MzA1N1x1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNvbHNwYW49XCIzXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMWVtO1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx1OTA3OFx1NjI5ZVx1ZmYxYVx1MjQ2MVx1NGYxYVx1NTRlMVx1NzU2YVx1NTNmN1x1MzA2ZVx1OGExOFx1OGYwOVx1MzA0Y1x1MzA0Mlx1MzA4Ylx1MzA0YVx1NWJhMlx1MzA1NVx1MzA3ZSA8aW1nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIuLi9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTZcIiBhbHQ9XCJHb1wiPjxhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRocmVmPVwiamF2YXNjcmlwdDpvcGVuV2luZG93KCcnLCdodHRwczovL2ZhcS5zbXRiLmpwL2ZhcS9zaG93LzMyMzI/c2l0ZV9kb21haW49ZGVmYXVsdCcsJycpO1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjlcIj5cdThhYWNcdTY2MGU8L2E+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoPVwiMVwiIGFsdD1cIlwiPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIFx1NGYxYVx1NTRlMVx1NzU2YVx1NTNmNyAtLT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJtaWRkbGVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiNCVcIiByb3dzcGFuPVwiMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJkYXRhLXRhYmxlMi10aDEtdmxpbi10XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbGlnbj1cImNlbnRlclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFkaW9cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cImthaWluTm9LaXNhaVVtdVwiIHRhYmluZGV4PVwiNFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT1cIjFcIiA6Y2hlY2tlZD0nY2hvc2UnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAY2xpY2s9XCJjaG9zZT10cnVlO2RpYW5mYW5oYW89Jyc7a291enVvZmFuaGFvPScnXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjI1JVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxzcGFjaW5nPVwiMFwiIHdpZHRoPVwiMTAwJVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRoIHdpZHRoPVwiMSVcIj48L3RoPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0aCB3aWR0aD1cIjkyJVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImRhdGEtdGFibGUyLXRoMS12bGluLXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJwYWRkaW5nOiA3cHggM3B4XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsaWduPVwibGVmdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxpZ249XCJtaWRkbGVcIj5cdTRmMWFcdTU0ZTFcdTc1NmFcdTUzZjc8YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRocmVmPVwiSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF93b3JkJylcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT1cIlx1MzBkOFx1MzBlYlx1MzBkN1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMTBcIj48Yj5cdTIwM2I8L2I+PC9hPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGg+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjc3JVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJkYXRhLXRhYmxlMi10ZDMtdmxpbi10XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cInBhZGRpbmctbGVmdDogM3B4OyBwYWRkaW5nLXJpZ2h0OiAzcHhcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgYm9yZGVyPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxsc3BhY2luZz1cIjBcIiB3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjQwJVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIGJvcmRlcj1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxsc3BhY2luZz1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxscGFkZGluZz1cIjBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0clxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsaWduPVwidG9wXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJoYW5rYWt1XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwidGV4dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwia2FpaW5Ob1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhsZW5ndGg9XCI4XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCIxMlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjExXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHYtbW9kZWw9XCJ1c2VybmFtZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6ZGlzYWJsZWQ9JyFjaG9zZSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz17J3VuYWN0aXZlJzohY2hvc2UsJ2FjdGl2ZSc6Y2hvc2V9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPiZuYnNwOyZuYnNwO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD5cdTUzNGFcdTg5ZDJcdTY1NzBcdTViNTc3XHVmZjVlOFx1Njg0MVx1MzA2N1x1NTE2NVx1NTI5Ylx1MzA1N1x1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNvbHNwYW49XCIzXCIgY2xhc3M9XCJoYWxmLXJvdy1zcGFjaW5nXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YSBocmVmPVwiamF2YXNjcmlwdDpvcGVuV2luZG93KCcnLCdodHRwczovL2ZhcS5zbXRiLmpwL2ZhcS9zaG93LzMyMzI/c2l0ZV9kb21haW49ZGVmYXVsdCcsJycpO1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjEyXCI+IDxpbWdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3JjPVwiLi4vaW1nL2ljb19saW5rX2Z3Ml9wb3B1cC5naWZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbHQ9XCJHb1wiPjx1Plx1MzBjMFx1MzBhNFx1MzBlY1x1MzBhZlx1MzBjOFx1MzA1NFx1NTIyOVx1NzUyOFx1MzBhYlx1MzBmY1x1MzBjOVx1MzA2ZVx1N2EyZVx1OTg1ZVx1MzA4NFx1MzA0YVx1NWJhMlx1MzA1NVx1MzA3ZVx1NjBjNVx1NTgzMVx1MzA2ZVx1NTE2NVx1NTI5Ylx1NjViOVx1NmNkNVx1MzA2ZVx1OGE3M1x1N2QzMFx1MzA2Zlx1MzA1M1x1MzA2MVx1MzA4OTwvdT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2E+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTlcIiBib3JkZXI9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxscGFkZGluZz1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIiBjbGFzcz1cInN1YmhlYWQyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIxNlwiIHZhbGlnbj1cInRvcFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzdWJoZWFkMi10ZDFcIj48aW1nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIuLi9pbWcvaWNvX3N1YmhlYWRfMS5naWZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aGVpZ2h0PVwiMTlcIiB3aWR0aD1cIjE2XCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGhlaWdodD1cIjE5XCIgYWxpZ249XCJsZWZ0XCIgdmFsaWduPVwibWlkZGxlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInN1YmhlYWQyLXRkMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxoMj57e3Bhc3N3b3JkVGV4dH19PC9oMj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxwYWRkaW5nPVwiMFwiIGNsYXNzPVwiZGF0YS10YWJsZTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJsZWZ0XCIgdmFsaWduPVwidG9wXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBjbGFzcz1cImRhdGEtdGFibGUyLXRkNFwiPjxpbWdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwiZGF0YS10YWJsZTItdGQ1XCI+PGltZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aWR0aD1cIjFcIiBhbHQ9XCJcIj48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRoIHdpZHRoPVwiMjUlXCIgY2xhc3M9XCJkYXRhLXRhYmxlMi10aDFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiPlx1MzBlZFx1MzBiMFx1MzBhNFx1MzBmM1x1MzBkMVx1MzBiOVx1MzBlZlx1MzBmY1x1MzBjOTxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cIm9yYW5nZS1kYXJrXCI+PGI+XHVmZjBhPC9iPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90aD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwiZGF0YS10YWJsZTItdGQzXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cImxlZnRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCI0MCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2VsbHNwYWNpbmc9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2VsbHBhZGRpbmc9XCIwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgdmFsaWduPVwidG9wXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9XCI0NSVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dzcGFuPVwiMlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwicGFkZGluZy10b3A6MC4yZW1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInBhc3N3b3JkLWZvbnRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJwYXNzd29yZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiaWJwYXNzd29yZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhsZW5ndGg9XCIzMlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaXplPVwiMzRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIxM1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2LW1vZGVsPVwicGFzc3dvcmRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ0ZXh0LWlucHV0LWZpZWxkXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImJ1dHRvbi1yb3NlNFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiYnV0dG9uNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjE0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPVwiXHUzMGJkXHUzMGQ1XHUzMGM4XHUzMGE2XHUzMGE3XHUzMGEyXHUzMGFkXHUzMGZjXHUzMGRjXHUzMGZjXHUzMGM5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhc2NyaXB0OnNob3dLZXlCb2FyZChpYnBhc3N3b3JkKVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3NvZnR3YXJlS2V5Ym9hcmQnKVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJcdTMwZDhcdTMwZWJcdTMwZDdcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMTVcIj48Yj5cdTIwM2I8L2I+PC9hPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dzcGFuPVwiMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQmbmJzcDsmbmJzcDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cm93c3Bhbj1cIjJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHU1MzRhXHU4OWQyXHU4MmYxXHU2NTcwXHU1YjU3XHU2ZGY3XHU1NzI4XHUzMDZlNFx1Njg0MVx1NGVlNVx1NGUwYTMyXHU2ODQxXHU0ZWU1XHU1MTg1XHUzMDY3XHUzMDU5XHUzMDAyXHU4MmYxXHU1YjU3XHUzMDZmXHU1OTI3XHU2NTg3XHU1YjU3XHUzMDY4XHU1YzBmXHU2NTg3XHU1YjU3XHUzMDkyXHU1MzNhXHU1MjI1XHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyPGJyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW1nIHNyYz1cIi4uL2ltZy9pY29fbGlua19mdzJfcG9wdXAuZ2lmXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRoZWlnaHQ9XCIxNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9XCIxNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiR29cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgaHJlZj1cImphdmFzY3JpcHQ6b3BlbldpbmRvdygnJywnaHR0cHM6Ly93d3cuc210Yi5qcC9wZXJzb25hbC9kaXJlY3QvaW50ZXJuZXQvaGVscC9sb2NrJywnJyk7XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjE2XCI+XHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzXHUzMGQxXHUzMGI5XHUzMGVmXHUzMGZjXHUzMGM5XHUzMDRjXHUzMDhmXHUzMDRiXHUzMDg5XHUzMDZhXHUzMDQ0XHUzMGZiXHU1OTMxXHU1MmI5XHUzMDU3XHUzMDY2XHUzMDU3XHUzMDdlXHUzMDYzXHUzMDVmXHUzMDRhXHU1YmEyXHUzMDU1XHUzMDdlXHUzMDZmXHUzMDUzXHUzMDYxXHUzMDg5PC9hPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblxuXG5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjBcIiBjZWxscGFkZGluZz1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjE2XCI+PHNwYW4gY2xhc3M9XCJvcmFuZ2UtZGFya1wiPjxiPlx1ZmYwYTwvYj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGFsaWduPVwibGVmdFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdTMwZWRcdTMwYjBcdTMwYTRcdTMwZjNcdTMwZDFcdTMwYjlcdTMwZWZcdTMwZmNcdTMwYzlcdTMwOTJcdTUxNjVcdTUyOWJcdTc2ZjhcdTkwNTVcdTMwNTVcdTMwOGNcdTMwNWZcdTU4MzRcdTU0MDhcdTMwMDFcdTdiMmNcdTRlMDlcdTgwMDVcdTMwNmJcdTMwODhcdTMwOGJcdTMwMGNcdTMwNmFcdTMwOGFcdTMwNTlcdTMwN2VcdTMwNTdcdTMwMGRcdTMwOTJcdTk2MzJcdTZiNjJcdTMwNTlcdTMwOGJcdTMwNWZcdTMwODFcdTMwMDFcdTMwNGFcdTVjNGFcdTMwNTFcdTMwNmVcdTMwZTFcdTMwZmNcdTMwZWJcdTMwYTJcdTMwYzlcdTMwZWNcdTMwYjlcdTViOWJcdTMwNjZcdTMwNmJcdTkwMjNcdTdkNjFcdTMwNDRcdTMwNWZcdTMwNTdcdTMwN2VcdTMwNTlcdTMwMDJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzXHUzMGQxXHUzMGI5XHUzMGVmXHUzMGZjXHUzMGM5XHUzMDkyXHU2MjQwXHU1YjlhXHU1NmRlXHU2NTcwXHU0ZWU1XHU0ZTBhXHU1MTY1XHU1MjliXHU3NmY4XHU5MDU1XHUzMDU1XHUzMDhjXHUzMDVmXHU1ODM0XHU1NDA4XHUzMDAxXHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzXHUzMGQxXHUzMGI5XHUzMGVmXHUzMGZjXHUzMGM5XHUzMDkyXHU1OTMxXHU1MmI5XHUzMDU1XHUzMDViXHUzMDY2XHUzMDQ0XHUzMDVmXHUzMDYwXHUzMDRkXHUzMDdlXHUzMDU5XHUzMDAyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGJyPlxuXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJidG4tYm90dG9tXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgdmFsaWduPVwibWlkZGxlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCI0OFwiIGFsaWduPVwibGVmdFwiPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIyNVwiIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJkaXZpZGVyXCI+LzwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgbm93cmFwPVwibm93cmFwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYnV0dG9uLWNob2NvXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjE3XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwicGFkZGluZy1sZWZ0OiAxMHB4O3BhZGRpbmctcmlnaHQ6IDEwcHg7XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPVwiIFx1MzBlZFx1MzBiMFx1MzBhNFx1MzBmMyBcIiBAY2xpY2s9XCJzZW5kKClcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBhbGlnbj1cInJpZ2h0XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYnV0dG9uLWNob2NvXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IG5hbWU9XCIxMjNcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJcdTk1ODlcdTMwNThcdTMwOGJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDEwcHg7cGFkZGluZy1yaWdodDogMTBweDtcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIxOFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPiZuYnNwOzwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnI+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJsZWZ0XCIgdmFsaWduPVwidG9wXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIxNlwiIGFsaWduPVwibGVmdFwiPjxhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfd29yZCcpXCIgdGl0bGU9XCJcdTMwZDhcdTMwZWJcdTMwZDdcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMTlcIj48Yj5cdTIwM2I8L2I+PC9hPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGEgaHJlZj1cIkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfd29yZCcpXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjIwXCI+XHU0ZjFhXHU1NGUxXHU3NTZhXHU1M2Y3XHUzMDZiXHUzMDY0XHUzMDQ0XHUzMDY2PC9hPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJsZWZ0XCIgdmFsaWduPVwidG9wXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIxNlwiIGFsaWduPVwibGVmdFwiPjxhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfdG9wJylcIiB0aXRsZT1cIlx1MzBkOFx1MzBlYlx1MzBkN1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIyMVwiPjxiPlx1MjAzYjwvYj48L2E+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48YSBocmVmPVwiSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF90b3AnKVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIyMlwiPlx1NWU5N1x1NzU2YVx1NTNmN1x1MzA2Ylx1MzA2NFx1MzA0NFx1MzA2NjwvYT48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMTZcIiBhbGlnbj1cImxlZnRcIj48YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKVwiIHRpdGxlPVwiXHUzMGQ4XHUzMGViXHUzMGQ3XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjIzXCI+PGI+XHUyMDNiPC9iPjwvYT48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxhIGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIyNFwiPlx1NGVlM1x1ODg2OFx1NjY2ZVx1OTAxYVx1OTgxMFx1OTFkMVx1NTNlM1x1NWVhN1x1NzU2YVx1NTNmN1x1MzA2Ylx1MzA2NFx1MzA0NFx1MzA2NjwvYT48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMTZcIiBhbGlnbj1cImxlZnRcIj48YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3NvZnR3YXJlS2V5Ym9hcmQnKVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJcdTMwZDhcdTMwZWJcdTMwZDdcIiB0YWJpbmRleD1cIjI1XCI+PGI+XHUyMDNiPC9iPjwvYT48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxhIGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3NvZnR3YXJlS2V5Ym9hcmQnKVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIyNlwiPlx1MzBiZFx1MzBkNVx1MzBjOFx1MzBhNlx1MzBhN1x1MzBhMlx1MzBhZFx1MzBmY1x1MzBkY1x1MzBmY1x1MzBjOVx1MzA2Ylx1MzA2NFx1MzA0NFx1MzA2NjwvYT48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMTZcIiBhbGlnbj1cImxlZnRcIj48YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3NldHVwJyk7XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT1cIlx1MzBkOFx1MzBlYlx1MzBkN1wiIHRhYmluZGV4PVwiMjdcIj48Yj5cdTIwM2I8L2I+PC9hPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGEgaHJlZj1cIkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfc2V0dXAnKTtcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMjhcIj5cdTMwYmRcdTMwZDVcdTMwYzhcdTMwYTZcdTMwYTdcdTMwYTJcdTMwYWRcdTMwZmNcdTMwZGNcdTMwZmNcdTMwYzlcdTMwNmVcdTY1ODdcdTViNTdcdTMwYjVcdTMwYTRcdTMwYmFcdTMwNmVcdTU5MDlcdTY2ZjRcdTY1YjlcdTZjZDVcdTMwNmJcdTMwNjRcdTMwNDRcdTMwNjY8L2E+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjIwXCI+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCIyMFwiIGFsdD1cIlwiPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0PGJyPlxuXG5cblx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjY1OFwiIGFsdD1cIlwiPjwvdGQ+XG5cdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdDwvdGFibGU+XG5cblxuXG5cblxuXHRcdFx0XHQ8dGFibGUgd2lkdGg9XCIxMDAlXCIgYm9yZGVyPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiIGlkPVwiZm9vdGVyXCI+XG5cdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJmb290ZXItdGQxXCI+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdDx0ZCBoZWlnaHQ9XCIyMFwiIHZhbGlnbj1cIm1pZGRsZVwiIGNsYXNzPVwiZm9vdGVyLXRkMlwiPlxuXHRcdFx0XHRcdFx0XHRcdDxhIGhyZWY9XCJodHRwczovL3d3dy5zbXRiLmpwL2dlbmVyYWwvcHJpdmFjeS9zZW5nZW5cIiB0YXJnZXQ9XCJfYmxhbmtcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx1NTAwYlx1NGViYVx1NjBjNVx1NTgzMVx1MzA2ZVx1MzA0YVx1NTNkNlx1MzA4YVx1NjI3MVx1MzA0NFx1MzA2Ylx1MzA2NFx1MzA0NFx1MzA2NlxuXHRcdFx0XHRcdFx0XHRcdDwvYT4gfCA8YSBocmVmPVwiaHR0cHM6Ly93d3cuc210Yi5qcC9nZW5lcmFsL3NvbGljaXRhdGlvblwiIHRhcmdldD1cIl9ibGFua1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHU0ZTA5XHU0ZTk1XHU0ZjRmXHU1M2NiXHU0ZmUxXHU4YTE3XHU5MjgwXHU4ODRjXHUzMDZlXHU1MmU3XHU4YTk4XHU2NWI5XHU5MWRkXG5cdFx0XHRcdFx0XHRcdFx0PC9hPiB8IDxhIGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX290aGVycycpXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdTk2ZmJcdThhNzFcdTMwNjdcdTMwNmVcdTMwNGFcdTU1NGZcdTMwNDRcdTU0MDhcdTMwOGZcdTMwNWJcdTUxNDhcblx0XHRcdFx0XHRcdFx0XHQ8L2E+XG5cdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJmb290ZXItdGQxXCI+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCI2NThcIiBhbHQ9XCJcIj48L3RkPlxuXHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHQ8L3RhYmxlPlxuXG5cdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgaWQ9XCJjb3B5cmlnaHRcIj5cblx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjE0XCI+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCIxNFwiIGFsdD1cIlwiPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdDx0ZCBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJtaWRkbGVcIj5cblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInNtYWxsLWdyeVwiPkNvcHlyaWdodCBcdTAwYTkgMjAyM1xuXHRcdFx0XHRcdFx0XHRcdFx0U3VtaXRvbW8gTWl0c3VpIFRydXN0IEJhbmssIExpbWl0ZWRcblx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdDx0ZCBhbGlnbj1cInJpZ2h0XCIgdmFsaWduPVwibWlkZGxlXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzbWFsbC1ncnlcIj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHU3NTNiXHU5NzYySURcdWZmMWFcblx0XHRcdFx0XHRcdFx0XHRcdGlia2tfMDcwMVxuXHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0PC90YWJsZT5cblxuXG5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYm94U2V0TGluZVwiIGlkPVwic29mdHdhcmVLZXlCb2FyZFwiIHN0eWxlPVwibWFyZ2luOiAwcHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgZGlzcGxheTogbm9uZTtcIj5cblx0XHRcdFx0XHQ8dGFibGUgY2xhc3M9XCJzay10YWJsZVwiIGNlbGxzcGFjaW5nPVwiMVwiIGJnY29sb3I9XCIjRkZGRkZGXCIgd2lkdGg9XCI1MjBcIiBoZWlnaHQ9XCIyNTBcIiBib3JkZXI9XCIwXCI+XG5cdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cInJpZ2h0XCIgaGVpZ2h0PVwiMzBcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHQ8dGQgY29sc3Bhbj1cIjJcIiB3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYnV0dG9uLXJvc2U1XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyXCIgbmFtZT1cImtleV9DbG9zZVwiIHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPVwiXHUzMGJkXHUzMGQ1XHUzMGM4XHUzMGE2XHUzMGE3XHUzMGEyXHUzMGFkXHUzMGZjXHUzMGRjXHUzMGZjXHUzMGM5XHUzMDkyXHU5NTg5XHUzMDU4XHUzMDhiXCIgaWQ9XCJjbG9zZV9wb3BcIiBvbmNsaWNrPVwiSmF2YVNjcmlwdDogZG9DbG9zZSgpXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0PC90cj5cblxuXHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJjZW50ZXJcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHQ8dGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYm94U2V0QmdcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIGNlbGxzcGFjaW5nPVwiMVwiIGNsYXNzPVwibGF5b3V0XCIgaWQ9XCJrZXlCb2R5XCIgYm9yZGVyPVwiMFwiIHdpZHRoPVwiMTAwJVwiPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJrZXlBdG9aXCIgYWxpZ249XCJjZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgYm9yZGVyPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNsYXNzPVwibGF5b3V0XCI+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzAnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMScsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5MlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyJywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbHQ9XCJcIj48L3RkPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMycsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5NFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc0JywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXk1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzUnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlwiPjwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5NlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc2JywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXk3XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzcnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnOCcsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCI1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiXCI+PC90ZD5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXk5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzknLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTEwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEwJywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkxMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMScsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCI1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiXCI+PC90ZD5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkxMlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMicsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTEzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEzJywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkxNFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxNCcsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5MTVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTUnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlwiPjwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5MTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTYnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTE3XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE3JywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkxOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxOCcsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCI1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiXCI+PC90ZD5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkxOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxOScsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5MjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjAnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIxJywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbHQ9XCJcIj48L3RkPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTIyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIyJywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkyM1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMycsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5MjRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjQnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlwiPjwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5MjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjUnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBjb2xzcGFuPVwiMTdcIj4mbmJzcDs8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1MwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzAnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxJywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMicsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCI1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiXCI+PC90ZD5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMycsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1M0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzQnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc1JywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbHQ9XCJcIj48L3RkPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc2JywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzdcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNycsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1M4XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzgnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlwiPjwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1M5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzknLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMTBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTAnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTEnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlwiPjwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1MxMlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMicsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzEzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEzJywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzE0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE0JywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzE1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE1JywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbHQ9XCJcIj48L3RkPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTYnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMTdcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTcnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTgnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlwiPjwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1MxOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxOScsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1MyMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMCcsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1MyMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMScsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCI1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiXCI+PC90ZD5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzIyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIyJywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzIzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIzJywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzI0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzI0JywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbHQ9XCJcIj48L3RkPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjUnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwia2V5MHRvOVwiIHZhbGlnbj1cInRvcFwiIGFsaWduPVwiY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIGJvcmRlcj1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIiBjbGFzcz1cImxheW91dFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCIgaWQ9XCJpbnNLZXkxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEnLDApXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCIgaWQ9XCJpbnNLZXkyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzInLDApXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCIgaWQ9XCJpbnNLZXkzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzMnLDApXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIiBpZD1cImluc0tleTRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNCcsMClcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIiBpZD1cImluc0tleTVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNScsMClcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIiBpZD1cImluc0tleTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNicsMClcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiIGlkPVwiaW5zS2V5N1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc3JywwKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiIGlkPVwiaW5zS2V5OFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc4JywwKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiIGlkPVwiaW5zS2V5OVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc5JywwKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPiZuYnNwOzwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCIgaWQ9XCJpbnNLZXkwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzAnLDApXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPiZuYnNwOzwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJsZWZ0XCIgaGVpZ2h0PVwiNDBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGFsaWduPVwiY2VudGVyXCIgY29sc3Bhbj1cIjJcIj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCI0NiVcIiBhbGlnbj1cImNlbnRlclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGFsaWduPVwiY2VudGVyXCIgd2lkdGg9XCI1MCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYnV0dG9uLXJvc2U1XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiZGVsZXRlT25lTGVcIiB0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImRlbGV0ZV9vbmVcIiB2YWx1ZT1cIlx1NTE2NVx1NTI5Ylx1NmUwOFx1MzA2ZVx1NjU4N1x1NWI1N1x1MzA5MjFcdTY1ODdcdTViNTdcdTUyNGFcdTk2NjRcdTMwNTlcdTMwOGJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBkZWxldGVPbmUoKVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGFsaWduPVwicmlnaHRcIiB3aWR0aD1cIjIlXCI+Jm5ic3A7PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgYWxpZ249XCJjZW50ZXJcIiB3aWR0aD1cIjQ4JVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJidXR0b24tcm9zZTVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJkZWxldGVBbGxMZVwiIHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiZGVsZXRlX2FsbFwiIHZhbHVlPVwiXHU1MTY1XHU1MjliXHU2ZTA4XHUzMDZlXHU2NTg3XHU1YjU3XHUzMDkyXHU1MTY4XHUzMDY2XHU1MjRhXHU5NjY0XHUzMDU5XHUzMDhiXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogZGVsZXRlQWxsKClcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiIGhlaWdodD1cIjIwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBhbGlnbj1cImNlbnRlclwiIGNvbHNwYW49XCIyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjQ1JVwiIGFsaWduPVwiY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgYWxpZ249XCJjZW50ZXJcIiB3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYnV0dG9uLXJvc2U2XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlclwiIG5hbWU9XCJrZXlEaXNwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgaWQ9XCJrZXlfRGlzcFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9XCJcdTMwYWRcdTMwZmNcdTMwNmVcdTY1ODdcdTViNTdcdTMwOTJcdTg4NjhcdTc5M2FcdTMwNTdcdTMwNmFcdTMwNDRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBkaXNwU2tiQ3RsKHRoaXMudmFsdWUpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgaGVpZ2h0PVwiNDBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNvbHNwYW49XCIyXCIgYWxpZ249XCJjZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGlkPVwia2V5TXNnXCI+XHUzMGFkXHUzMGZjXHUzMDZlXHU2NTg3XHU1YjU3XHUzMDkyXHU5NzVlXHU4ODY4XHU3OTNhXHUzMDZiXHUzMDU5XHUzMDhiXHU1ODM0XHU1NDA4XHUzMDZmXHUzMDBjXHUzMGFkXHUzMGZjXHUzMDZlXHU2NTg3XHU1YjU3XHUzMDkyXHU4ODY4XHU3OTNhXHUzMDU3XHUzMDZhXHUzMDQ0XHUzMDBkXHUzMDkyXHU2MmJjXHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyPC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdDwvdHI+XG5cblx0XHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Zvcm0+XG5cdFx0PC9kaXY+XG5cblxuXHQ8L2JvZHk+XG5cdDxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIHNyYz1cIi4uL2pzL2pxdWVyeS0zLjUuMS5qc1wiPjwvc2NyaXB0PlxuXHQ8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCIuLi9qcy92dWUuanNcIj48L3NjcmlwdD5cblx0PHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwiLi4vanMvaW5kZXhfcGMuanNcIj48L3NjcmlwdD5cbjwvaHRtbD5cbiJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiA3ODg0LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA3ODg0fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMTQ1LjQwNSwgInJlY2VpdmUiOiAyLjg3OH0sICJwYWdlcmVmIjogInBhZ2VAZmI5YjI2NDc4NTU0MjA2YmUwMjBlZDViZGQyYjNjMTUiLCAic2VydmVySVBBZGRyZXNzIjogIjIwNC40NC45My4xNDEiLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInd3dy53ZWlsb2dpbi5jb20iLCAiaXNzdWVyIjogIlIzIiwgInZhbGlkRnJvbSI6IDE2ODQ4OTMxNTcsICJ2YWxpZFRvIjogMTY5MjY2OTE1Nn19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI0VDE1OjExOjU0LjA5MFoiLCAidGltZSI6IDE0Ni40NjksICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3dlaWxvZ2luLmNvbS9pYmcvY3NzL3BjL3RhYmxlcy5jc3MiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJ3ZWlsb2dpbi5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvaWJnL2Nzcy9wYy90YWJsZXMuY3NzIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAidGV4dC9jc3MsKi8qO3E9MC4xIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2NsaWVudC9sX2hvbWVfcC5waHAifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInN0eWxlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNDQ5LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9NDMyMDAifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogInRleHQvY3NzIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTU6MTE6NTQgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCI2NDE4NDJiZC01MmViXCIifSwgeyJuYW1lIjogImV4cGlyZXMiLCAidmFsdWUiOiAiVGh1LCAyNSBNYXkgMjAyMyAwMzoxMTo1NCBHTVQifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiTW9uLCAyMCBNYXIgMjAyMyAxMToyNTo0OSBHTVQifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJuZ2lueCJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwIn0sIHsibmFtZSI6ICJ2YXJ5IiwgInZhbHVlIjogIkFjY2VwdC1FbmNvZGluZyJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAyMTIyNywgIm1pbWVUeXBlIjogInRleHQvY3NzIiwgImNvbXByZXNzaW9uIjogMTgyNzAsICJ0ZXh0IjogIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmdlbmVyYWwgc3R5bGVzIGZvciB0YWJsZXNcbmxhc3QgdXBkYXRlIDIwMTEtMDQtMjgtMDk6MDBcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbnRhYmxlIHtmb250LXNpemU6IDFlbTt9XG5cbi5zdWJoZWFkMSB7XG5cdGhlaWdodDogMjVweDtcblx0bWFyZ2luLWJvdHRvbTogM3B4O1xuXHRiYWNrZ3JvdW5kOiNCMEU2RUYgdXJsKC4uLy4uL2ltZy9iZ19zdWJoZWFkLnBuZykgbm8tcmVwZWF0O1xufVxuLnN1YmhlYWQxLWhhbGYge1xuXHRoZWlnaHQ6IDI1cHg7XG5cdG1hcmdpbi1ib3R0b206IDNweDtcblx0YmFja2dyb3VuZDojQjBFNkVGIHVybCguLi8uLi9pbWcvYmdfc3ViaGVhZF9oYWxmLnBuZykgbm8tcmVwZWF0O1xufVxuLnN1YmhlYWQxLXRkMSB7XG5cdHBhZGRpbmc6IDBweDtcblx0aGVpZ2h0OiAyNXB4O1xuXHRmb250LXdlaWdodDogYm9sZDtcblx0dmVydGljYWwtYWxpZ246IHRvcDtcbn1cbi5zdWJoZWFkMS10ZDIge1xuXHRoZWlnaHQ6IDI1cHg7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdHBhZGRpbmctcmlnaHQ6IDNweDtcblx0Y29sb3I6ICNGRkZGRkY7XG59XG5cbi5zdWJoZWFkMiB7XG5cdGhlaWdodDogMjVweDtcblx0cGFkZGluZzogMHB4O1xuXHRtYXJnaW46IDBweDtcblx0YmFja2dyb3VuZDojQjBFNkVGIHVybCguLi8uLi9pbWcvYmdfc3ViaGVhZC5wbmcpIG5vLXJlcGVhdDtcbn1cbi5zdWJoZWFkMi1oYWxmIHtcblx0aGVpZ2h0OiAyNXB4O1xuXHRwYWRkaW5nOiAwcHg7XG5cdG1hcmdpbjogMHB4O1xuXHRiYWNrZ3JvdW5kOiNCMEU2RUYgdXJsKC4uLy4uL2ltZy9iZ19zdWJoZWFkX2hhbGYucG5nKSBuby1yZXBlYXQ7XG59XG4uc3ViaGVhZDItdGQxIHtcblx0cGFkZGluZzogMHB4O1xuXHRoZWlnaHQ6IDI1cHg7XG5cdHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4uc3ViaGVhZDItdGQyIHtcblx0aGVpZ2h0OiAyNXB4O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRwYWRkaW5nLXJpZ2h0OiAzcHg7XG5cdGNvbG9yOiAjRkZGRkZGO1xufVxuXG4uc3ViaGVhZDMge31cbi5zdWJoZWFkMy10ZDEge1xuXHRiYWNrZ3JvdW5kOiAjRDZFNEUyO1xuXHRtYXJnaW46IDBweDtcblx0aGVpZ2h0OiAxOXB4O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRwYWRkaW5nLXJpZ2h0OiAzcHg7XG5cdHBhZGRpbmctbGVmdDogNHB4O1xufVxuXG4uc3ViaGVhZDQge31cbi5zdWJoZWFkNC10ZDEge1xuXHRoZWlnaHQ6IDM1cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoKSBuby1yZXBlYXQ7XG5cdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItcmlnaHQ6IDBweDtcblx0Ym9yZGVyLWJvdHRvbTogMHB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAwcHg7XG5cdHBhZGRpbmctdG9wOiA0cHg7XG5cdHBhZGRpbmctcmlnaHQ6IDZweDtcblx0cGFkZGluZy1ib3R0b206IDNweDtcblx0cGFkZGluZy1sZWZ0OiAzNXB4O1xufVxuXG4uc3ViaGVhZDUge31cbi5zdWJoZWFkNS10ZDEge1xuXHRoZWlnaHQ6IDIycHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX05HX3MuZ2lmKSBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcblx0cGFkZGluZy10b3A6IDJweDtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDI3cHg7XG59XG5cbi5zdWJoZWFkNiB7fVxuLnN1YmhlYWQ2LXRkMSB7XG5cdGhlaWdodDogMTlweDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcblx0cGFkZGluZy10b3A6IDNweDtcblx0cGFkZGluZy1yaWdodDogM3B4O1xuXHRwYWRkaW5nLWxlZnQ6IDRweDtcbn1cblxuLnN1YmhlYWQ3IHtcblx0aGVpZ2h0OiAxOXB4O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogNHB4O1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuLnN1YmhlYWQ3LXRkMSB7fVxuXG4uc3ViaGVhZDgge1xuXHRoZWlnaHQ6IDE5cHg7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiA0cHg7XG5cdGJvcmRlcjogMXB4IHNvbGlkICNCRkJGQkY7XG59XG4uc3ViaGVhZDgtdGQxIHt9XG5cbi5zdWJoZWFkOSB7XG5cdGhlaWdodDogMTlweDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDRweDtcbn1cbi5zdWJoZWFkOS10ZDEge31cblxuLnN1YmhlYWQxMCB7fVxuLnN1YmhlYWQxMC10ZDEge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX0dPX3MuZ2lmKSBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogMjdweDtcbn1cbi5zdWJoZWFkMTAtdGQyIHtcblx0aGVpZ2h0OiAxOHB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19HT19zLmdpZikgbm8tcmVwZWF0O1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDZweDtcbn1cbi5zdWJoZWFkMTAtdGQzIHtcblx0aGVpZ2h0OiAxOHB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkY7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogMnB4O1xufVxuXG4uc3ViaGVhZDExIHt9XG4uc3ViaGVhZDExLXRkMSB7XG5cdC8qIGhlaWdodDogMThweDsgKi9cblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCguLi8uLi9pbWcvaV9wZXRhbHNfQkdfcy5naWYpIG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiAyN3B4O1xufVxuLnN1YmhlYWQxMS10ZDIge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX0JHX3MuZ2lmKSBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogNnB4O1xufVxuLnN1YmhlYWQxMS10ZDMge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRjtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiAycHg7XG59XG5cbi5zdWJoZWFkMTIge31cbi5zdWJoZWFkMTItdGQxIHtcblx0aGVpZ2h0OiAxOHB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19TQl9zLmdpZikgbm8tcmVwZWF0O1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDI3cHg7XG59XG4uc3ViaGVhZDEyLXRkMiB7XG5cdGhlaWdodDogMThweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCguLi8uLi9pbWcvaV9wZXRhbHNfU0Jfcy5naWYpIG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiA2cHg7XG59XG4uc3ViaGVhZDEyLXRkMyB7XG5cdGhlaWdodDogMThweDtcblx0YmFja2dyb3VuZDojRkZGRkZGO1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDJweDtcbn1cblxuLnN1YmhlYWQxMyB7fVxuLnN1YmhlYWQxMy10ZDEge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX05HMl9zLmdpZikgbm8tcmVwZWF0O1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDI3cHg7XG59XG4uc3ViaGVhZDEzLXRkMiB7XG5cdGhlaWdodDogMThweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCguLi8uLi9pbWcvaV9wZXRhbHNfTkcyX3MuZ2lmKSBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogNnB4O1xufVxuLnN1YmhlYWQxMy10ZDMge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRjtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiAycHg7XG59XG5cbi5zdWJoZWFkMTQge31cbi5zdWJoZWFkMTQtdGQxIHtcblx0aGVpZ2h0OiAxOHB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19CRzJfcy5naWYpIG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiAyN3B4O1xufVxuLnN1YmhlYWQxNC10ZDIge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX0JHMl9zLmdpZikgbm8tcmVwZWF0O1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDZweDtcbn1cbi5zdWJoZWFkMTQtdGQzIHtcblx0aGVpZ2h0OiAxOHB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkY7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogMnB4O1xufVxuXG4uc3ViaGVhZDE1IHt9XG4uc3ViaGVhZDE1LXRkMSB7XG5cdGhlaWdodDogMThweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCguLi8uLi9pbWcvaV9wZXRhbHNfU0IyX3MuZ2lmKSBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogMjdweDtcbn1cbi5zdWJoZWFkMTUtdGQyIHtcblx0aGVpZ2h0OiAxOHB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19TQl9zLmdpZikgbm8tcmVwZWF0O1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDZweDtcbn1cbi5zdWJoZWFkMTUtdGQzIHtcblx0aGVpZ2h0OiAxOHB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkY7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogMnB4O1xufVxuXG4uc3ViaGVhZDE2IHt9XG4uc3ViaGVhZDE2LXRkMSB7XG5cdGhlaWdodDogMThweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCguLi8uLi9pbWcvaV9wZXRhbHNfTkdfcy5naWYpIG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiAyN3B4O1xufVxuLnN1YmhlYWQxNi10ZDIge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX05HX3MuZ2lmKSBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogNnB4O1xufVxuLnN1YmhlYWQxNi10ZDMge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRjtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiAycHg7XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLWluZm8tdGFibGUtLS0tLS0tLS0tLS0tLS0tLSovXG4uaW5mb3RhYmxlMSB7fVxuLmluZm90YWJsZTEtdGQxLTEge1xuXHRoZWlnaHQ6IDM5cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoKSBuby1yZXBlYXQ7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItcmlnaHQ6IDBweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAwcHg7XG5cdHBhZGRpbmc6IDRweCA2cHggM3B4IDM1cHg7XG5cdGNvbG9yOiAjMzMzMzMzO1xufVxuLmluZm90YWJsZTEtdGQxLTIge1xuXHRiYWNrZ3JvdW5kOiAjRjBERkUwO1xuXHRib3JkZXI6IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRwYWRkaW5nOiAzcHggNnB4O1xuXHRjb2xvcjogIzMzMzMzMztcbn1cbi5pbmZvdGFibGUxLXRkMS0zIHtcblx0YmFja2dyb3VuZDogI0Q2RTRFMjtcblx0Ym9yZGVyOiAxcHggc29saWQgIzc1NzU3NTtcblx0cGFkZGluZzogM3B4IDZweDtcblx0Y29sb3I6ICMzMzMzMzM7XG59XG4uaW5mb3RhYmxlMS10ZDEtNCB7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG5cdGJvcmRlcjogMXB4IHNvbGlkICM3NTc1NzU7XG5cdHBhZGRpbmc6IDNweCA2cHg7XG5cdGNvbG9yOiAjMzMzMzMzO1xufVxuLmluZm90YWJsZTEtdGQxLTUge1xuXHRiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuXHRib3JkZXI6IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRwYWRkaW5nOiAzcHggNnB4O1xuXHRjb2xvcjogIzMzMzMzMztcbn1cbi5pbmZvdGFibGUxLXRkMS02IHtcblx0YmFja2dyb3VuZDogI0ZGRkZDODtcblx0Ym9yZGVyOiAxcHggc29saWQgIzc1NzU3NTtcblx0cGFkZGluZzogM3B4IDZweDtcblx0Y29sb3I6ICMzMzMzMzM7XG59XG4uaW5mb3RhYmxlMS10ZDEtNyB7XG5cdGhlaWdodDogMzlweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCguLi8uLi9pbWcvaV9wZXRhbHNfQkcuZ2lmKSBuby1yZXBlYXQ7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItcmlnaHQ6IDBweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAwcHg7XG5cdHBhZGRpbmc6IDRweCA2cHggMHB4IDM1cHg7XG5cdGNvbG9yOiAjMzMzMzMzO1xufVxuLmluZm90YWJsZTEtdGQxLTgge1xuXHRoZWlnaHQ6IDM5cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX1NCLmdpZikgbm8tcmVwZWF0O1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLXJpZ2h0OiAwcHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMHB4O1xuXHRwYWRkaW5nOiA0cHggNnB4IDBweCAzNXB4O1xuXHRjb2xvcjogIzMzMzMzMztcbn1cbi5pbmZvdGFibGUxLXRkMS05IHtcblx0aGVpZ2h0OiAzOXB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19ORzIuZ2lmKSBuby1yZXBlYXQ7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItcmlnaHQ6IDBweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAwcHg7XG5cdHBhZGRpbmc6IDRweCA2cHggMHB4IDM1cHg7XG5cdGNvbG9yOiAjMzMzMzMzO1xufVxuLmluZm90YWJsZTEtdGQxLTEwIHtcblx0aGVpZ2h0OiAzOXB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19CRzIuZ2lmKSBuby1yZXBlYXQ7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItcmlnaHQ6IDBweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAwcHg7XG5cdHBhZGRpbmc6IDRweCA2cHggMHB4IDM1cHg7XG5cdGNvbG9yOiAjMzMzMzMzO1xufVxuLmluZm90YWJsZTEtdGQxLTExIHtcblx0aGVpZ2h0OiAzOXB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19TQjIuZ2lmKSBuby1yZXBlYXQ7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItcmlnaHQ6IDBweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAwcHg7XG5cdHBhZGRpbmc6IDRweCA2cHggMHB4IDM1cHg7XG5cdGNvbG9yOiAjMzMzMzMzO1xufVxuLmluZm90YWJsZTEtdGQxLTEyIHtcblx0aGVpZ2h0OiAzOXB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19ORy5naWYpIG5vLXJlcGVhdDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1yaWdodDogMHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDBweDtcblx0cGFkZGluZzogNHB4IDZweCAwcHggMzVweDtcblx0Y29sb3I6ICMzMzMzMzM7XG59XG4uaW5mb3RhYmxlMiB7fVxuLmluZm90YWJsZTItdGQxIHtcblx0YmFja2dyb3VuZDogI0Y3RjdGNztcblx0cGFkZGluZzogM3B4IDZweDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNCRkJGQkY7XG59XG4uaW5mb3RhYmxlMi10ZDIge1xuXHRiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuXHRwYWRkaW5nOiAzcHggNnB4O1xufVxuLmluZm90YWJsZTItdGQzIHtcblx0YmFja2dyb3VuZDogI0Y3RjdGNztcblx0cGFkZGluZzogM3B4IDZweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG59XG4uaW5mb3RhYmxlMi10ZDQge1xuXHRiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuXHRwYWRkaW5nOiAzcHggNnB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNCRkJGQkY7XG59XG5cbi5pbmZvdGFibGUzIHt9XG4uaW5mb3RhYmxlMy10ZDEge1xuXHRiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuXHRib3JkZXI6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRwYWRkaW5nOiAzcHggNnB4O1xufVxuLmluZm90YWJsZTMtdGQyIHtcblx0YmFja2dyb3VuZDogI0ZGRkZGRjtcblx0Ym9yZGVyOiAxcHggc29saWQgIzlGMjAwMDtcblx0cGFkZGluZzogM3B4IDZweDtcbn1cblxuLmluZm90YWJsZTQge31cbi5pbmZvdGFibGU0LXRkMSB7XG5cdHBhZGRpbmc6IDFweCA2cHggM3B4IDZweDtcblx0Ym9yZGVyLXJpZ2h0OiAwcHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMHB4O1xufVxuXG4uaW5mb3RhYmxlNSB7XG5cdHBhZGRpbmctdG9wOiA0cHg7XG59XG5cbi5pbmZvdGFibGU1LXRkMSB7XG5cdHBhZGRpbmc6IDFweCA2cHggNnB4IDZweDtcblx0Ym9yZGVyLXJpZ2h0OiAwcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAwcHggc29saWQgI0JGQkZCRjtcblx0dmVydGljYWwtYWxpZ246IHRvcDtcblx0LyogbW9kaWZpZWQgKi9cbn1cbi5pbmZvdGFibGU1LXRkMiB7XG5cdHBhZGRpbmc6IDFweCA2cHggNnB4IDZweDtcblx0Ym9yZGVyLXJpZ2h0OiAwcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWJvdHRvbTogMHB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAwcHggc29saWQgI0JGQkZCRjtcblx0dmVydGljYWwtYWxpZ246IHRvcDtcbn1cbi5pbmZvdGFibGU2IHt9XG4uaW5mb3RhYmxlNi10ZDEge1xuXHRiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuXHRjb2xvcjogIzMzMzMzMztcblx0Ym9yZGVyLXRvcDogM3B4IHNvbGlkICM5RjIwMDA7XG5cdGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAjOUYyMDAwO1xuXG59XG4uaW5mb3RhYmxlNi10ZDIge1xuXHRiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuXHRwYWRkaW5nOiAzcHggNnB4O1xuXHRjb2xvcjogIzMzMzMzMztcblx0Ym9yZGVyLXRvcDogM3B4IHNvbGlkICM5RjIwMDA7XG5cdGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAjOUYyMDAwO1xufVxuLmluZm90YWJsZTYtdGQzIHtcblx0YmFja2dyb3VuZDogI0ZGRkZGRjtcblx0cGFkZGluZzogM3B4IDZweDtcblx0Y29sb3I6ICMzMzMzMzM7XG5cdGJvcmRlci10b3A6IDNweCBzb2xpZCAjOUYyMDAwO1xuXHRib3JkZXItYm90dG9tOiAzcHggc29saWQgIzlGMjAwMDtcbn1cblxuLmluZm90YWJsZTcge31cbi5pbmZvdGFibGU3LXRkMSB7XG5cdGJhY2tncm91bmQ6ICNGN0Y3Rjc7XG5cdHBhZGRpbmc6IDNweCA2cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcbn1cbi5pbmZvdGFibGU3LXRkMiB7XG5cdHBhZGRpbmc6IDNweCA2cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcbn1cblxuLmZyYW1lLW91dHNpZGV7fVxuLmZyYW1lLW91dHNpZGUtdGQxIHtwYWRkaW5nOiA2cHg7IGJvcmRlcjogMXB4IHNvbGlkICNCRkJGQkY7fVxuXG4uZnJhbWUtbm9wYWRkaW5nIHtiYWNrZ3JvdW5kOiAjRkZGRkZGOyBib3JkZXI6IDFweCBzb2xpZCAjQkZCRkJGO31cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS1kYXRhLXRhYmxlMS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5kYXRhLXRhYmxlMSB7fVxuXG4uZGF0YS10YWJsZTEtdGgxIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG59XG4uZGF0YS10YWJsZTEtdGgxLXZsaW4tbCB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cblxuLyotLS0tXHVmZjEyXHU2YjIxXHUzMGQ1XHUzMGE3XHUzMGZjXHUzMGJhXHUzMDY3XHU4ZmZkXHU1MmEwXHVmZjA4XHUzMDUzXHUzMDUzXHUzMDRiXHUzMDg5XHVmZjA5LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4uZGF0YS10YWJsZTEtdGgxLW5vbGluIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcbn1cbi8qLS0tLVx1ZmYxMlx1NmIyMVx1MzBkNVx1MzBhN1x1MzBmY1x1MzBiYVx1MzA2N1x1OGZmZFx1NTJhMFx1ZmYwOFx1MzA1M1x1MzA1M1x1MzA3ZVx1MzA2N1x1ZmYwOS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4uZGF0YS10YWJsZTEtdGgyIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cbi5kYXRhLXRhYmxlMS10aDItdmxpbiB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cblxuLyotLS0tXHVmZjEyXHU2YjIxXHUzMGQ1XHUzMGE3XHUzMGZjXHUzMGJhXHUzMDY3XHU4ZmZkXHU1MmEwXHVmZjA4XHUzMDUzXHUzMDUzXHUzMDRiXHUzMDg5XHVmZjA5LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4uZGF0YS10YWJsZTEtdGgyLW5vbGluIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuLyotLS0tXHVmZjEyXHU2YjIxXHUzMGQ1XHUzMGE3XHUzMGZjXHUzMGJhXHUzMDY3XHU4ZmZkXHU1MmEwXHVmZjA4XHUzMDUzXHUzMDUzXHUzMDdlXHUzMDY3XHVmZjA5LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi5kYXRhLXRhYmxlMS10aDMge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuLmRhdGEtdGFibGUxLXRoMy12bGluLWwge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG59XG4uZGF0YS10YWJsZTEtdGgzLXZsaW4tbHIge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNCRkJGQkY7XG59XG4uZGF0YS10YWJsZTEtdGgzLW5vc3BhY2Uge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xufVxuXG4vKi0tLS1cdWZmMTJcdTZiMjFcdTMwZDVcdTMwYTdcdTMwZmNcdTMwYmFcdTMwNjdcdThmZmRcdTUyYTBcdWZmMDhcdTMwNTNcdTMwNTNcdTMwNGJcdTMwODlcdWZmMDktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5kYXRhLXRhYmxlMS10aDMtbm9saW4ge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG4vKi0tLS1cdWZmMTJcdTZiMjFcdTMwZDVcdTMwYTdcdTMwZmNcdTMwYmFcdTMwNjdcdThmZmRcdTUyYTBcdWZmMDhcdTMwNTNcdTMwNTNcdTMwN2VcdTMwNjdcdWZmMDktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLmRhdGEtdGFibGUxLXRkMSB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4uZGF0YS10YWJsZTEtdGQxLW5vbGluIHtcblx0cGFkZGluZzogMnB4IDNweDtcbn1cblxuLmRhdGEtdGFibGUxLXRkMS12bGluLWwge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG59XG5cbi8qIFx1ODg2OFx1MzA2ZVx1ODBjY1x1NjY2Zlx1ODI3Mlx1OGZmZFx1NTJhMCBcdTMwZDFcdTMwYmZcdTMwZmNcdTMwZjNcdWZmMTEgKi9cbi5kYXRhLXRhYmxlMS10ZDEtdmxpbi1sLXAxIHtcblx0cGFkZGluZzogMnB4IDNweCAycHggNHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRiYWNrZ3JvdW5kOiAjRUZGRkU3O1xufVxuXG4vKiBcdTg4NjhcdTMwNmVcdTgwY2NcdTY2NmZcdTgyNzJcdThmZmRcdTUyYTAgXHUzMGQxXHUzMGJmXHUzMGZjXHUzMGYzXHVmZjEyICovXG4uZGF0YS10YWJsZTEtdGQxLXZsaW4tbC1wMiB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0Y3RTdFNztcbn1cblxuLyogXHU4ODY4XHUzMDZlXHU4MGNjXHU2NjZmXHU4MjcyXHU4ZmZkXHU1MmEwIFx1MzBkMVx1MzBiZlx1MzBmY1x1MzBmM1x1ZmYxMyAqL1xuLmRhdGEtdGFibGUxLXRkMS12bGluLWwtcDMge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFQ0ZGRkY7XG59XG5cbi8qIFx1ODg2OFx1MzA2ZVx1ODBjY1x1NjY2Zlx1ODI3Mlx1OGZmZFx1NTJhMCBcdTMwZDFcdTMwYmZcdTMwZmNcdTMwZjNcdWZmMTMgKi9cbi5kYXRhLXRhYmxlMS10ZDEtdmxpbi1sLXAzLWRvdCB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFQ0ZGRkY7XG59XG5cbi5kYXRhLXRhYmxlMS10ZDIge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuLmRhdGEtdGFibGUxLXRkMi1ub2xpbiB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cbi5kYXRhLXRhYmxlMS10ZDItdmxpbiB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cblxuLmRhdGEtdGFibGUxLXRkMyB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG4uZGF0YS10YWJsZTEtdGQzLW5vbGluIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuLmRhdGEtdGFibGUxLXRkMy12bGluLWwge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG59XG4uZGF0YS10YWJsZTEtdGQzLXZsaW4tbHIge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNCRkJGQkY7XG59XG4uZGF0YS10YWJsZTEtdGQzLXZsaW4tbHItZG90IHtcblx0cGFkZGluZzogMnB4IDNweCAycHggNHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggZG90dGVkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cbi5kYXRhLXRhYmxlMS10ZDMtbm9zcGFjZSB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG59XG5cblxuLmRhdGEtdGFibGUxLXRkNCB7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4uZGF0YS10YWJsZTEtdGQ1IHtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cblxuLmRhdGEtdGFibGUxLXRkNiB7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG5cbi5kYXRhLXRhYmxlMS10ZDYtciB7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4uZGF0YS10YWJsZTEtdGQ3IHtcblx0cGFkZGluZzogMnB4IDNweDtcbn1cblxuLmRhdGEtdGFibGUxLXRkOCB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cblxuLmRhdGEtdGFibGUxLXRkOSB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tZGF0YS10YWJsZTItLS0tLS0tLS0tLS0tLS0tLSovXG4uZGF0YS10YWJsZTIge31cblxuLmRhdGEtdGFibGUyLXRoMSB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xufVxuLmRhdGEtdGFibGUyLXRoMS1ub2xpbiB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG59XG4uZGF0YS10YWJsZTItdGgxLXZsaW4tbCB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cblxuLyotLS0tXHVmZjEyXHU2YjIxXHUzMGQ1XHUzMGE3XHUzMGZjXHUzMGJhXHUzMDY3XHU4ZmZkXHU1MmEwXHVmZjA4XHUzMDUzXHUzMDUzXHUzMDRiXHUzMDg5XHVmZjA5LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4uZGF0YS10YWJsZTItdGgxLXZsaW4tdCB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcbn1cbi8qLS0tLVx1ZmYxMlx1NmIyMVx1MzBkNVx1MzBhN1x1MzBmY1x1MzBiYVx1MzA2N1x1OGZmZFx1NTJhMFx1ZmYwOFx1MzA1M1x1MzA1M1x1MzA3ZVx1MzA2N1x1ZmYwOS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4uZGF0YS10YWJsZTItdGgyIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG59XG4uZGF0YS10YWJsZTItdGgyLW5vbGluIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcbn1cbi5kYXRhLXRhYmxlMi10aDItdmxpbi1sIHtcblx0cGFkZGluZzogMnB4IDNweCAycHggNHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4uZGF0YS10YWJsZTItdGgzIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG59XG4uZGF0YS10YWJsZTItdGgzLW5vbGluIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcbn1cbi5kYXRhLXRhYmxlMi10aDMtdmxpbi1sIHtcblx0cGFkZGluZzogMnB4IDNweCAycHggNHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4uZGF0YS10YWJsZTItdGQxIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cbi5kYXRhLXRhYmxlMi10ZDEtbm9saW4ge1xuXHRwYWRkaW5nOiAycHggM3B4O1xufVxuLmRhdGEtdGFibGUyLXRkMS12bGluLWwge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG59XG5cbi5kYXRhLXRhYmxlMi10ZDIge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuLmRhdGEtdGFibGUyLXRkMi1ub2xpbiB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cbi5kYXRhLXRhYmxlMi10ZDItdmxpbiB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cblxuLmRhdGEtdGFibGUyLXRkMyB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG4uZGF0YS10YWJsZTItdGQzLW5vbGluIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuLmRhdGEtdGFibGUyLXRkMy12bGluLWwge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG59XG4uZGF0YS10YWJsZTItdGQzLXZsaW4tbHIge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNCRkJGQkY7XG59XG4uZGF0YS10YWJsZTItdGQzLW5vc3BhY2Uge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4vKi0tLS1cdWZmMTJcdTZiMjFcdTMwZDVcdTMwYTdcdTMwZmNcdTMwYmFcdTMwNjdcdThmZmRcdTUyYTBcdWZmMDhcdTMwNTNcdTMwNTNcdTMwNGJcdTMwODlcdWZmMDktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5kYXRhLXRhYmxlMi10ZDMtdG9wIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cbi5kYXRhLXRhYmxlMi10ZDMtdmxpbi10IHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG4vKi0tLS1cdWZmMTJcdTZiMjFcdTMwZDVcdTMwYTdcdTMwZmNcdTMwYmFcdTMwNjdcdThmZmRcdTUyYTBcdWZmMDhcdTMwNTNcdTMwNTNcdTMwN2VcdTMwNjdcdWZmMDktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLmRhdGEtdGFibGUyLXRkNCB7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4uZGF0YS10YWJsZTItdGQ1IHtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cblxuLmRhdGEtdGFibGUyLXRkNiB7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG4uZGF0YS10YWJsZTItdGQ2LXIge1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcbn1cblxuLmRhdGEtdGFibGUyLXRkNyB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG59XG5cbi5kYXRhLXRhYmxlMi10ZDgge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG5cbi5kYXRhLXRhYmxlMi10ZDkge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG5cbi5kYXRhLXRhYmxlMyB7XG5cdG1hcmdpbi10b3A6IDFweDtcbn1cbi5kYXRhLXRhYmxlMy10ZDEge1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdHBhZGRpbmctcmlnaHQ6IDNweDtcblx0cGFkZGluZy1sZWZ0OiAzcHg7XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLWdyaWQtdGFibGUtLS0tLS0tLS0tLS0tLS0tLSovXG4uZ3JpZC10YWJsZTIge31cbi5ncmlkLXRhYmxlMi10aDAge1xuXHRiYWNrZ3JvdW5kOiAjRThGMEVGO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM0MzUzNTY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzQzNTM1Njtcbn1cbi5ncmlkLXRhYmxlMi10aDEge1xuXHRiYWNrZ3JvdW5kOiAjRDZFNEUyO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM0MzUzNTY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzQzNTM1Njtcbn1cbi5ncmlkLXRhYmxlMi10aDIge1xuXHRiYWNrZ3JvdW5kOiAjRDZFNEUyO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM0MzUzNTY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzQzNTM1Njtcbn1cbi5ncmlkLXRhYmxlMi10aDMge1xuXHRiYWNrZ3JvdW5kOiAjRDZFNEUyO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM0MzUzNTY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzQzNTM1Njtcbn1cbi5ncmlkLXRhYmxlMi10aDQge1xuXHRiYWNrZ3JvdW5kOiAjRDZFNEUyO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNDM1MzU2O1xufVxuLmdyaWQtdGFibGUyLXRoNSB7XG5cdGJhY2tncm91bmQ6ICNENkU0RTI7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNDM1MzU2O1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICM0MzUzNTY7XG59XG4uZ3JpZC10YWJsZTItdGg2IHtcblx0YmFja2dyb3VuZDogI0Q2RTRFMjtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM0MzUzNTY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzQzNTM1Njtcbn1cbi5ncmlkLXRhYmxlMi10ZDEge1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNDM1MzU2O1xufVxuXG4uZ3JpZC10YWJsZTItdGQyIHtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM0MzUzNTY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzQzNTM1Njtcbn1cbi5ncmlkLXRhYmxlMi10ZDMge1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNDM1MzU2O1xuXHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjNDM1MzU2O1xufVxuXG4vKi0tLS0tLS0tLS0tLS0tLS10ciBjb2xsZXItLS0tLS0tLS0tLS0tLS0tLSovXG50YWJsZSB0ci5iZy1GdXR1cmUtQmx1ZSAgIHtiYWNrZ3JvdW5kOiNFM0YyRjU7fVxudGFibGUgdHIuYmctTmF0dXJhbC1HcmVlbiB7YmFja2dyb3VuZDojRURGQ0I5O31cbnRhYmxlIHRyLmJnLUdvbGRlbi1PcmFuZ2Uge2JhY2tncm91bmQ6I0ZGRURDMTt9XG50YWJsZSB0ci5iZy1Ta3ktQmx1ZSAgICAgIHtiYWNrZ3JvdW5kOiNERkVERkY7fVxudGFibGUgdHIuYmctQmx1ZS1HcmVlbiAgICB7YmFja2dyb3VuZDojRDJGMUUzO31cblxudGFibGUgdHIuZGFyay1ibHVlMSAgIHtiYWNrZ3JvdW5kOiNFM0YyRjI7fVxudGFibGUgdHIuZGFyay1ibHVlMiAgIHtiYWNrZ3JvdW5kOiNFQ0VDRkY7fVxudGFibGUgdHIuZGFyay1waW5rMSAgIHtiYWNrZ3JvdW5kOiNGQ0U5Rjg7fVxudGFibGUgdHIuZGFyay1waW5rMiAgIHtiYWNrZ3JvdW5kOiNGRkU3RTY7fVxudGFibGUgdHIuZGFyay1vcmFuZ2UxIHtiYWNrZ3JvdW5kOiNGRkVEQzE7fVxudGFibGUgdHIuZGFyay15ZWxsb3cxIHtiYWNrZ3JvdW5kOiNGRkZGQjU7fVxudGFibGUgdHIuZGFyay1ncmVlbjEgIHtiYWNrZ3JvdW5kOiNFNEZGOUQ7fVxudGFibGUgdHIuZGFyay1ncmF5MSAgIHtiYWNrZ3JvdW5kOiNFRUVFRUU7fVxudGFibGUgdHIuZGFyay1ncmF5MiAgIHtiYWNrZ3JvdW5kOiNGNEY0RjQ7fVxudGFibGUgdHIud2hpdGUgICAgICAgIHtiYWNrZ3JvdW5kOiNGRkZGRkY7fVxuXG5cbi8qLS0tLS0tLS0tLS0tLWtha3VuaW4tbm8tdGFibGUtLS0tLS0tLS0tLS0tLSovXG4ua2FrdW5pbi1uby10YWJsZSB7XG59XG5cbi5rYWt1bmluLW5vLXRhYmxlLXRoMCB7XG5cdGNvbG9yOiAjRkZGRkZGO1xuXHRiYWNrZ3JvdW5kOiAjMDAwMDAwO1xuXHRib3JkZXI6IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRmb250LXdlaWdodDogYm9sZDtcblx0Zm9udC1zaXplOiAwLjllbTtcbn1cblxuLmtha3VuaW4tbm8tdGFibGUtdGgxIHtcblx0Y29sb3I6ICNGRkZGRkY7XG5cdGJhY2tncm91bmQ6ICMwMDAwMDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzc1NzU3NTtcblx0Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzc1NzU3NTtcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5rYWt1bmluLW5vLXRhYmxlLXRoMiB7XG5cdGNvbG9yOiAjRkZGRkZGO1xuXHRiYWNrZ3JvdW5kOiAjMDAwMDAwO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzc1NzU3NTtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmtha3VuaW4tbm8tdGFibGUtdGQge1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzc1NzU3NTtcblx0Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzc1NzU3NTtcbn1cblxuLmtha3VuaW4tbm8tdGFibGUtYnJpZ2h0IHtcblx0bGluZS1oZWlnaHQ6IDE3cHg7XG5cdGJhY2tncm91bmQ6ICNGRkZGQzg7XG5cdGJvcmRlcjogM3B4IHNvbGlkICMwMDAwMDA7XG59XG5cbi5zay10YWJsZXtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICM3NTc1NzU7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICM3NTc1NzU7XG5cdGJvcmRlci13aWR0aDogMnB4O1x0XG59In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDI5NTcsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDI5NTd9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAxNDQuOTMyLCAicmVjZWl2ZSI6IDEuNTM3fSwgInBhZ2VyZWYiOiAicGFnZUBmYjliMjY0Nzg1NTQyMDZiZTAyMGVkNWJkZDJiM2MxNSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3LndlaWxvZ2luLmNvbSIsICJpc3N1ZXIiOiAiUjMiLCAidmFsaWRGcm9tIjogMTY4NDg5MzE1NywgInZhbGlkVG8iOiAxNjkyNjY5MTU2fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjRUMTU6MTE6NTQuMDkwWiIsICJ0aW1lIjogMTQ2Ljk4MywgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vd2VpbG9naW4uY29tL2liZy9jc3MvcGMvc2NyZWVuLmNzcyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogIndlaWxvZ2luLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9pYmcvY3NzL3BjL3NjcmVlbi5jc3MifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICJ0ZXh0L2NzcywqLyo7cT0wLjEifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3dlaWxvZ2luLmNvbS9pYmcvY2xpZW50L2xfaG9tZV9wLnBocCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic3R5bGUifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0NDksICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT00MzIwMCJ9LCB7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9jc3MifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNToxMTo1NCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiVy9cIjY0MTc0YjdmLTQzZTRcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJUaHUsIDI1IE1heSAyMDIzIDAzOjExOjU0IEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDE3OjUwOjU1IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifSwgeyJuYW1lIjogInZhcnkiLCAidmFsdWUiOiAiQWNjZXB0LUVuY29kaW5nIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDE3MzgwLCAibWltZVR5cGUiOiAidGV4dC9jc3MiLCAiY29tcHJlc3Npb24iOiAxNDE2OCwgInRleHQiOiAiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZGVjb3JhdGlvbiBzdHlsZXMgZm9yIHNjcmVlbiBtZWRpYVxubGFzdCB1cGRhdGUgMjAxMS0wNC0yOC0wOTowMFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyogLS0tLS0tLSBwcmludCBzdHlsZXMgLS0tLS0tLSAqL1xuI3ByaW50LW1hc3RoZWFkXHR7ZGlzcGxheTpub25lIWltcG9ydGFudDt9XG4vKiAtLS0tIHNvdWRhbiBwcmludCAtLS0tICovXG4jc291ZGFuLXByaW50ICB7ZGlzcGxheTpub25lIWltcG9ydGFudDt9XG4vKiAtLS0tc291ZGFuIHNjcmVlbiBkaXNwbGF5LS0tLSAqL1xuI3NvdWRhbi1kaXNwICB7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50O31cbiNidG4tYm90dG9tXHR7IWltcG9ydGFudDt9XG5cbi8qIC0tLS0tLS0gYmFzaWMgc3R5bGVzIC0tLS0tLS0gKi9cbi8qXG5odG1sLGJvZHkge2JhY2tncm91bmQ6I2ZmZjsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgbWluLXdpZHRoOjY3MHB4OyBmb250LXNpemU6OTAlOyBsaW5lLWhlaWdodDogMS4zZW07fVxuKi9cbmh0bWwsYm9keSB7YmFja2dyb3VuZDojRUNFQ0U2OyBtYXJnaW46MDsgcGFkZGluZzowOyBtaW4td2lkdGg6NjcwcHg7IFxuaGVpZ2h0OiAxMDAlOyBcbmZvbnQtc2l6ZToxMDAlOyBsaW5lLWhlaWdodDogMS4zZW07fVxuYm9keSB7bWFyZ2luLXJpZ2h0OiAxcHg7IG1hcmdpbi1ib3R0b206IDFweDsgbWFyZ2luLWxlZnQ6IDFweDt9XG5cbmh0bWwsYm9keSxcbnAsdWwsb2wsbGksXG50ZCx0aCB7Y29sb3I6IzM1MzUzNTsgZm9udC1mYW1pbHk6XCJNUyBQR290aGljXCIsIE9zYWthO31cblxubGksdGgsdGQsXG5wcmUsY29kZSB7Zm9udC1zaXplOjFlbTt9XG5cbnVsLG9sIHttYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1ib3R0b206IDBweDt9XG5cbnByZSB7bWFyZ2luOiAwcHg7fVxuXG5wIHttYXJnaW46MDsgcGFkZGluZy10b3A6IDNweDsgcGFkZGluZy1ib3R0b206IDNweDt9XG5cbmEgaW1nXHQgIHtib3JkZXI6MCBzb2xpZCAjZjAwO31cbmE6bGluayAgICB7Y29sb3I6IzM5NDg5RDsgdGV4dC1kZWNvcmF0aW9uOiBub25lO31cbmE6dmlzaXRlZCB7Y29sb3I6IzkzMTU4QzsgdGV4dC1kZWNvcmF0aW9uOiBub25lO31cbmE6aG92ZXIgICB7Y29sb3I6IzM5NDg5RDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fVxuXG4uc3ViaGVhZDEgYTpsaW5rICAgIHtjb2xvcjojQ0JEM0ZGOyB0ZXh0LWRlY29yYXRpb246O31cbi5zdWJoZWFkMSBhOnZpc2l0ZWQge2NvbG9yOiNGMENCRUU7IHRleHQtZGVjb3JhdGlvbjo7fVxuLnN1YmhlYWQxIGE6aG92ZXIgICB7Y29sb3I6I0NCRDNGRjsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fVxuXG4uc3ViaGVhZDIgYTpsaW5rICAgIHtjb2xvcjojQ0JEM0ZGOyB0ZXh0LWRlY29yYXRpb246O31cbi5zdWJoZWFkMiBhOnZpc2l0ZWQge2NvbG9yOiNGMENCRUU7IHRleHQtZGVjb3JhdGlvbjo7fVxuLnN1YmhlYWQyIGE6aG92ZXIgICB7Y29sb3I6I0NCRDNGRjsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fVxuXG4jbWFzdGhlYWQtMSB7IG1hcmdpbjowOyBwYWRkaW5nLXRvcDogNXB4O31cbi8qIG1hdHN1ZGEgbW9kaWZpZWQgKi9cbi5zaWRlYmFyIHtiYWNrZ3JvdW5kOiAjRkZGRkZGO31cbiNnbG9iYWxuYXZpIHt9XG4uZ25hdmktdGQxIHtjb2xvcjogI0MyQzJDMjt9XG5cbi8qIG1hdHN1ZGEgbW9kaWZpZWQgKi9cbi5iZy1sb2dvdXQge31cblxuI21hc3RoZWFkLTIge31cbi50ZC1kaXJlY3QtbTEge2JhY2tncm91bmQ6ICMwMDk5YjMgcmVwZWF0LXg7fVxuLnRkLWRpcmVjdC1tMiB7YmFja2dyb3VuZDogI0ZGRjZEOTt9XG4udGQtZGlyZWN0LW0zIHtiYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1nL2JnX3N1YmhlYWQucG5nKSBuby1yZXBlYXQ7fVxuXG4vKiAtLS0tLS0tIG5hdmkgc3R5bGVzIC0tLS0tLS0gKi9cbiNuYXZpIHt9XG4vKiBtYXRzdWRhIG1vZGlmaWVkICovXG4ubmF2aS1zcGFjZSB7YmFja2dyb3VuZDogI2IwZTZlZjsgcmVwZWF0O31cbi5uYXZpLXNwYWNlb24tbCB7YmFja2dyb3VuZDogI0ZGRkZGRjt9XG4ubmF2aS1zcGFjZW9uLXIge2JhY2tncm91bmQ6ICNGRkZGRkY7fVxuLyogbWF0c3VkYSBtb2RpZmllZCAqL1xuLmJnLW5hdmkgIHtcblx0YmFja2dyb3VuZDogI2IwZTZlZiB1cmwoLi4vLi4vaW1nL2lfZGlyZWN0X2cxLnBuZz92ZXI9djIpIG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjp0b3AgcmlnaHQ7XG50YWJsZS1sYXlvdXQ6Zml4ZWQ7XG59XG5cbi8qIC0tLS0tLS0gcGFnZXRpdGxlIHN0eWxlcyAtLS0tLS0tICovXG4jcGFnZXRpdGxlIHtcblx0dGFibGUtbGF5b3V0OmZpeGVkO1xufVxuLnRkLXBhZ2V0aXRsZTEge1xuXHRiYWNrZ3JvdW5kOiAjMDA5OUIzIHVybCguLi8uLi9pbWcvYmdfcHRpdGlsZS5naWYpIHJlcGVhdC14O1xuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XG5cdHBhZGRpbmctdG9wOiAzcHg7XG5cdGNvbG9yOiAjRkZGRkZGO1xufVxuLnRkLXBhZ2V0aXRsZTIge1xuXHRiYWNrZ3JvdW5kOiAjMDA5OUIzIHVybCguLi8uLi9pbWcvaV9kaXJlY3RfZzIucG5nKSBuby1yZXBlYXQ7XG59XG4udGQtcGFnZXRpdGxlMyB7XG5cdGJhY2tncm91bmQ6ICNCMEU2RUYgIHJlcGVhdC14O1xufVxuXG4vKiAtLS0tLS0tIGNvbnRlbnQgc3R5bGVzIC0tLS0tLS0gKi9cbiNjb250ZW50LW1haW4ge31cbi5zdGF0dXMtdGQxIHtcblx0Y29sb3I6ICNGRkZGRkY7XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHRwYWRkaW5nLWxlZnQ6IDRweDtcblx0YmFja2dyb3VuZDogIzAwODAzMztcblx0cGFkZGluZy10b3A6IDFweDtcblx0cGFkZGluZy1ib3R0b206IDFweDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICMwMDgwMzM7XG5cdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICMwMDgwMzM7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMDA4MDMzO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICMwMDgwMzM7XG5cdHdpZHRoOiAzNnB4O1xufVxuLnN0YXR1cy10ZDIge1xuXHRjb2xvcjogIzMzM0U0MDtcblx0YmFja2dyb3VuZDogI0ZGRkZGRjtcblx0bGluZS1oZWlnaHQ6IDEuNWVtO1xuXHRwYWRkaW5nOiAxcHggNHB4IDFweCAxMHB4O1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG59XG4uc3RhdHVzLW51bS1vbiB7XG5cdGJhY2tncm91bmQ6ICM4ODAwMDA7XG5cdGNvbG9yOiAjRkZGRkZGO1xuXHRoZWlnaHQ6IDFlbTtcblx0d2lkdGg6IDFlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRwYWRkaW5nOiAwLjAxZW0gMC4zZW07XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdGZvbnQ6IDAuOWVtIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcblx0bWFyZ2luLXJpZ2h0OiAycHg7XG59XG5cbi5zdGF0dXMtbnVtLW9uMiB7XG5cdGJhY2tncm91bmQ6ICM4ODAwMDA7XG5cdGNvbG9yOiAjRkZGRkZGO1xuXHRoZWlnaHQ6IDFlbTtcblx0d2lkdGg6IDFlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRwYWRkaW5nOiAwLjAxZW0gMC4wNWVtO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRmb250OiAwLjllbSBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG5cdG1hcmdpbi1yaWdodDogMnB4O1xufVxuXG4uc3RhdHVzLW51bS1vZmYge1xuXHRiYWNrZ3JvdW5kOiAjREZERkRGO1xuXHRjb2xvcjogIzMzM0U0MDtcblx0aGVpZ2h0OiAxZW07XG5cdHdpZHRoOiAxZW07XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0cGFkZGluZzogMC4wMWVtIDAuM2VtO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRmb250OiAwLjllbSBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG5cdG1hcmdpbi1yaWdodDogMnB4O1xufVxuXG4uc3RhdHVzLW51bS1vZmYyIHtcblx0YmFja2dyb3VuZDogI0RGREZERjtcblx0Y29sb3I6ICMzMzNFNDA7XG5cdGhlaWdodDogMWVtO1xuXHR3aWR0aDogMWVtO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdHBhZGRpbmc6IDAuMDFlbSAwLjA1ZW07XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdGZvbnQ6IDAuOWVtIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcblx0bWFyZ2luLXJpZ2h0OiAycHg7XG59XG5cblxuLnN0YXR1cy10eHQtb24ge2NvbG9yOiAjODgwMDAwO31cblxuLyogYWRkICovXG4udmVydGljYWwtYWxpZ24tdG9wIHsgdmVydGljYWwtYWxpZ246dG9wIH1cblxuLyogLS0tIHRleHQgc3R5bGVzIC0tLSAqL1xuaDEsaDIsaDMsaDQsaDUsaDYge21hcmdpbjowOyBwYWRkaW5nOjA7fVxuaDEge1xuXHRmb250LXNpemU6IDEuM2VtO1xuXHRmb250LXdlaWdodDogYm9sZDtcbn1cbi8qXG5oMiB7Zm9udC1zaXplOiAxLjFlbTsgZm9udC13ZWlnaHQ6IGJvbGQ7fVxuaDMge2ZvbnQtc2l6ZTogMC45ZW07IGZvbnQtd2VpZ2h0OiBib2xkO31cbmg0IHtmb250LXNpemU6IDAuOWVtOyBmb250LXdlaWdodDogYm9sZDt9XG5oNSB7Zm9udC1zaXplOiAwLjllbTsgZm9udC13ZWlnaHQ6IGJvbGQ7fVxuaDYge2ZvbnQtc2l6ZTogMC45ZW07IGZvbnQtd2VpZ2h0OiBib2xkO31cbiovXG5oMiB7Zm9udC1zaXplOiAxLjEzZW07IGZvbnQtd2VpZ2h0OiBib2xkO31cbmgzIHtmb250LXNpemU6IDFlbTsgZm9udC13ZWlnaHQ6IGJvbGQ7fVxuaDQge2ZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogYm9sZDt9XG5oNSB7Zm9udC1zaXplOiAxZW07IGZvbnQtd2VpZ2h0OiBib2xkO31cbmg2IHtmb250LXNpemU6IDFlbTsgZm9udC13ZWlnaHQ6IGJvbGQ7fVxuLnNtYWxsXHQgICAge2ZvbnQtc2l6ZTowLjg1ZW07fVxuLnNtYWxsLWdyeVx0e2NvbG9yOiM1QjVCNUI7IGZvbnQtc2l6ZTowLjg1ZW07fVxuLnNlY3Rpb25cdHttYXJnaW46MDsgcGFkZGluZy1sZWZ0OiAwLjZlbTsgZGlzcGxheTogYmxvY2s7fVxuLm5vYm9sZCAgICAge2ZvbnQtd2VpZ2h0OiBub3JtYWw7fVxuLnN1YmhlYWRtZW51XHR7Y29sb3I6I2ZmZmZmZjt9XG4udG9waW5mb1x0e2NvbG9yOiNjNTI4MGU7fVxuLmFsZXJ0ICAgICAge2NvbG9yOiM5RjIwMDA7fVxuLnRyaWFsLWhlYWQgIHtjb2xvcjojREIwMDAwOyBmb250LXNpemU6IDEuMWVtOyBmb250LXdlaWdodDogYm9sZDt9XG5cbi5vcmFuZ2UtZGFyayAge2NvbG9yOiM5RjIwMDA7fVxuLnJlZC1kYXJrMVx0ICB7Y29sb3I6Izg4MDAwMDt9XG4ucmVkLWRhcmsyICAgIHtjb2xvcjojM0MwNDI0O31cbi5ncmVlbi1kYXJrMSAge2NvbG9yOiMzRjRCNEU7fVxuLmdyZWVuLWRhcmsyICB7Y29sb3I6IzA5MjgyRjt9XG4uZ3JheTFcdCAgICAgIHtjb2xvcjojNUI1QjVCO31cbi5ncmF5Mlx0ICAgICAge2NvbG9yOiMyQTJBMkE7fVxuLmJsYWNrXHQgICAgICB7Y29sb3I6IzAwMDAwMDt9XG4ud2hpdGVcdCAgICAgIHtjb2xvcjojRkZGRkZGO31cbi5mdXR1cmUtYmx1ZSAgICAgICB7Y29sb3I6IzAwNjY4MDt9XG5cbi5iZy15ZWxsb3dcdCAgICB7YmFja2dyb3VuZDojRkZGRkM4O31cbi5iZy1yb3NlXHQgICAge2JhY2tncm91bmQ6I0YwREZFMDt9XG4uYmctZ3JlZW5cdCAgICB7YmFja2dyb3VuZDojRDZFNEUyO31cbi5iZy1ncmF5MVx0ICAgIHtiYWNrZ3JvdW5kOiNGN0Y3Rjc7fVxuLmJnLWdyYXkyXHQgICAge2JhY2tncm91bmQ6I0VFRUVFRTt9XG5cbi5iZy1ncmF5LWRhcmsgICB7YmFja2dyb3VuZDojNUI1QjVCO31cbi5iZy1ibGFja1x0ICAgIHtiYWNrZ3JvdW5kOiMwMDAwMDA7fVxuLmJnLXdoaXRlXHQgICAge2JhY2tncm91bmQ6I0ZGRkZGRjt9XG5cblxuLnRvdG9wICAgICB7IG1hcmdpbi10b3A6IDNweDt9XG4udG90b3AtdGQxIHtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRwYWRkaW5nLXRvcDogMXB4O1xufVxuLnRvdG9wLXRkMiB7cGFkZGluZy10b3A6IDFweDt9XG4udG90b3AtdGQzIHtiYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1nL2JnX3RvdG9wLmdpZikgbm8tcmVwZWF0IGxlZnQ7fVxuXG4vKiAtLS0tLS0tIGZvb3RlciBzdHlsZXMgLS0tLS0tLSAqL1xuI2Zvb3RlciB7fVxuLmZvb3Rlci10ZDEge1xuXHRiYWNrZ3JvdW5kOiAjQjBFNkVGO1xufVxuLmZvb3Rlci10ZDIge1xuXHRjb2xvcjogI0MyQzJDMjtcblx0cGFkZGluZy1sZWZ0OiA3cHg7XG59XG5cbiNjb3B5cmlnaHQge31cblxuLyogLS0tLS0tLSBmb3JtIGVsZW1lbnQgdHJlYXRtZW50cyAtLS0tLS0tICovXG5mb3JtXHR7bWFyZ2luOjA7IHBhZGRpbmc6MDt9XG4vKnNlbGVjdCxpbnB1dFx0e2Rpc3BsYXk6aW5saW5lO30qL1xuc2VsZWN0XHR7ZGlzcGxheTppbmxpbmU7fVxuc2VsZWN0XHR7Ym9yZGVyOjFweCBzb2xpZCAjMDAwO31cbi8qXG5zZWxlY3QsaW5wdXQsdGV4dGFyZWFcdHtmb250LXNpemU6LjllbTt9XG4qL1xuc2VsZWN0LGlucHV0LHRleHRhcmVhXHR7Zm9udC1zaXplOjFlbTt9XG5cbi5wYXNzd29yZC1mb250IGlucHV0IHtmb250LWZhbWlseTpcImFyaWFsXCI7fVxuXG4uYnV0dG9uLXNvZnR3YXJlLWtleSBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDEuOGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYnV0dG9uLXJvc2UxLWtleSBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDEuOGVtO1xuXHRoZWlnaHQ6IDEuOWVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlMS1rZXktZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNBMEEwQTA7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDEuOGVtO1xuXHRoZWlnaHQ6IDEuOWVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYnV0dG9uLXJvc2UyIGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDdlbTtcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0RCRjhGRDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0RCRjhGRDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmJ1dHRvbi1yb3NlMi1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDdlbTtcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0Y3RjdGNztcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgI0M2QzZDNjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNCQ0JDQkM7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0Y3RjdGNztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmJ1dHRvbi1yb3NlMyBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAxMGVtO1xuXHRoZWlnaHQ6IDEuOWVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlMy1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDEwZW07XG5cdGhlaWdodDogMS45ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNDNkM2QzY7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjQkNCQ0JDO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2UzLWRvdWJsZSBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAxMGVtO1xuXHRoZWlnaHQ6IDMuMGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlMy1kb3VibGUtZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNBMEEwQTA7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNFN0U3RTc7XG5cdHdpZHRoOiAxMGVtO1xuXHRoZWlnaHQ6IDMuMGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlNCBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAxMmVtO1xuXHRoZWlnaHQ6IDEuOWVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlNC1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDEyZW07XG5cdGhlaWdodDogMS45ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNDNkM2QzY7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjQkNCQ0JDO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5idXR0b24tcm9zZTUgaW5wdXQge1xuXHRjb2xvcjojMzMzMzMzO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojQzZFMEU0O1xuXHR3aWR0aDogMTZlbTtcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0RCRjhGRDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0RCRjhGRDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tcm9zZTUtZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNBMEEwQTA7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNFN0U3RTc7XG5cdHdpZHRoOiAxNmVtO1xuXHRoZWlnaHQ6IDEuOWVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYnV0dG9uLXJvc2U2IGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDIwZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5idXR0b24tcm9zZTYtZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNBMEEwQTA7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNFN0U3RTc7XG5cdHdpZHRoOiAyMGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYnV0dG9uLXJvc2U3IGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDI0ZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2U3LWRpc2FibGUgaW5wdXQge1xuXHRjb2xvcjojQTBBMEEwO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojRTdFN0U3O1xuXHR3aWR0aDogMjRlbTtcblx0aGVpZ2h0OiAxLjhlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0Y3RjdGNztcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgI0M2QzZDNjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNCQ0JDQkM7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0Y3RjdGNztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmJ1dHRvbi1yb3NlOCBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAyOGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlOC1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDI4ZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNDNkM2QzY7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjQkNCQ0JDO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2U5IGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDE1LjRlbTtcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0RCRjhGRDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0RCRjhGRDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tcm9zZTEwLWtleSBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDIuNWVtO1xuXHRoZWlnaHQ6IDIuNGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1jaG9jbyBpbnB1dCB7XG5cdGNvbG9yOiNmZmY7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6IzJjNTQ3Mztcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgIzg2QzBDRTtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjODZDMENFO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjMDAwMDAwO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzAwMDAwMDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tY2hvY28tZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNFN0U3RTc7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6I0FEQUFBRDtcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0NFQ0VDRTtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjQ0VDRUNFO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjOUQ5RDlEO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzhBOEE4QTtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmJ1dHRvbi1jaG9jbzEzIGlucHV0IHtcblx0d2lkdGg6IDEzZW07XG59XG4uYnV0dG9uLWNob2NvMTggaW5wdXQge1xuXHR3aWR0aDogMThlbTtcbn1cbi5idXR0b24tY2hvY28zMCBpbnB1dCB7XG5cdHdpZHRoOiAzMGVtO1xufVxuXG4uYnV0dG9uLXJvc2UxOS1kb3VibGUgaW5wdXQge1xuXHRjb2xvcjojMzMzMzMzO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojQzZFMEU0O1xuXHR3aWR0aDogNTBlbTtcblx0aGVpZ2h0OiAzLjBlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0RCRjhGRDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0RCRjhGRDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tcm9zZTE5LWRvdWJsZS1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDUwZW07XG5cdGhlaWdodDogMy4wZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNDNkM2QzY7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjQkNCQ0JDO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLW90aGVycy0tLS0tLS0tLS0tLS0tLSovXG4ubGluLXNvbGlkIHtiYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1nL2xpbl9zb2xpZC5naWYpIHJlcGVhdC14O31cbi5saW4tZG90cyB7XG5cdGJhY2tncm91bmQ6IHVybCguLi8uLi9pbWcvbGluX2RvdHMuZ2lmKSByZXBlYXQteDtcblx0cGFkZGluZy10b3A6IDRweDtcbn1cblxuLmRpdmlkZXIge1xuXHRmb250LXNpemU6IDEuNmVtO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGNvbG9yOiAjNTgyQzM1O1xuXHRwYWRkaW5nLXRvcDogMnB4O1xufVxuLnRkLXNwYWNlcjEge3BhZGRpbmctcmlnaHQ6IDNweDt9XG5cbi5ibG9jayAge2Rpc3BsYXk6YmxvY2s7fVxuXG4uZG91aXppa291IHtcblx0b3ZlcmZsb3c6IHNjcm9sbDtcblx0d2lkdGg6IDgwJTtcblx0aGVpZ2h0OiA0MDBweDtcblx0Ym9yZGVyLXdpZHRoOiAxcHg7XG5cdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdGJvcmRlci1jb2xvcjogc2lsdmVyO1xuXHR0ZXh0LWFsaWduOiBqdXN0aWZ5O1xuXHR0ZXh0LWp1c3RpZnk6IGRpc3RyaWJ1dGU7XG59XG5cbi5oYW5rYWt1IGlucHV0IHtcblx0aW1lLW1vZGU6IGRpc2FibGVkO1xufVxuXG4ua2FrdW5pbi1uby1sYWJlbCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzlGMjAwMDtcbn1cblxuLmtha3VuaW4tbm8tZmllbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkM4O1xufVxuXG4udGV4dC1pbnB1dC1maWVsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGRkZGQzg7XG59XG5cblxuXG5cbi8qIC0tLS0tLS0gc3RlcDMgYWRkIC0tLS0tLS0gKi9cbiNwYWdlIHtcdFxuICB3aWR0aDogODkwcHg7XG4gIHBhZGRpbmc6IDBweCAzMHB4O1xuICBtYXJnaW46IDBweCBhdXRvO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO1xuICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtaW4taGVpZ2h0OiAxMDAlO1xufVx0XG5cbiNwYWdlLXN1Yi13aW5kb3cge1x0XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwcHggMHB4O1xuICBtYXJnaW46IDBweCBhdXRvO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG59XHRcblxuLmJ1dHRvbi1yb3NlMl9uZXcgaW5wdXQge1xuXHRjb2xvcjojMzMzMzMzO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojQzZFMEU0O1xuXHR3aWR0aDogNGVtO1xuXHRoZWlnaHQ6IDEuOWVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYnV0dG9uLXJvc2UyX25ldy1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDRlbTtcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0Y3RjdGNztcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgI0M2QzZDNjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNCQ0JDQkM7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0Y3RjdGNztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbiNmb290ZXItcG9zaSB7XG5cdGJvdHRvbTogMDtcblx0cG9zaXRpb246IGFic29sdXRlO1xufVxuLyogLS0tLS0tLSBzdGVwMyBhZGQgLS0tLS0tLSAqL1xuXG4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMzIxMiwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMzIxMn0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDE0NS4zOTUsICJyZWNlaXZlIjogMS41ODh9LCAicGFnZXJlZiI6ICJwYWdlQGZiOWIyNjQ3ODU1NDIwNmJlMDIwZWQ1YmRkMmIzYzE1IiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cud2VpbG9naW4uY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTU3LCAidmFsaWRUbyI6IDE2OTI2NjkxNTZ9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNToxMTo1NC4wOTBaIiwgInRpbWUiOiAxNDguMDQ5LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2Nzcy9wYy9zY3JlZW5fZWRnZS5jc3MiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJ3ZWlsb2dpbi5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvaWJnL2Nzcy9wYy9zY3JlZW5fZWRnZS5jc3MifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICJ0ZXh0L2NzcywqLyo7cT0wLjEifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3dlaWxvZ2luLmNvbS9pYmcvY2xpZW50L2xfaG9tZV9wLnBocCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic3R5bGUifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0NTksICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT00MzIwMCJ9LCB7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9jc3MifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNToxMTo1NCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiVy9cIjY0MTc0OWQ1LTFkYTdcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJUaHUsIDI1IE1heSAyMDIzIDAzOjExOjU0IEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDE3OjQzOjQ5IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifSwgeyJuYW1lIjogInZhcnkiLCAidmFsdWUiOiAiQWNjZXB0LUVuY29kaW5nIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDc1OTEsICJtaW1lVHlwZSI6ICJ0ZXh0L2NzcyIsICJjb21wcmVzc2lvbiI6IDY0MjgsICJ0ZXh0IjogIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnN0eWxlcyBmb3IgZWRnZS9jaHJvbWVcbmxhc3QgdXBkYXRlIDIwMjEtMDQtMDEtMDk6MDBcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qIC0tLS0tLS0gXHU5MDMyXHU4ODRjXHU4ODY4XHU3OTNhXHUzMDZlXHUzMGNhXHUzMGYzXHUzMGQwXHUzMGZjXHU2NTcwXHU1YjU3XHUzMDZlXHU3ZTI2XHU0ZjRkXHU3ZjZlXHU2MzA3XHU1YjlhXHUzMDkyXHU1M2Q2XHUzMDYzXHUzMDVmXHUzMDgyXHUzMDZlIC0tLS0tLS0gKi9cbi5zdGF0dXMtbnVtLW9uIHtcblx0YmFja2dyb3VuZDogIzg4MDAwMDtcblx0Y29sb3I6ICNGRkZGRkY7XG5cdGhlaWdodDogMWVtO1xuXHR3aWR0aDogMWVtO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdHBhZGRpbmc6IDAuMDFlbSAwLjNlbTtcblx0dmVydGljYWwtYWxpZ246YmFzZWxpbmU7XG5cdGZvbnQ6IDFlbSBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG5cdG1hcmdpbi1yaWdodDogMnB4O1xufVxuLnN0YXR1cy1udW0tb24yIHtcblx0YmFja2dyb3VuZDogIzg4MDAwMDtcblx0Y29sb3I6ICNGRkZGRkY7XG5cdGhlaWdodDogMWVtO1xuXHR3aWR0aDogMWVtO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdHBhZGRpbmc6IDAuMDFlbSAwLjA1ZW07XG5cdHZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO1xuXHRmb250OiAwLjllbSBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG5cdG1hcmdpbi1yaWdodDogMnB4O1xufVxuLnN0YXR1cy1udW0tb2ZmIHtcblx0YmFja2dyb3VuZDogI0RGREZERjtcblx0Y29sb3I6ICMzMzNFNDA7XG5cdGhlaWdodDogMWVtO1xuXHR3aWR0aDogMWVtO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdHBhZGRpbmc6IDAuMDFlbSAwLjNlbTtcblx0dmVydGljYWwtYWxpZ246YmFzZWxpbmU7XG5cdGZvbnQ6IDFlbSBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG5cdG1hcmdpbi1yaWdodDogMnB4O1xufVxuLnN0YXR1cy1udW0tb2ZmMiB7XG5cdGJhY2tncm91bmQ6ICNERkRGREY7XG5cdGNvbG9yOiAjMzMzRTQwO1xuXHRoZWlnaHQ6IDFlbTtcblx0d2lkdGg6IDFlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRwYWRkaW5nOiAwLjAxZW0gMC4wNWVtO1xuXHR2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtcblx0Zm9udDogMC45ZW0gR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuXHRtYXJnaW4tcmlnaHQ6IDJweDtcbn1cblxuLmJ1dHRvbi1zb2Z0d2FyZS1rZXkgaW5wdXQge1xuXHRjb2xvcjojMzMzMzMzO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246Y2VudGVyO1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAyLjAxZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmc6IDAuMTVlbSAwLjE1ZW0gMC4xNXB4O1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0RCRjhGRDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0RCRjhGRDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLyogLS0tLS0tLSBcdTMwZGNcdTMwYmZcdTMwZjNcdTMwNmVcdTVlNDVcdTMwOTJTYWZhcmlcdTc1MjhcdTMwNmJcdTVlODNcdTMwNTJcdTMwNWZcdTMwODJcdTMwNmUgLS0tLS0tLSAqL1xuXG4uYnV0dG9uLXJvc2UxLWtleSBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDMuNGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nOiAwLjE1ZW0gMC4xNWVtIDAuMTVweDtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5idXR0b24tcm9zZTEta2V5LWRpc2FibGUgaW5wdXQge1xuXHRjb2xvcjojQTBBMEEwO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246Y2VudGVyO1xuXHRiYWNrZ3JvdW5kOiNFN0U3RTc7XG5cdHdpZHRoOiAzLjRlbTtcblx0aGVpZ2h0OiAxLjhlbTtcblx0cGFkZGluZzogMC4xNWVtIDAuMTVlbSAwLjE1cHg7XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYnV0dG9uLXJvc2UyIGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDguNGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlMi1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDguNGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlMyBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAxMS40ZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2UzLWRpc2FibGUgaW5wdXQge1xuXHRjb2xvcjojQTBBMEEwO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojRTdFN0U3O1xuXHR3aWR0aDogMTEuNGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlNCBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAxNGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlNC1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDE0ZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNDNkM2QzY7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjQkNCQ0JDO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2U1IGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDE4ZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2U1LWRpc2FibGUgaW5wdXQge1xuXHRjb2xvcjojQTBBMEEwO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojRTdFN0U3O1xuXHR3aWR0aDogMThlbTtcblx0aGVpZ2h0OiAxLjhlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0Y3RjdGNztcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgI0M2QzZDNjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNCQ0JDQkM7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0Y3RjdGNztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tcm9zZTYgaW5wdXQge1xuXHRjb2xvcjojMzMzMzMzO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojQzZFMEU0O1xuXHR3aWR0aDogMjBlbTtcblx0aGVpZ2h0OiAxLjhlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0RCRjhGRDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0RCRjhGRDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi8qLS0tLVx1ZmYxMlx1NmIyMVx1MzBkNVx1MzBhN1x1MzBmY1x1MzBiYVx1MzA2N1x1OGZmZFx1NTJhMFx1ZmYwOFx1MzA1M1x1MzA1M1x1MzA0Ylx1MzA4OVx1ZmYwOS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLmJ1dHRvbi1yb3NlNi1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDIwZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNDNkM2QzY7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjQkNCQ0JDO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2U3IGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDI2ZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2U3LWRpc2FibGUgaW5wdXQge1xuXHRjb2xvcjojQTBBMEEwO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojRTdFN0U3O1xuXHR3aWR0aDogMjZlbTtcblx0aGVpZ2h0OiAxLjhlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0Y3RjdGNztcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgI0M2QzZDNjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNCQ0JDQkM7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0Y3RjdGNztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tcm9zZTggaW5wdXQge1xuXHRjb2xvcjojMzMzMzMzO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojQzZFMEU0O1xuXHR3aWR0aDogMzBlbTtcblx0aGVpZ2h0OiAxLjhlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0RCRjhGRDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0RCRjhGRDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tcm9zZTgtZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNBMEEwQTA7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNFN0U3RTc7XG5cdHdpZHRoOiAzMGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLyotLS0tXHVmZjEyXHU2YjIxXHUzMGQ1XHUzMGE3XHUzMGZjXHUzMGJhXHUzMDY3XHU4ZmZkXHU1MmEwXHVmZjA4XHUzMDUzXHUzMDUzXHUzMDdlXHUzMDY3XHVmZjA5LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi5idXR0b24tY2hvY28xMyBpbnB1dCB7XG5cdHdpZHRoOiAxNWVtO1xufVxuLmJ1dHRvbi1jaG9jbzE4IGlucHV0IHtcblx0d2lkdGg6IDIwZW07XG59XG4uYnV0dG9uLWNob2NvMzAgaW5wdXQge1xuXHR3aWR0aDogMzJlbTtcbn0ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMTE2MywgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMTE2M30sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDE0Ni4zMzUsICJyZWNlaXZlIjogMS43MTR9LCAicGFnZXJlZiI6ICJwYWdlQGZiOWIyNjQ3ODU1NDIwNmJlMDIwZWQ1YmRkMmIzYzE1IiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cud2VpbG9naW4uY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTU3LCAidmFsaWRUbyI6IDE2OTI2NjkxNTZ9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNToxMTo1NC4wOTBaIiwgInRpbWUiOiAxNDkuMDQzLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2Nzcy9wYy9pc0xvZ2luLmNzcyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogIndlaWxvZ2luLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9pYmcvY3NzL3BjL2lzTG9naW4uY3NzIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAidGV4dC9jc3MsKi8qO3E9MC4xIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2NsaWVudC9sX2hvbWVfcC5waHAifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInN0eWxlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNDUxLCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2NlcHQtcmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9NDMyMDAifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjExMiJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogInRleHQvY3NzIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTU6MTE6NTQgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlwiNjQxNzRhNWMtNzBcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJUaHUsIDI1IE1heSAyMDIzIDAzOjExOjU0IEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDE3OjQ2OjA0IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifV0sICJjb250ZW50IjogeyJzaXplIjogMTEyLCAibWltZVR5cGUiOiAidGV4dC9jc3MiLCAiY29tcHJlc3Npb24iOiAwLCAidGV4dCI6ICIvKi0tLS0tLS0tLS0tLS1yb3cgaW5uZXIgc3BhY2luZy0tLS0tLS0tLS0tLS0tKi9cbi5oYWxmLXJvdy1zcGFjaW5ne1xuXHRwYWRkaW5nLXRvcDowLjVlbTtcblx0cGFkZGluZy1ib3R0b206MC41ZW07XG59In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDMxNSwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMzE1fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMTQ3LjE4OSwgInJlY2VpdmUiOiAxLjg1NH0sICJwYWdlcmVmIjogInBhZ2VAZmI5YjI2NDc4NTU0MjA2YmUwMjBlZDViZGQyYjNjMTUiLCAic2VydmVySVBBZGRyZXNzIjogIjIwNC40NC45My4xNDEiLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInd3dy53ZWlsb2dpbi5jb20iLCAiaXNzdWVyIjogIlIzIiwgInZhbGlkRnJvbSI6IDE2ODQ4OTMxNTcsICJ2YWxpZFRvIjogMTY5MjY2OTE1Nn19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI0VDE1OjExOjU0LjA5MFoiLCAidGltZSI6IDU3NC45ODgsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3dlaWxvZ2luLmNvbS9pYmcvaW1nL2MuZ2lmIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAid2VpbG9naW4uY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2liZy9pbWcvYy5naWYifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICJpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZyxpbWFnZS9zdmcreG1sLGltYWdlLyosKi8qO3E9MC44In0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2NsaWVudC9sX2hvbWVfcC5waHAifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImltYWdlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNDc5LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2NlcHQtcmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9MjU5MjAwMCJ9LCB7Im5hbWUiOiAiY29udGVudC1sZW5ndGgiLCAidmFsdWUiOiAiNDMifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJpbWFnZS9naWYifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNToxMTo1NCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiXCI2NDE2YWFhZC0yYlwiIn0sIHsibmFtZSI6ICJleHBpcmVzIiwgInZhbHVlIjogIkZyaSwgMjMgSnVuIDIwMjMgMTU6MTE6NTQgR01UIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIlN1biwgMTkgTWFyIDIwMjMgMDY6MjQ6NDUgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMCJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiA0MywgIm1pbWVUeXBlIjogImltYWdlL2dpZiIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogIlIwbEdPRGxoQVFBQkFJQUFBQUFBQUFBQUFDSDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUNSQUVBT3c9PSIsICJlbmNvZGluZyI6ICJiYXNlNjQifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMjQ3LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAyNDd9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiA0MzIuOTAxLCAicmVjZWl2ZSI6IDE0Mi4wODd9LCAicGFnZXJlZiI6ICJwYWdlQGZiOWIyNjQ3ODU1NDIwNmJlMDIwZWQ1YmRkMmIzYzE1IiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cud2VpbG9naW4uY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTU3LCAidmFsaWRUbyI6IDE2OTI2NjkxNTZ9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNToxMTo1NC4wOTBaIiwgInRpbWUiOiA1NzYuMDU5LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2ltZy9sb2dvX2NvX3ByaW50LmdpZiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogIndlaWxvZ2luLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9pYmcvaW1nL2xvZ29fY29fcHJpbnQuZ2lmIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qLCovKjtxPTAuOCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vd2VpbG9naW4uY29tL2liZy9jbGllbnQvbF9ob21lX3AucGhwIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJpbWFnZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAic2FtZS1vcmlnaW4ifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDUwMywgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiYWNjZXB0LXJhbmdlcyIsICJ2YWx1ZSI6ICJieXRlcyJ9LCB7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTI1OTIwMDAifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjI4MDAifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJpbWFnZS9naWYifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNToxMTo1NCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiXCI2NDE2YWFhYS1hZjBcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJGcmksIDIzIEp1biAyMDIzIDE1OjExOjU0IEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDA2OjI0OjQyIEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifV0sICJjb250ZW50IjogeyJzaXplIjogMjgwMCwgIm1pbWVUeXBlIjogImltYWdlL2dpZiIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogIlIwbEdPRGxoeXdBZkFQY0FBTzZJQUovWjRoQ2Z1RENzd1hERzFNL3M4U0NtdmUvNSttQy8wTi95OVZDNXk0L1MzcS9mNXdDQU03UFpRRUN6c3dCbWdKbG1Nd0JtbVdhejJmYkRmL0ttUVB2aHY1bk01Y3psOG4vTXpNYmljSi9QRUxMWjdPWHkrU0NtcGhDZm4rLzUrZm44NzJDZ3NPLzErZStQRUhPNTNMK2dnR0N3RS9TMVlLL2YzNTVvTU1HQ0hXQ2d2OW5Gc3ZqTGovblNuNlhTNmZMczVaL0YyZDZDQ3EvUDEvNzQ3L0w1Mzluc255QjVwdjN3MzQvRjJaYlBrNi9YdnpDWVdkK0dDbys4MGlhTXZ6Q1d4N21wYVovUHNqQ0RtQ0NHc0FOcGhYeStDcG1USGViS2drQ2daZ0NMWUtMUm4rWHl2eEJ3aUZDb2MrTENuRkNjd2hCd244L24yWERHeHN6bGY3L2Z6Sm1mRnVQajJRQjVpZExwajQzRzR2T3RVQ2FNdVkvUzBpbVB3bEM1dWRLOHBjL3M3Sm16RGFaNVRiL2ZZS3pXTU8vMTk5L3M3MENmenpDV3lkL3ZyNlJxTGZDWElPejF6d05wbkovWjJheURXYWJTSUFDTWs1cWdpZC95OGpDRHJBQjhpd0NPYlBMNS9KL0Z6eDVxaG8vS3NtQ2pzaEpyazQvSHBRQ1RnT21HQS9uMThnOW9qNkxKMUlDLzN5QjVrTC9sN0gvTTJVQ3p4Z0NaczVuTUFBQ1ptVE9aelAvLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBQUFBQUFBTEFBQUFBRExBQjhBQUFqL0FEVTRHRWh3b0FZdGJod3BYT2pJQWdVVUZTSktqUGlDb2NXTEdETnEzTWl4bzhlUElFT0tISW5Sd2FLVEtGTXVrbk5EWVEwS0pBREluRWtUQUFXU09IUHEzTW16NTBpVEtvTXVNcE1rWnMyak5uMW1SSVFvd0VXbVRqRWVZcHBBWVFDbUJ6cE9SVlQxNDFWRVNpMTIzWG1vckVlZ1FsTWlVVEVENmRHYkhKbktuVXUzNlVWRmloTGR6WnR4Z0NJQkN4bmcxUnNYNzZHUEIvQU9RSVMzc1dPK0N4OHJBcnN3d2RSRWt4a2VNSUEzYXFMUG9EOUhWWmhBc1NQR2tnMDdRcHQyMFpVSUVkaTZwUWwzWStyYmhCa08zcHViNFNHOENCaGlWa1FBNDl6aENPck9aYmlnTTJyY3VoOHovU3lac3FNRGZoc3ZjSFRidWlNRW5VL2YvMVowbVBYQ0VFMDBiQmdER3phYlFHMWNXRmhvZ1hiSDBQanpGMWNJR3ErQS9QNkpKaHhlejQxSDJIampNY1NaQUdVMTZPQ0RXUlh3WUZtU0dhREFBbDBWa0IwQzJUV255QUlOK21WZEFLWTVZdG1FWldWbG5rVWhDTkVlYkZCY1ZOOU10WVdGWUdyVy9aYVhqZ2dTRnBvQWcrVVgya0tvSVRMY2pZY2Q2VmdpQ29DWG1VWERiWGNBQVpQaEJXSlpJaXFFbWdBRmZMVGlSU2EwMXdKR004cFVvMUw5L1FXZ21vbEV0Um1CQnp3SW5JTmRXc1NaQVI0VkFDUjVCQWlaWDVkOTVxZVFqdDd4dDJkakEvQW9IWCtLR0JBb0F4MTlhWkVnWkVSZ1FrWmxKaFdXUmJ0eEN0bENDalJXS0hkUGFxUVlpbVYxaFYxamg1MklhcDJEUHYvWUZhRVhIVkFnWDRxQkJpUmxDaUN5cWlJQitBbGFBYXpaa0ZFWUVjU1EwUXMwdWJDcHA3MHAxS2xDSGhLNDE2aSszYWdJcE9LeDJpMTBrUzNxQ0tFU0hqS2FaWDRsMnFWcWpIcEg0bzVJVnBGU1N4akZFSWRHS05BMFgwZksxVFZhZE5HUzJodGpUbzVxclViVmp0Y1Z3YXB0MWUrL2RTM3dXWGFQV2NYVW5VenBtTnpGcGVwcFdBSjBPV2tBVld1azVJQkdZMktVUTAwMWVLVHRwd0R6eGhBaXdWa2JLSFdOaGdhclFxRk9leDFlZUZJYmdJNkhPYXdjeEhVaHlHaDEzUTI2WjhEalRodkNCaWdkd1lSSWRQZ3dFeGNmQ1J2YWZ0REt2RkJXcElLbFpHcUhqZjFZMnQwV1N2UzNxZlVtbVFLOU9vbkFJV1JiakFqR2lPai91T0J5cFBxOGtJNjlsWEhTQ1EwME1BUklMRWl3eHdveTdidHBzRGovaDErQWlZQmR0aVBsVXFqSTNRM203Y2k3aUFCcFFGWUpBQ21BNkZHVE4yNi9VTTFNVjlxMFdoUnNzSGtGcXlPVjVDVVFxclFHY0FZMTRRelpzQUhpaVRmd3hCUWN5V0NIQk5BUHNrSUZ6MnI1OHBMUkdWenFSWndwa3NDN0F5U1EzYWh2ZS8xWm5RWG9OK2pCekUyR0daUGtHWGJubmxZNThyNVVndStRL1A0OVdJSFJEMUtBbmdBbDRBY3NWRzkwbjluVEFOWmtPYzJ4TDF6WUdoMXdGT0lrUk9IUGRkcWluV1FJUTZ1dHJJODYxQ21BWWQ2MW93RU56MmNnK01BUzlxY0VIbXhrQkRMQXdRQ0JNSUVES3VRQXFzT0k0S1MxUFI1aUM0ZC9HWXVTLzlpV0xReCtia0pPMHVDSER1RVhEbG9MTlI5OG4xOUlsYVR3bVBDQ3Zja0FJeGlCaDhUOTRTTWphTndidnRDSVJtQ2dJNTFEbGF4dU9ENGR3Z3lDMTZwVmg2eHlOa1VNQUVORlBNd0RyZWU2MWxYUmlabmhIV21hZ3BuRklPQmRaZUhkOXU1M0VjSEE3QU5iWkFRZytDQ1NLS2loakkwb3dYMnVkN0R1RFNBak95eGJIVlBUdXVBUTRGREVPUnRnMW1mRVJOUmxPRXBNanZCWVdUSDc0YXd4WjF2QW50akdTRG9lS1RjcGlDUWpQS0FSR21Ta0E1Z3M0eVk1U1JtOEtJQjE0WUlhZ1VZcG1hZ0Z4MzcrSWNDc0VIQ293YWttZzdURTVVSlFTUndlT3VZLzFSS0FBaElndmo1aWMyQ1AyWTVDdEJoSk9HVGtERVRRU0FtU2VmL0daeW1BaUJmNWpPWVdJcG8wcXBGejFpRUFBYmgxa2Nzc0pIMko2QkxzNU5JVmtORmxOQWY0Q2lJWXloUUdIR0puR3gyTFZXRFZKODBaN1Y4UEVHWWRNcUlIQ0tBaEl6QklKZ3hzU05PYTJwU21LWTJrUmd3QkFSRmtCQVBKdk1CTmgwclVvbzRrcDF2TWlBZ2d3RlJqWGdTb21CU3FVYWRLMWFvNkFxbU11QWdJK3NCVXBqcUJFRThOcWxYSFNsYWNDcE1oWXZDQ0IrYlFWUWdZSVFnVDRFQUhGZ0xWTWtwVkk2c1NBQU5jR2JYZkVBWkkzQ25RWGdkVEFNWnNSekMrR280QllOVW9oVXpSbFk0SndJSkVlQmk1RUtaQXFCbEErc0J5aUVRa1lFRTl3d3NyQmVBVUhHN25Od3FJR25jK0tvQ0IxaFNyd2hUbUhicmFoV1QvMmphcUhORmxSZy9BMTkvbzZIdWkzUllUNzVhSThJa1BzcDhFRDgwTWNBanhCWTFVRENpTkl1em5VUTRkNHBRWlhlMXBwa01hSm9JSUVZa2FBQUo2NjBvQmZBOWRkMXZmSVJTZ2wrYmdpV2kvNFk0dXIwbFUyTVkya2xtQVFCRnV5OSs3WnVRM0JrQUFiemtiUDFjcVlJcXU0eXV3RklKWXY2RFdTSlNKcjdURVM0RGZKYUt5ZWdId2RseG5XZUZVOWo4Q2tCaG5FeUdZTy9JblIza1JBRmhHSmx6aUdFQXdwRXF0VWUxNzMySHFJQTM4dmExL00vSzlBYkNYd0wrUkxMQ21tMkN3aE5ncTdsTkE4S2F6SHhoTHF6bDZuZTZGVDBPWUFsREp0NDRnQUhjSldsa0RMTkIrWU5rcjU2NE1abSt1OThVdXZyQWljSWpnQVhCcHpjWTFGdVlITWdBQ1IzU2dFRGtXNjBZS2NEY2ZFK0RGUHY1TlloSkY1Q1NCNVpRQkNJQUFrdE9tRDhtRnRBejRUMlFPWVFEQVNCbkRuRU9BWUNqZHBoQWJ5Y05VOWkwQ0FLMkFBQ3kweUdaV2dPVVFRU1VTT2NLUnEzVXpOR2xLaFFmWSt0YTJCa01HVW5DUlBIQmdDeE1JdHJDRnpRR09GSUM5Q2lqQUFjYWI3UFNkSmdET2ptaVdvMklrVjJhME9KNU5OSlVUSVdDQ0Z1QXE5c3R5bDB6OWFvRnk3ak1DSnZkQ0NERHU0aVRuQU1ndXdGNHpweEFDakFhaUN0aHIyaFRRcDNyckphTHdkaTFOQXdJQU93PT0iLCAiZW5jb2RpbmciOiAiYmFzZTY0In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDMwMDYsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDMwMDZ9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiA0MzMuNDkyLCAicmVjZWl2ZSI6IDE0Mi41Njd9LCAicGFnZXJlZiI6ICJwYWdlQGZiOWIyNjQ3ODU1NDIwNmJlMDIwZWQ1YmRkMmIzYzE1IiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cud2VpbG9naW4uY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTU3LCAidmFsaWRUbyI6IDE2OTI2NjkxNTZ9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNToxMTo1NC4wOTFaIiwgInRpbWUiOiA1NzYuOTk2LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2ltZy9sb2dvX2NvLmdpZiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogIndlaWxvZ2luLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9pYmcvaW1nL2xvZ29fY28uZ2lmIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qLCovKjtxPTAuOCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vd2VpbG9naW4uY29tL2liZy9jbGllbnQvbF9ob21lX3AucGhwIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJpbWFnZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAic2FtZS1vcmlnaW4ifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDQ5MSwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiYWNjZXB0LXJhbmdlcyIsICJ2YWx1ZSI6ICJieXRlcyJ9LCB7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTI1OTIwMDAifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjI4MDAifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJpbWFnZS9naWYifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNToxMTo1NCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiXCI2NDE2YWFhOC1hZjBcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJGcmksIDIzIEp1biAyMDIzIDE1OjExOjU0IEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDA2OjI0OjQwIEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifV0sICJjb250ZW50IjogeyJzaXplIjogMjgwMCwgIm1pbWVUeXBlIjogImltYWdlL2dpZiIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogIlIwbEdPRGxoeXdBZkFQY0FBTzZJQUovWjRoQ2Z1RENzd1hERzFNL3M4U0NtdmUvNSttQy8wTi95OVZDNXk0L1MzcS9mNXdDQU03UFpRRUN6c3dCbWdKbG1Nd0JtbVdhejJmYkRmL0ttUVB2aHY1bk01Y3psOG4vTXpNYmljSi9QRUxMWjdPWHkrU0NtcGhDZm4rLzUrZm44NzJDZ3NPLzErZStQRUhPNTNMK2dnR0N3RS9TMVlLL2YzNTVvTU1HQ0hXQ2d2OW5Gc3ZqTGovblNuNlhTNmZMczVaL0YyZDZDQ3EvUDEvNzQ3L0w1Mzluc255QjVwdjN3MzQvRjJaYlBrNi9YdnpDWVdkK0dDbys4MGlhTXZ6Q1d4N21wYVovUHNqQ0RtQ0NHc0FOcGhYeStDcG1USGViS2drQ2daZ0NMWUtMUm4rWHl2eEJ3aUZDb2MrTENuRkNjd2hCd244L24yWERHeHN6bGY3L2Z6Sm1mRnVQajJRQjVpZExwajQzRzR2T3RVQ2FNdVkvUzBpbVB3bEM1dWRLOHBjL3M3Sm16RGFaNVRiL2ZZS3pXTU8vMTk5L3M3MENmenpDV3lkL3ZyNlJxTGZDWElPejF6d05wbkovWjJheURXYWJTSUFDTWs1cWdpZC95OGpDRHJBQjhpd0NPYlBMNS9KL0Z6eDVxaG8vS3NtQ2pzaEpyazQvSHBRQ1RnT21HQS9uMThnOW9qNkxKMUlDLzN5QjVrTC9sN0gvTTJVQ3p4Z0NaczVuTUFBQ1ptVE9aelAvLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBQUFBQUFBTEFBQUFBRExBQjhBQUFqL0FEVTRHRWh3b0FZdGJod3BYT2pJQWdVVUZTSktqUGlDb2NXTEdETnEzTWl4bzhlUElFT0tISW5Sd2FLVEtGTXVrbk5EWVEwS0pBREluRWtUQUFXU09IUHEzTW16NTBpVEtvTXVNcE1rWnMyak5uMW1SSVFvd0VXbVRqRWVZcHBBWVFDbUJ6cE9SVlQxNDFWRVNpMTIzWG1vckVlZ1FsTWlVVEVENmRHYkhKbktuVXUzNlVWRmloTGR6WnR4Z0NJQkN4bmcxUnNYNzZHUEIvQU9RSVMzc1dPK0N4OHJBcnN3d2RSRWt4a2VNSUEzYXFMUG9EOUhWWmhBc1NQR2tnMDdRcHQyMFpVSUVkaTZwUWwzWStyYmhCa08zcHViNFNHOENCaGlWa1FBNDl6aENPck9aYmlnTTJyY3VoOHovU3lac3FNRGZoc3ZjSFRidWlNRW5VL2YvMVowbVBYQ0VFMDBiQmdER3phYlFHMWNXRmhvZ1hiSDBQanpGMWNJR3ErQS9QNkpKaHhlejQxSDJIampNY1NaQUdVMTZPQ0RXUlh3WUZtU0dhREFBbDBWa0IwQzJUV255QUlOK21WZEFLWTVZdG1FWldWbG5rVWhDTkVlYkZCY1ZOOU10WVdGWUdyVy9aYVhqZ2dTRnBvQWcrVVgya0tvSVRMY2pZY2Q2VmdpQ29DWG1VWERiWGNBQVpQaEJXSlpJaXFFbWdBRmZMVGlSU2EwMXdKR004cFVvMUw5L1FXZ21vbEV0Um1CQnp3SW5JTmRXc1NaQVI0VkFDUjVCQWlaWDVkOTVxZVFqdDd4dDJkakEvQW9IWCtLR0JBb0F4MTlhWkVnWkVSZ1FrWmxKaFdXUmJ0eEN0bENDalJXS0hkUGFxUVlpbVYxaFYxamg1MklhcDJEUHYvWUZhRVhIVkFnWDRxQkJpUmxDaUN5cWlJQitBbGFBYXpaa0ZFWUVjU1EwUXMwdWJDcHA3MHAxS2xDSGhLNDE2aSszYWdJcE9LeDJpMTBrUzNxQ0tFU0hqS2FaWDRsMnFWcWpIcEg0bzVJVnBGU1N4akZFSWRHS05BMFgwZksxVFZhZE5HUzJodGpUbzVxclViVmp0Y1Z3YXB0MWUrL2RTM3dXWGFQV2NYVW5VenBtTnpGcGVwcFdBSjBPV2tBVld1azVJQkdZMktVUTAwMWVLVHRwd0R6eGhBaXdWa2JLSFdOaGdhclFxRk9leDFlZUZJYmdJNkhPYXdjeEhVaHlHaDEzUTI2WjhEalRodkNCaWdkd1lSSWRQZ3dFeGNmQ1J2YWZ0REt2RkJXcElLbFpHcUhqZjFZMnQwV1N2UzNxZlVtbVFLOU9vbkFJV1JiakFqR2lPai91T0J5cFBxOGtJNjlsWEhTQ1EwME1BUklMRWl3eHdveTdidHBzRGovaDErQWlZQmR0aVBsVXFqSTNRM203Y2k3aUFCcFFGWUpBQ21BNkZHVE4yNi9VTTFNVjlxMFdoUnNzSGtGcXlPVjVDVVFxclFHY0FZMTRRelpzQUhpaVRmd3hCUWN5V0NIQk5BUHNrSUZ6MnI1OHBMUkdWenFSWndwa3NDN0F5U1EzYWh2ZS8xWm5RWG9OK2pCekUyR0daUGtHWGJubmxZNThyNVVndStRL1A0OVdJSFJEMUtBbmdBbDRBY3NWRzkwbjluVEFOWmtPYzJ4TDF6WUdoMXdGT0lrUk9IUGRkcWluV1FJUTZ1dHJJODYxQ21BWWQ2MW93RU56MmNnK01BUzlxY0VIbXhrQkRMQXdRQ0JNSUVES3VRQXFzT0k0S1MxUFI1aUM0ZC9HWXVTLzlpV0xReCtia0pPMHVDSER1RVhEbG9MTlI5OG4xOUlsYVR3bVBDQ3Zja0FJeGlCaDhUOTRTTWphTndidnRDSVJtQ2dJNTFEbGF4dU9ENGR3Z3lDMTZwVmg2eHlOa1VNQUVORlBNd0RyZWU2MWxYUmlabmhIV21hZ3BuRklPQmRaZUhkOXU1M0VjSEE3QU5iWkFRZytDQ1NLS2loakkwb3dYMnVkN0R1RFNBak95eGJIVlBUdXVBUTRGREVPUnRnMW1mRVJOUmxPRXBNanZCWVdUSDc0YXd4WjF2QW50akdTRG9lS1RjcGlDUWpQS0FSR21Ta0E1Z3M0eVk1U1JtOEtJQjE0WUlhZ1VZcG1hZ0Z4MzcrSWNDc0VIQ293YWttZzdURTVVSlFTUndlT3VZLzFSS0FBaElndmo1aWMyQ1AyWTVDdEJoSk9HVGtERVRRU0FtU2VmL0daeW1BaUJmNWpPWVdJcG8wcXBGejFpRUFBYmgxa2Nzc0pIMko2QkxzNU5JVmtORmxOQWY0Q2lJWXloUUdIR0puR3gyTFZXRFZKODBaN1Y4UEVHWWRNcUlIQ0tBaEl6QklKZ3hzU05PYTJwU21LWTJrUmd3QkFSRmtCQVBKdk1CTmgwclVvbzRrcDF2TWlBZ2d3RlJqWGdTb21CU3FVYWRLMWFvNkFxbU11QWdJK3NCVXBqcUJFRThOcWxYSFNsYWNDcE1oWXZDQ0IrYlFWUWdZSVFnVDRFQUhGZ0xWTWtwVkk2c1NBQU5jR2JYZkVBWkkzQ25RWGdkVEFNWnNSekMrR280QllOVW9oVXpSbFk0SndJSkVlQmk1RUtaQXFCbEErc0J5aUVRa1lFRTl3d3NyQmVBVUhHN25Od3FJR25jK0tvQ0IxaFNyd2hUbUhicmFoV1QvMmphcUhORmxSZy9BMTkvbzZIdWkzUllUNzVhSThJa1BzcDhFRDgwTWNBanhCWTFVRENpTkl1em5VUTRkNHBRWlhlMXBwa01hSm9JSUVZa2FBQUo2NjBvQmZBOWRkMXZmSVJTZ2wrYmdpV2kvNFk0dXIwbFUyTVkya2xtQVFCRnV5OSs3WnVRM0JrQUFiemtiUDFjcVlJcXU0eXV3RklKWXY2RFdTSlNKcjdURVM0RGZKYUt5ZWdId2RseG5XZUZVOWo4Q2tCaG5FeUdZTy9JblIza1JBRmhHSmx6aUdFQXdwRXF0VWUxNzMySHFJQTM4dmExL00vSzlBYkNYd0wrUkxMQ21tMkN3aE5ncTdsTkE4S2F6SHhoTHF6bDZuZTZGVDBPWUFsREp0NDRnQUhjSldsa0RMTkIrWU5rcjU2NE1abSt1OThVdXZyQWljSWpnQVhCcHpjWTFGdVlITWdBQ1IzU2dFRGtXNjBZS2NEY2ZFK0RGUHY1TlloSkY1Q1NCNVpRQkNJQUFrdE9tRDhtRnRBejRUMlFPWVFEQVNCbkRuRU9BWUNqZHBoQWJ5Y05VOWkwQ0FLMkFBQ3kweUdaV2dPVVFRU1VTT2NLUnEzVXpOR2xLaFFmWSt0YTJCa01HVW5DUlBIQmdDeE1JdHJDRnpRR09GSUM5Q2lqQUFjYWI3UFNkSmdET2ptaVdvMklrVjJhME9KNU5OSlVUSVdDQ0Z1QXE5c3R5bDB6OWFvRnk3ak1DSnZkQ0NERHU0aVRuQU1ndXdGNHpweEFDakFhaUN0aHIyaFRRcDNyckphTHdkaTFOQXdJQU93PT0iLCAiZW5jb2RpbmciOiAiYmFzZTY0In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDMwMDYsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDMwMDZ9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiA0MzQuMzQyLCAicmVjZWl2ZSI6IDE0Mi42NTR9LCAicGFnZXJlZiI6ICJwYWdlQGZiOWIyNjQ3ODU1NDIwNmJlMDIwZWQ1YmRkMmIzYzE1IiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cud2VpbG9naW4uY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTU3LCAidmFsaWRUbyI6IDE2OTI2NjkxNTZ9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNToxMTo1NC4wOTFaIiwgInRpbWUiOiA1NzguMDkzLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2ltZy9pY29fYWxlcnQuZ2lmIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAid2VpbG9naW4uY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2liZy9pbWcvaWNvX2FsZXJ0LmdpZiJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogImltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLGltYWdlL3N2Zyt4bWwsaW1hZ2UvKiwqLyo7cT0wLjgifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3dlaWxvZ2luLmNvbS9pYmcvY2xpZW50L2xfaG9tZV9wLnBocCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAiaW1hZ2UifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0OTUsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2VwdC1yYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0yNTkyMDAwIn0sIHsibmFtZSI6ICJjb250ZW50LWxlbmd0aCIsICJ2YWx1ZSI6ICI2NDIifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJpbWFnZS9naWYifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNToxMTo1NCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiXCI2NDE2YjJhNy0yODJcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJGcmksIDIzIEp1biAyMDIzIDE1OjExOjU0IEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDA2OjU4OjQ3IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifV0sICJjb250ZW50IjogeyJzaXplIjogNjQyLCAibWltZVR5cGUiOiAiaW1hZ2UvZ2lmIiwgImNvbXByZXNzaW9uIjogMCwgInRleHQiOiAiUjBsR09EbGhHUUFoQU9ZQUFMRTRKYkExSWE0eUhxOHpIN0k2SjYwdkc2NHlIZnoyOWJFNEpLODBJSzR4SGZMZTI2NHdIUFhsNHJBM0krZkJ1N0k3SitDeHFkaWJrdUN0cGVmQXVzcDRhc3g3YnM2RWVPQ3dxZmpyNmRxZ2w4SmxWZTdTenZyeDcrbkd3Zm51N2RhWWp2bnc3dXJKeFBibjVQbnc3NjB1R3ZudDdMWkdNOW1nbGEwd0c3UkFMZWE4dGNadFh0K3VwcTgwSCtySnhlSzByY2gyYU5xam1idFJQK2ZBdWJFNUpmYm41ZXpOeUx4VFF2djA4OVdUaUs0ekg2MHVHZTdUejlTUWhjdDViUEhhMXJNK0svLy8vN0EySWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBQUFBQUFBTEFBQUFBQVpBQ0VBQUFmZmdFS0NnNFNGaG9lSWlZcUxqSTJKUVVPUmtwT1VsWktRbGtNQm01dVprWmlWRGdTam93aWVFSllKSnhrSHJTUXhQSm1tbGdFSGd6a2JLWmtPbVFGQWd5WXpCcDY5SG9NZk9NT1dvSlFCTDRNMk5RR1p6Sk1KTUlNTkpaN1ZrZ01vZ3lNRjNKa0RNb00zRE9TV0F6cURLK3JVbVFJVmd6VHh5L00vZ3hNSzY1VUNMQXdDNFUrZXBSMHNGaWk4SU9DZkpRTUtERXh6T0NtQWhBY1VIclFvbUk4V2gwRWh4aG1zRkVCRU5wRWRTZllZMUFGbHBXNlNmRVRBRUVGRHc1SEVjcUxLbEdDQWl3RUppS2xBQUtDbzBhTklBY3lhNUtpcDA2ZFFvd29KQkFBNyIsICJlbmNvZGluZyI6ICJiYXNlNjQifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogODQ4LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA4NDh9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiA0MzQuODksICJyZWNlaXZlIjogMTQzLjIwM30sICJwYWdlcmVmIjogInBhZ2VAZmI5YjI2NDc4NTU0MjA2YmUwMjBlZDViZGQyYjNjMTUiLCAic2VydmVySVBBZGRyZXNzIjogIjIwNC40NC45My4xNDEiLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInd3dy53ZWlsb2dpbi5jb20iLCAiaXNzdWVyIjogIlIzIiwgInZhbGlkRnJvbSI6IDE2ODQ4OTMxNTcsICJ2YWxpZFRvIjogMTY5MjY2OTE1Nn19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI0VDE1OjExOjU0LjA5MVoiLCAidGltZSI6IDU3OS4wODgsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3dlaWxvZ2luLmNvbS9pYmcvaW1nL2ljb19saW5rX2Z3Ml9wb3B1cC5naWYiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJ3ZWlsb2dpbi5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvaWJnL2ltZy9pY29fbGlua19mdzJfcG9wdXAuZ2lmIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qLCovKjtxPTAuOCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vd2VpbG9naW4uY29tL2liZy9jbGllbnQvbF9ob21lX3AucGhwIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJpbWFnZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAic2FtZS1vcmlnaW4ifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDUxMywgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiYWNjZXB0LXJhbmdlcyIsICJ2YWx1ZSI6ICJieXRlcyJ9LCB7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTI1OTIwMDAifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjc4In0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiaW1hZ2UvZ2lmIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTU6MTE6NTQgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlwiNjQxNmFhYTMtNGVcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJGcmksIDIzIEp1biAyMDIzIDE1OjExOjU0IEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDA2OjI0OjM1IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifV0sICJjb250ZW50IjogeyJzaXplIjogNzgsICJtaW1lVHlwZSI6ICJpbWFnZS9naWYiLCAiY29tcHJlc3Npb24iOiAwLCAidGV4dCI6ICJSMGxHT0RsaEVBQVFBSUFCQUR4S25BQUFBQ0g1QkFFQUFBRUFMQUFBQUFBUUFCQUFBQUlsakkrcHk2MEFvd1NKTW50dzBIb2ptRlhiWkhUVUJKcWpWSW9acG9ieS9GUW82K1I2QVFBNyIsICJlbmNvZGluZyI6ICJiYXNlNjQifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMjgyLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAyODJ9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiA0MzUuNDYxLCAicmVjZWl2ZSI6IDE0My42Mjd9LCAicGFnZXJlZiI6ICJwYWdlQGZiOWIyNjQ3ODU1NDIwNmJlMDIwZWQ1YmRkMmIzYzE1IiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cud2VpbG9naW4uY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTU3LCAidmFsaWRUbyI6IDE2OTI2NjkxNTZ9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNToxMTo1NC4wOTFaIiwgInRpbWUiOiA1ODAuMTI3OTk5OTk5OTk5OSwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vd2VpbG9naW4uY29tL2liZy9pbWcvaWNvX3N1YmhlYWRfMS5naWYiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJ3ZWlsb2dpbi5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvaWJnL2ltZy9pY29fc3ViaGVhZF8xLmdpZiJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogImltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLGltYWdlL3N2Zyt4bWwsaW1hZ2UvKiwqLyo7cT0wLjgifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3dlaWxvZ2luLmNvbS9pYmcvY2xpZW50L2xfaG9tZV9wLnBocCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAiaW1hZ2UifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA1MDMsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2VwdC1yYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0yNTkyMDAwIn0sIHsibmFtZSI6ICJjb250ZW50LWxlbmd0aCIsICJ2YWx1ZSI6ICI0MyJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogImltYWdlL2dpZiJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJXZWQsIDI0IE1heSAyMDIzIDE1OjExOjU0IEdNVCJ9LCB7Im5hbWUiOiAiZXRhZyIsICJ2YWx1ZSI6ICJcIjY0MTZhYWI1LTJiXCIifSwgeyJuYW1lIjogImV4cGlyZXMiLCAidmFsdWUiOiAiRnJpLCAyMyBKdW4gMjAyMyAxNToxMTo1NCBHTVQifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiU3VuLCAxOSBNYXIgMjAyMyAwNjoyNDo1MyBHTVQifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJuZ2lueCJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDQzLCAibWltZVR5cGUiOiAiaW1hZ2UvZ2lmIiwgImNvbXByZXNzaW9uIjogMCwgInRleHQiOiAiUjBsR09EbGhBUUFCQUlBQUFBQUFBQUFBQUNINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQ1JBRUFPdz09IiwgImVuY29kaW5nIjogImJhc2U2NCJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiAyNDcsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDI0N30sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDQzNi4wMDMsICJyZWNlaXZlIjogMTQ0LjEyNX0sICJwYWdlcmVmIjogInBhZ2VAZmI5YjI2NDc4NTU0MjA2YmUwMjBlZDViZGQyYjNjMTUiLCAic2VydmVySVBBZGRyZXNzIjogIjIwNC40NC45My4xNDEiLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInd3dy53ZWlsb2dpbi5jb20iLCAiaXNzdWVyIjogIlIzIiwgInZhbGlkRnJvbSI6IDE2ODQ4OTMxNTcsICJ2YWxpZFRvIjogMTY5MjY2OTE1Nn19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI0VDE1OjExOjU0LjA5MVoiLCAidGltZSI6IDU3MC42NjQsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3dlaWxvZ2luLmNvbS9pYmcvanMvanF1ZXJ5LTMuNS4xLmpzIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAid2VpbG9naW4uY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2liZy9qcy9qcXVlcnktMy41LjEuanMifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICIqLyoifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3dlaWxvZ2luLmNvbS9pYmcvY2xpZW50L2xfaG9tZV9wLnBocCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic2NyaXB0In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNDM3LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9NDMyMDAifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNToxMTo1NCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiVy9cIjVlZjE5ZDAxLTQ2MzhlXCIifSwgeyJuYW1lIjogImV4cGlyZXMiLCAidmFsdWUiOiAiVGh1LCAyNSBNYXkgMjAyMyAwMzoxMTo1NCBHTVQifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiVHVlLCAyMyBKdW4gMjAyMCAwNjoxMToxMyBHTVQifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJuZ2lueCJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwIn0sIHsibmFtZSI6ICJ2YXJ5IiwgInZhbHVlIjogIkFjY2VwdC1FbmNvZGluZyJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAyODc2MzAsICJtaW1lVHlwZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwgImNvbXByZXNzaW9uIjogMTg4NjYzLCAidGV4dCI6ICIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNS4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAyMC0wNS0wNFQyMjo0OVpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgZmxhdCA9IGFyci5mbGF0ID8gZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmZsYXQuY2FsbCggYXJyYXkgKTtcbn0gOiBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuY29uY2F0LmFwcGx5KCBbXSwgYXJyYXkgKTtcbn07XG5cblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nO1xuXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24oIG9iaiApIHtcblxuICAgICAgLy8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxuICAgICAgLy8gSW4gc29tZSBicm93c2VycywgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIDxvYmplY3Q+IGVsZW1lbnRzXG4gICAgICAvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9iamVjdFwiICkgPT09IFwiZnVuY3Rpb25cImApLlxuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSBcIm51bWJlclwiO1xuICB9O1xuXG5cbnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uIGlzV2luZG93KCBvYmogKSB7XG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcblx0fTtcblxuXG52YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy41LjFcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGV2ZW46IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAoIGkgKyAxICkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdG9kZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBwcm92aWRlZCBjb250ZXh0OyBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb25lXG5cdC8vIGlmIG5vdCBzcGVjaWZpZWQuXG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zLCBkb2MgKSB7XG5cdFx0RE9NRXZhbCggY29kZSwgeyBub25jZTogb3B0aW9ucyAmJiBvcHRpb25zLm5vbmNlIH0sIGRvYyApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7XG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxuXHRcdFx0aiA9IDAsXG5cdFx0XHRpID0gZmlyc3QubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcblx0XHR9XG5cblx0XHRmaXJzdC5sZW5ndGggPSBpO1xuXG5cdFx0cmV0dXJuIGZpcnN0O1xuXHR9LFxuXG5cdGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHtcblx0XHR2YXIgY2FsbGJhY2tJbnZlcnNlLFxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cblx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdGNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApO1xuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xuXHRcdFx0XHRtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0Y2hlcztcblx0fSxcblxuXHQvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XG5cdFx0dmFyIGxlbmd0aCwgdmFsdWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdHJldCA9IFtdO1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXNcblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkge1xuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCxcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBlbGVtcyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRcdHJldHVybiBmbGF0KCByZXQgKTtcblx0fSxcblxuXHQvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHNcblx0Z3VpZDogMSxcblxuXHQvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXJcblx0Ly8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC5cblx0c3VwcG9ydDogc3VwcG9ydFxufSApO1xuXG5pZiAoIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiApIHtcblx0alF1ZXJ5LmZuWyBTeW1ib2wuaXRlcmF0b3IgXSA9IGFyclsgU3ltYm9sLml0ZXJhdG9yIF07XG59XG5cbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxualF1ZXJ5LmVhY2goIFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdCggXCIgXCIgKSxcbmZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjVcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcy5mb3VuZGF0aW9uL1xuICpcbiAqIERhdGU6IDIwMjAtMDMtMTRcbiAqL1xuKCBmdW5jdGlvbiggd2luZG93ICkge1xudmFyIGksXG5cdHN1cHBvcnQsXG5cdEV4cHIsXG5cdGdldFRleHQsXG5cdGlzWE1MLFxuXHR0b2tlbml6ZSxcblx0Y29tcGlsZSxcblx0c2VsZWN0LFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdHNldERvY3VtZW50LFxuXHRkb2N1bWVudCxcblx0ZG9jRWxlbSxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0cmJ1Z2d5TWF0Y2hlcyxcblx0bWF0Y2hlcyxcblx0Y29udGFpbnMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdC8vIEluc3RhbmNlIG1ldGhvZHNcblx0aGFzT3duID0gKCB7fSApLmhhc093blByb3BlcnR5LFxuXHRhcnIgPSBbXSxcblx0cG9wID0gYXJyLnBvcCxcblx0cHVzaE5hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxuXHQvLyBodHRwczovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81XG5cdGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRsZW4gPSBsaXN0Lmxlbmd0aDtcblx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGlmICggbGlzdFsgaSBdID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58XCIgK1xuXHRcdFwiaXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lkZW50LXRva2VuLWRpYWdyYW1cblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXFteXFxcXHJcXFxcblxcXFxmXXxbXFxcXHctXXxbXlxcMC1cXFxceDdmXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV1cblx0XHQvLyBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cblx0XHQvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOlxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xuXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIrJFwiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcIiApLFxuXHRyZGVzY2VuZCA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcInw+XCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdFwiSURcIjogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiQ0xBU1NcIjogbmV3IFJlZ0V4cCggXCJeXFxcXC4oXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0XCJBVFRSXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFwiUFNFVURPXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgcHNldWRvcyApLFxuXHRcdFwiQ0hJTERcIjogbmV3IFJlZ0V4cCggXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0XCJib29sXCI6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXG5cblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaHRtbCA9IC9IVE1MJC9pLFxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHRybmF0aXZlID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXG5cdC8vIENTUyBlc2NhcGVzXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnNcblx0cnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggXCJcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3xcXFxcXFxcXChbXlxcXFxyXFxcXG5cXFxcZl0pXCIsIFwiZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBlc2NhcGUsIG5vbkhleCApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZS5zbGljZSggMSApIC0gMHgxMDAwMDtcblxuXHRcdHJldHVybiBub25IZXggP1xuXG5cdFx0XHQvLyBTdHJpcCB0aGUgYmFja3NsYXNoIHByZWZpeCBmcm9tIGEgbm9uLWhleCBlc2NhcGUgc2VxdWVuY2Vcblx0XHRcdG5vbkhleCA6XG5cblx0XHRcdC8vIFJlcGxhY2UgYSBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2Ugd2l0aCB0aGUgZW5jb2RlZCBVbmljb2RlIGNvZGUgcG9pbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTErXG5cdFx0XHQvLyBGb3IgdmFsdWVzIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAoQk1QKSwgbWFudWFsbHkgY29uc3RydWN0IGFcblx0XHRcdC8vIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRoaWdoIDwgMCA/XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvblxuXHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcblx0cmNzc2VzY2FwZSA9IC8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxcMC1cXHgxZlxceDdmLVxcdUZGRkZcXHctXS9nLFxuXHRmY3NzZXNjYXBlID0gZnVuY3Rpb24oIGNoLCBhc0NvZGVQb2ludCApIHtcblx0XHRpZiAoIGFzQ29kZVBvaW50ICkge1xuXG5cdFx0XHQvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XG5cdFx0XHRcdHJldHVybiBcIlxcdUZGRkRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHNcblx0XHRcdHJldHVybiBjaC5zbGljZSggMCwgLTEgKSArIFwiXFxcXFwiICtcblx0XHRcdFx0Y2guY2hhckNvZGVBdCggY2gubGVuZ3RoIC0gMSApLnRvU3RyaW5nKCAxNiApICsgXCIgXCI7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxuXHRcdHJldHVybiBcIlxcXFxcIiArIGNoO1xuXHR9LFxuXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXNcblx0Ly8gU2VlIHNldERvY3VtZW50KClcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9LFxuXG5cdGluRGlzYWJsZWRGaWVsZHNldCA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZmllbGRzZXRcIjtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdCggYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSApLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGVscyApICk7XG5cdFx0fSA6XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw5XG5cdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAoIHRhcmdldFsgaisrIF0gPSBlbHNbIGkrKyBdICkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKCBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdC8vIElEIHNlbGVjdG9yXG5cdFx0XHRcdGlmICggKCBtID0gbWF0Y2hbIDEgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmICggZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDIgXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKCBtID0gbWF0Y2hbIDMgXSApICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkgKSAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDggb25seVxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0XHQoIG5vZGVUeXBlICE9PSAxIHx8IGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIiApICkge1xuXG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXG5cdFx0XHRcdC8vIHFTQSBjb25zaWRlcnMgZWxlbWVudHMgb3V0c2lkZSBhIHNjb3Bpbmcgcm9vdCB3aGVuIGV2YWx1YXRpbmcgY2hpbGQgb3Jcblx0XHRcdFx0Ly8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC5cblx0XHRcdFx0Ly8gSW4gc3VjaCBjYXNlcywgd2Ugd29yayBhcm91bmQgdGhlIGJlaGF2aW9yIGJ5IHByZWZpeGluZyBldmVyeSBzZWxlY3RvciBpbiB0aGVcblx0XHRcdFx0Ly8gbGlzdCB3aXRoIGFuIElEIHNlbGVjdG9yIHJlZmVyZW5jaW5nIHRoZSBzY29wZSBjb250ZXh0LlxuXHRcdFx0XHQvLyBUaGUgdGVjaG5pcXVlIGhhcyB0byBiZSB1c2VkIGFzIHdlbGwgd2hlbiBhIGxlYWRpbmcgY29tYmluYXRvciBpcyB1c2VkXG5cdFx0XHRcdC8vIGFzIHN1Y2ggc2VsZWN0b3JzIGFyZSBub3QgcmVjb2duaXplZCBieSBxdWVyeVNlbGVjdG9yQWxsLlxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB0ZWNobmlxdWUuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHQoIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgfHwgcmNvbWJpbmF0b3JzLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblxuXHRcdFx0XHRcdC8vIFdlIGNhbiB1c2UgOnNjb3BlIGluc3RlYWQgb2YgdGhlIElEIGhhY2sgaWYgdGhlIGJyb3dzZXJcblx0XHRcdFx0XHQvLyBzdXBwb3J0cyBpdCAmIGlmIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGUgY29udGV4dC5cblx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgIT09IGNvbnRleHQgfHwgIXN1cHBvcnQuc2NvcGUgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0XHRpZiAoICggbmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApICkgKSB7XG5cdFx0XHRcdFx0XHRcdG5pZCA9IG5pZC5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAoIG5pZCA9IGV4cGFuZG8gKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdFxuXHRcdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0Z3JvdXBzWyBpIF0gPSAoIG5pZCA/IFwiI1wiICsgbmlkIDogXCI6c2NvcGVcIiApICsgXCIgXCIgK1xuXHRcdFx0XHRcdFx0XHR0b1NlbGVjdG9yKCBncm91cHNbIGkgXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCBcIixcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0bmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBuZXdTZWxlY3RvciApXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fSBjYXRjaCAoIHFzYUVycm9yICkge1xuXHRcdFx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0aWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblxuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKCBjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlICk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuICEhZm4oIGVsICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblxuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxuXHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcblx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XG5cdFx0fVxuXG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcblx0XHRlbCA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXG4gKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWRcbiAqL1xuZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHtcblx0dmFyIGFyciA9IGF0dHJzLnNwbGl0KCBcInxcIiApLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyWyBpIF0gXSA9IGhhbmRsZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcblx0dmFyIGN1ciA9IGIgJiYgYSxcblx0XHRkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0YS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cblx0Ly8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzXG5cdGlmICggZGlmZiApIHtcblx0XHRyZXR1cm4gZGlmZjtcblx0fVxuXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXG5cdGlmICggY3VyICkge1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIubmV4dFNpYmxpbmcgKSApIHtcblx0XHRcdGlmICggY3VyID09PSBiICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGEgPyAxIDogLTE7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiAoIG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiICkgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0aW5EaXNhYmxlZEZpZWxkc2V0KCBlbGVtICkgPT09IGRpc2FibGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cblx0XHQvLyBUcnkgdG8gd2lubm93IG91dCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIGRpc2FibGVkIGJlZm9yZSB0cnVzdGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkuXG5cdFx0Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0XG5cdFx0Ly8gZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuXG5cdFx0fSBlbHNlIGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5vciA6ZGlzYWJsZWRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBhcmd1bWVudCApIHtcblx0XHRhcmd1bWVudCA9ICthcmd1bWVudDtcblx0XHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoIGogPSBtYXRjaEluZGV4ZXNbIGkgXSApIF0gKSB7XG5cdFx0XHRcdFx0c2VlZFsgaiBdID0gISggbWF0Y2hlc1sgaiBdID0gc2VlZFsgaiBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxuICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkge1xuXHRyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb250ZXh0O1xufVxuXG4vLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZVxuc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307XG5cbi8qKlxuICogRGV0ZWN0cyBYTUwgbm9kZXNcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlXG4gKi9cbmlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBuYW1lc3BhY2UgPSBlbGVtLm5hbWVzcGFjZVVSSSxcblx0XHRkb2NFbGVtID0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApLmRvY3VtZW50RWxlbWVudDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PThcblx0Ly8gQXNzdW1lIEhUTUwgd2hlbiBkb2N1bWVudEVsZW1lbnQgZG9lc24ndCB5ZXQgZXhpc3QsIHN1Y2ggYXMgaW5zaWRlIGxvYWRpbmcgaWZyYW1lc1xuXHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvNDgzM1xuXHRyZXR1cm4gIXJodG1sLnRlc3QoIG5hbWVzcGFjZSB8fCBkb2NFbGVtICYmIGRvY0VsZW0ubm9kZU5hbWUgfHwgXCJIVE1MXCIgKTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIGRvYyA9PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIHByZWZlcnJlZERvYyAhPSBkb2N1bWVudCAmJlxuXHRcdCggc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgKSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxuXHRcdGlmICggc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggc3ViV2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBDaHJvbWUgPD0xNiAtIDI1IG9ubHksIEZpcmVmb3ggPD0zLjYgLSAzMSBvbmx5LFxuXHQvLyBTYWZhcmkgNCAtIDUgb25seSwgT3BlcmEgPD0xMS42IC0gMTIueCBvbmx5XG5cdC8vIElFL0VkZ2UgJiBvbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSA6c2NvcGUgcHNldWRvLWNsYXNzLlxuXHQvLyBTdXBwb3J0OiBTYWZhcmkgNi4wIG9ubHlcblx0Ly8gU2FmYXJpIDYuMCBzdXBwb3J0cyA6c2NvcGUgYnV0IGl0J3MgYW4gYWxpYXMgb2YgOnJvb3QgdGhlcmUuXG5cdHN1cHBvcnQuc2NvcGUgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblx0XHRyZXR1cm4gdHlwZW9mIGVsLnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdCFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpzY29wZSBmaWVsZHNldCBkaXZcIiApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZSggXCJjbGFzc05hbWVcIiApO1xuXHR9ICk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIFwiXCIgKSApO1xuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwiKlwiICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlkID0gZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlclsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcImlkXCIgKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZFsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyWyBcIklEXCIgXSA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmRbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1zWyBpKysgXSApICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbIFwiVEFHXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kWyBcIkNMQVNTXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoIHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgKSApIHtcblxuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdFx0dmFyIGlucHV0O1xuXG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbKl4kXT1cIiArIHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW3NlbGVjdGVkXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIn49XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0XHQvLyBJRSAxMS9FZGdlIGRvbid0IGZpbmQgZWxlbWVudHMgb24gYSBgW25hbWU9JyddYCBxdWVyeSBpbiBzb21lIGNhc2VzLlxuXHRcdFx0Ly8gQWRkaW5nIGEgdGVtcG9yYXJ5IGF0dHJpYnV0ZSB0byB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBzZWxlY3Rpb24gd29ya3Ncblx0XHRcdC8vIGFyb3VuZCB0aGUgaXNzdWUuXG5cdFx0XHQvLyBJbnRlcmVzdGluZ2x5LCBJRSAxMCAmIG9sZGVyIGRvbid0IHNlZW0gdG8gaGF2ZSB0aGUgaXNzdWUuXG5cdFx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJcIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIio9XCIgK1xuXHRcdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpjaGVja2VkXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjpjaGVja2VkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIi4jLitbK35dXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTMuNiAtIDUgb25seVxuXHRcdFx0Ly8gT2xkIEZpcmVmb3ggZG9lc24ndCB0aHJvdyBvbiBhIGJhZGx5LWVzY2FwZWQgaWRlbnRpZmllci5cblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiXFxcXFxcZlwiICk7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbXFxcXHJcXFxcblxcXFxmXVwiICk7XG5cdFx0fSApO1xuXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRcdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT1kXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjplbmFibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdFx0Ly8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzXG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZGlzYWJsZWRcIiApLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBPcGVyYSAxMCAtIDExIG9ubHlcblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIiosOnhcIiApO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiLC4qOlwiICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAoIG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvciApICkgKSApIHtcblxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBlbCwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCBcInxcIiApICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oIFwifFwiICkgKTtcblxuXHQvKiBDb250YWluc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcblxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcblx0Ly8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkgKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGIgPSBiLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoICFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUgKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBhID09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0Y29udGFpbnMoIHByZWZlcnJlZERvYywgYSApICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGIgPT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRjb250YWlucyggcHJlZmVycmVkRG9jLCBiICkgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxuXHRcdFx0YXAgPSBbIGEgXSxcblx0XHRcdGJwID0gWyBiIF07XG5cblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRyZXR1cm4gYSA9PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PSBkb2N1bWVudCA/IDEgOlxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0XHRhdXAgPyAtMSA6XG5cdFx0XHRcdGJ1cCA/IDEgOlxuXHRcdFx0XHRzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHQvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVja1xuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXG5cdFx0Y3VyID0gYTtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwWyBpIF0gPT09IGJwWyBpIF0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbIGkgXSwgYnBbIGkgXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRhcFsgaSBdID09IHByZWZlcnJlZERvYyA/IC0xIDpcblx0XHRcdGJwWyBpIF0gPT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblxuXHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBleHByLCB0cnVlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSApO1xufTtcblxuU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cblx0XHQvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNylcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxuXHRcdFx0dW5kZWZpbmVkO1xuXG5cdHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/XG5cdFx0dmFsIDpcblx0XHRzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWRvY3VtZW50SXNIVE1MID9cblx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgOlxuXHRcdFx0KCB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoIHNlbCArIFwiXCIgKS5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG59O1xuXG5TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkge1xuXHR0aHJvdyBuZXcgRXJyb3IoIFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBtc2cgKTtcbn07XG5cbi8qKlxuICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHNcbiAqL1xuU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHtcblx0dmFyIGVsZW0sXG5cdFx0ZHVwbGljYXRlcyA9IFtdLFxuXHRcdGogPSAwLFxuXHRcdGkgPSAwO1xuXG5cdC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2Vcblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcztcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiByZXN1bHRzLnNsaWNlKCAwICk7XG5cdHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXG5cdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHR3aGlsZSAoICggbm9kZSA9IGVsZW1bIGkrKyBdICkgKSB7XG5cblx0XHRcdC8vIERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzXG5cdFx0XHRyZXQgKz0gZ2V0VGV4dCggbm9kZSApO1xuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkge1xuXG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblxuXHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRyZXR1cm4gcmV0O1xufTtcblxuRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7XG5cblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcblxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcblxuXHRtYXRjaDogbWF0Y2hFeHByLFxuXG5cdGF0dHJIYW5kbGU6IHt9LFxuXG5cdGZpbmQ6IHt9LFxuXG5cdHJlbGF0aXZlOiB7XG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XG5cdH0sXG5cblx0cHJlRmlsdGVyOiB7XG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFsgMyBdID0gKCBtYXRjaFsgMyBdIHx8IG1hdGNoWyA0IF0gfHxcblx0XHRcdFx0bWF0Y2hbIDUgXSB8fCBcIlwiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMiBdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWyAzIF0gPSBcIiBcIiArIG1hdGNoWyAzIF0gKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMSBdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWyA0IF0gPSArKCBtYXRjaFsgNCBdID9cblx0XHRcdFx0XHRtYXRjaFsgNSBdICsgKCBtYXRjaFsgNiBdIHx8IDEgKSA6XG5cdFx0XHRcdFx0MiAqICggbWF0Y2hbIDMgXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWyA1IF0gPSArKCAoIG1hdGNoWyA3IF0gKyBtYXRjaFsgOCBdICkgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbIDYgXSAmJiBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwclsgXCJDSElMRFwiIF0udGVzdCggbWF0Y2hbIDAgXSApICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcblx0XHRcdGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IG1hdGNoWyA0IF0gfHwgbWF0Y2hbIDUgXSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KCBleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSApICYmXG5cblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdCggZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoICkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0xBU1NcIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XHRcdFwiKVwiICsgY2xhc3NOYW1lICsgXCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApICkgJiYgY2xhc3NDYWNoZShcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXR0ZXJuLnRlc3QoXG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHxcblx0XHRcdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gKTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBfYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkge1xuXHRcdFx0dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gXCJudGhcIixcblx0XHRcdFx0Zm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09IFwibGFzdFwiLFxuXHRcdFx0XHRvZlR5cGUgPSB3aGF0ID09PSBcIm9mLXR5cGVcIjtcblxuXHRcdFx0cmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgP1xuXG5cdFx0XHRcdC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobilcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IDpcblxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gbm9kZVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XG5cblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB4bWwgOm50aC1jaGlsZCguLi4pXG5cdFx0XHRcdFx0XHRcdC8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLilcblx0XHRcdFx0XHRcdFx0aWYgKCBkaWZmID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrK2RpZmYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRcIm5vdFwiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblxuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGkgXSA9ICEoIG1hdGNoZXNbIGkgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiaGFzXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QoIGxhbmcgfHwgXCJcIiApICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJ4bWw6bGFuZ1wiICkgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoIFwibGFuZ1wiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoICggZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSApICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJlxuXHRcdFx0XHQoICFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpICkgJiZcblx0XHRcdFx0ISEoIGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXggKTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0XCJlbmFibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLFxuXHRcdFwiZGlzYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIHRydWUgKSxcblxuXHRcdFwiY2hlY2tlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiAhIWVsZW0uY2hlY2tlZCApIHx8XG5cdFx0XHRcdCggbm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkICk7XG5cdFx0fSxcblxuXHRcdFwic2VsZWN0ZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdFwicGFyZW50XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICFFeHByLnBzZXVkb3NbIFwiZW1wdHlcIiBdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKCBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgKSA9PSBudWxsIHx8XG5cdFx0XHRcdFx0YXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIDAgXTtcblx0XHR9ICksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9ICksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0gKSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJvZGRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID9cblx0XHRcdFx0YXJndW1lbnQgKyBsZW5ndGggOlxuXHRcdFx0XHRhcmd1bWVudCA+IGxlbmd0aCA/XG5cdFx0XHRcdFx0bGVuZ3RoIDpcblx0XHRcdFx0XHRhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKVxuXHR9XG59O1xuXG5FeHByLnBzZXVkb3NbIFwibnRoXCIgXSA9IEV4cHIucHNldWRvc1sgXCJlcVwiIF07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8ICggbWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFsgMCBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICggdG9rZW5zID0gW10gKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAoIG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWyAwIF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0gKTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoICggbWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApICkgJiYgKCAhcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdCggbWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkgKSApICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0XHR0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTtcbn07XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbIGkgXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoIGVsZW1bIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoICggb2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsga2V5IF0gKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoIG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKCBuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1sgaSBdKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWyAwIF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbIGkgXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xuXHRcdHZhciB0ZW1wLCBpLCBlbGVtLFxuXHRcdFx0cHJlTWFwID0gW10sXG5cdFx0XHRwb3N0TWFwID0gW10sXG5cdFx0XHRwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxuXHRcdFx0ZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoXG5cdFx0XHRcdHNlbGVjdG9yIHx8IFwiKlwiLFxuXHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LFxuXHRcdFx0XHRbXVxuXHRcdFx0KSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRcdHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID9cblxuXHRcdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFtdIDpcblxuXHRcdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxuXHRcdFx0XHRcdHJlc3VsdHMgOlxuXHRcdFx0XHRtYXRjaGVySW47XG5cblx0XHQvLyBGaW5kIHByaW1hcnkgbWF0Y2hlc1xuXHRcdGlmICggbWF0Y2hlciApIHtcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoIGVsZW0gPSB0ZW1wWyBpIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwWyBpIF0gXSA9ICEoIG1hdGNoZXJJblsgcG9zdE1hcFsgaSBdIF0gPSBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goICggbWF0Y2hlckluWyBpIF0gPSBlbGVtICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKCBtYXRjaGVyT3V0ID0gW10gKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgJiZcblx0XHRcdFx0XHRcdCggdGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbIGkgXSApID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbIHRlbXAgXSA9ICEoIHJlc3VsdHNbIHRlbXAgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDAgXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyBcIiBcIiBdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoIGNoZWNrQ29udGV4dCA9IGNvbnRleHQgKS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggbWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaSBdLnR5cGUgXSApICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbIGkgXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1sgaSBdLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaiBdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHR0b2tlbnNcblx0XHRcdFx0XHRcdC5zbGljZSggMCwgaSAtIDEgKVxuXHRcdFx0XHRcdFx0LmNvbmNhdCggeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0gKVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKCB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsgXCJUQUdcIiBdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9ICggZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEgKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0XHRpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblxuXHRcdFx0XHRcdC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnNcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0gKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IHNldE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISggdW5tYXRjaGVkWyBpIF0gfHwgc2V0TWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFsgaSBdID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbIGkgXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZShcblx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0bWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzIClcblx0XHQpO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn07XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoIHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IgKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAoIHRva2VuID0gdG9rZW5zWyAwIF0gKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAxIF0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbIFwiSURcIiBdKCB0b2tlbi5tYXRjaGVzWyAwIF1cblx0XHRcdFx0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksIGNvbnRleHQgKSB8fCBbXSApWyAwIF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByWyBcIm5lZWRzQ29udGV4dFwiIF0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbIGkgXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAoIHR5cGUgPSB0b2tlbi50eXBlICkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICggZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdICkgKSB7XG5cblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKCBzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbIDAgXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdCkgKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdCFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBPbmUtdGltZSBhc3NpZ25tZW50c1xuXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdCggXCJcIiApLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oIFwiXCIgKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKSApICYgMTtcbn0gKTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJocmVmXCIgKSA9PT0gXCIjXCI7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIjtcblx0ZWwuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiwgXCJcIiApO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBcIlwiO1xufSApICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIF9uYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVhbnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllc1xuaWYgKCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoIFwiZGlzYWJsZWRcIiApID09IG51bGw7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdCggdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRcdG51bGw7XG5cdFx0fVxuXHR9ICk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0gKSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6emxlLmVzY2FwZTtcblxuXG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG4gIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59O1xudmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pICk7XG5cblxuXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XG5cdGlmICggaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gU2luZ2xlIGVsZW1lbnRcblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEFycmF5bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KVxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEZpbHRlcmVkIGRpcmVjdGx5IGZvciBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBzZWxlY3RvcnNcblx0cmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApO1xufVxuXG5qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7XG5cdHZhciBlbGVtID0gZWxlbXNbIDAgXTtcblxuXHRpZiAoIG5vdCApIHtcblx0XHRleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuXHR9XG5cblx0aWYgKCBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdH0gKSApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGksIHJldCxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTtcblxuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApO1xuXHR9LFxuXHRub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApO1xuXHR9LFxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiAhIXdpbm5vdyhcblx0XHRcdHRoaXMsXG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcblx0XHRcdC8vIHNvICQoXCJwOmZpcnN0XCIpLmlzKFwicDpsYXN0XCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byBcInBcIi5cblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHRzZWxlY3RvciB8fCBbXSxcblx0XHRcdGZhbHNlXG5cdFx0KS5sZW5ndGg7XG5cdH1cbn0gKTtcblxuXG4vLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdFxuXG5cbi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KVxudmFyIHJvb3RqUXVlcnksXG5cblx0Ly8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Ncblx0Ly8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKVxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAoIzExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcblx0Ly8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZFxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5XG5cdFx0Ly8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKVxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XG5cblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRpZiAoIHNlbGVjdG9yWyAwIF0gPT09IFwiPFwiICYmXG5cdFx0XHRcdHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xuXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHtcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcblx0XHRcdFx0aWYgKCBtYXRjaFsgMSBdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDtcblxuXHRcdFx0XHRcdC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxuXHRcdFx0XHRcdFx0bWF0Y2hbIDEgXSxcblx0XHRcdFx0XHRcdGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XG5cblx0XHQvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0XG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID9cblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBTaXp6bGVcblx0XHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHtcblxuXHRcdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTtcblx0fSxcblxuXHQvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXRcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnRcblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xuXHRcdH1cblxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXG5cdFx0aWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcblx0XHR9XG5cblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxuXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH1cbn0gKTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge31cblx0cmV0dXJuIGN1cjtcbn1cblxualF1ZXJ5LmVhY2goIHtcblx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdH0sXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG5cdH0sXG5cdHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiwgdW50aWwgKTtcblx0fSxcblx0bmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG5cdH0sXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xuXHR9LFxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0aWYgKCBlbGVtLmNvbnRlbnREb2N1bWVudCAhPSBudWxsICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExK1xuXHRcdFx0Ly8gPG9iamVjdD4gZWxlbWVudHMgd2l0aCBubyBgZGF0YWAgYXR0cmlidXRlIGhhcyBhbiBvYmplY3Rcblx0XHRcdC8vIGBjb250ZW50RG9jdW1lbnRgIHdpdGggYSBgbnVsbGAgcHJvdG90eXBlLlxuXHRcdFx0Z2V0UHJvdG8oIGVsZW0uY29udGVudERvY3VtZW50ICkgKSB7XG5cblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcblx0XHQvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcblx0XHQvLyBkb24ndCBzdXBwb3J0IGl0LlxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuXHRcdFx0ZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggX2ksIHR1cGxlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE1hcCB0dXBsZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dyZXNzKVxuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBpc0Z1bmN0aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdO1xuXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLm5vdGlmeSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWplY3QgfSlcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5IClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHtcblx0XHRcdFx0XHR2YXIgbWF4RGVwdGggPSAwO1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHJlc29sdmUoIGRlcHRoLCBkZWZlcnJlZCwgaGFuZGxlciwgc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBhcmd1bWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkLCB0aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuM1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBkb3VibGUtcmVzb2x1dGlvbiBhdHRlbXB0c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCA8IG1heERlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkID0gaGFuZGxlci5hcHBseSggdGhhdCwgYXJncyApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4xXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC00OFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCA9PT0gZGVmZXJyZWQucHJvbWlzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCBcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb25zIDIuMy4zLjEsIDMuNVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTc1XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXRyaWV2ZSBgdGhlbmAgb25seSBvbmNlXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGVuID0gcmV0dXJuZWQgJiZcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy40XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTY0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgY2hlY2sgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGZvciB0aGVuYWJpbGl0eVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHR5cGVvZiByZXR1cm5lZCA9PT0gXCJvYmplY3RcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiByZXR1cm5lZCA9PT0gXCJmdW5jdGlvblwiICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQudGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGEgcmV0dXJuZWQgdGhlbmFibGVcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhlbiApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdhaXQgZm9yIHJlc29sdXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVzc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heERlcHRoKys7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IElkZW50aXR5ICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgcmV0dXJuZWQgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MgPSBzcGVjaWFsID9cblx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayggZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyBlIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjFcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTdcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxuXHRcdFx0XHRcdFx0XHQvLyBzdWJzZXF1ZW50IGVycm9yc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIHN0YWNrLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luY1xuXHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSA9IGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHByb2Nlc3MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25Qcm9ncmVzcyApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIubm90aWZ5V2l0aFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAxIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvbkZ1bGZpbGxlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uRnVsZmlsbGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMiBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25SZWplY3RlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUmVqZWN0ZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0VGhyb3dlclxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxuXHRcdFx0XHQvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0XG5cdFx0XHRcdHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcblxuXHRcdC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHNcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXG5cdFx0XHRcdHN0YXRlU3RyaW5nID0gdHVwbGVbIDUgXTtcblxuXHRcdFx0Ly8gcHJvbWlzZS5wcm9ncmVzcyA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmRvbmUgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGRcblx0XHRcdHByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkO1xuXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XG5cdFx0XHRcdGxpc3QuYWRkKFxuXHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVzb2x2ZWRcIiAoaS5lLiwgZnVsZmlsbGVkKVxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlamVjdGVkXCJcblx0XHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdHJpbmc7XG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMyBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19jYWxsYmFja3MubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAyIF0ubG9jayxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmxvY2tcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdGxpc3QuYWRkKCB0dXBsZVsgMyBdLmZpcmUgKTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLm5vdGlmeVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlc29sdmVXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9XG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnlXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3RXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcblx0XHR9ICk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzaW5nbGVWYWx1ZSApIHtcblx0XHR2YXJcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXG5cdFx0XHRyZW1haW5pbmcgPSBhcmd1bWVudHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bnByb2Nlc3NlZCBhcmd1bWVudHNcblx0XHRcdGkgPSByZW1haW5pbmcsXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGZ1bGZpbGxtZW50IGRhdGFcblx0XHRcdHJlc29sdmVDb250ZXh0cyA9IEFycmF5KCBpICksXG5cdFx0XHRyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cblx0XHRcdC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWRcblx0XHRcdG1hc3RlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRtYXN0ZXIucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH07XG5cblx0XHQvLyBTaW5nbGUtIGFuZCBlbXB0eSBhcmd1bWVudHMgYXJlIGFkb3B0ZWQgbGlrZSBQcm9taXNlLnJlc29sdmVcblx0XHRpZiAoIHJlbWFpbmluZyA8PSAxICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggc2luZ2xlVmFsdWUsIG1hc3Rlci5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBtYXN0ZXIucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggbWFzdGVyLnN0YXRlKCkgPT09IFwicGVuZGluZ1wiIHx8XG5cdFx0XHRcdGlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiByZXNvbHZlVmFsdWVzWyBpIF0udGhlbiApICkge1xuXG5cdFx0XHRcdHJldHVybiBtYXN0ZXIudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgbWFzdGVyLnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBtYXN0ZXIucHJvbWlzZSgpO1xuXHR9XG59ICk7XG5cblxuLy8gVGhlc2UgdXN1YWxseSBpbmRpY2F0ZSBhIHByb2dyYW1tZXIgbWlzdGFrZSBkdXJpbmcgZGV2ZWxvcG1lbnQsXG4vLyB3YXJuIGFib3V0IHRoZW0gQVNBUCByYXRoZXIgdGhhbiBzd2FsbG93aW5nIHRoZW0gYnkgZGVmYXVsdC5cbnZhciByZXJyb3JOYW1lcyA9IC9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO1xuXG5qUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayA9IGZ1bmN0aW9uKCBlcnJvciwgc3RhY2sgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDkgb25seVxuXHQvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBhcmUgb3Blbiwgd2hpY2ggY2FuIGhhcHBlbiBhdCBhbnkgdGltZVxuXHRpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkge1xuXHRcdHdpbmRvdy5jb25zb2xlLndhcm4oIFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIgKyBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgc3RhY2sgKTtcblx0fVxufTtcblxuXG5cblxualF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oIGVycm9yICkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH0gKTtcbn07XG5cblxuXG5cbi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeVxudmFyIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cblx0cmVhZHlMaXN0XG5cdFx0LnRoZW4oIGZuIClcblxuXHRcdC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwXG5cdFx0Ly8gaGFwcGVucyBhdCB0aGUgdGltZSBvZiBlcnJvciBoYW5kbGluZyBpbnN0ZWFkIG9mIGNhbGxiYWNrXG5cdFx0Ly8gcmVnaXN0cmF0aW9uLlxuXHRcdC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkge1xuXHRcdFx0alF1ZXJ5LnJlYWR5RXhjZXB0aW9uKCBlcnJvciApO1xuXHRcdH0gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxXG5cdHJlYWR5V2FpdDogMSxcblxuXHQvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcblxuXHRcdC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHlcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcblx0XHRqUXVlcnkuaXNSZWFkeSA9IHRydWU7XG5cblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxuXHRcdGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LnJlYWR5LnRoZW4gPSByZWFkeUxpc3QudGhlbjtcblxuLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcbmZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcblx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xuXHRqUXVlcnkucmVhZHkoKTtcbn1cblxuLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWRcbi8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLlxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTAgb25seVxuLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgXCJpbnRlcmFjdGl2ZVwiIHRvbyBzb29uXG5pZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiB8fFxuXHQoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHtcblxuXHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0d2luZG93LnNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xuXG59IGVsc2Uge1xuXG5cdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXG5cdC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG59XG5cblxuXG5cbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXG52YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcblxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXG5cdGlmICggdG9UeXBlKCBrZXkgKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xuXHRcdFx0YWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyYXcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggYnVsayApIHtcblxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XG5cdFx0XHRpZiAoIHJhdyApIHtcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG5cdFx0XHRcdGZuID0gbnVsbDtcblxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVsayA9IGZuO1xuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBfa2V5LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGZuKFxuXHRcdFx0XHRcdGVsZW1zWyBpIF0sIGtleSwgcmF3ID9cblx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIGNoYWluYWJsZSApIHtcblx0XHRyZXR1cm4gZWxlbXM7XG5cdH1cblxuXHQvLyBHZXRzXG5cdGlmICggYnVsayApIHtcblx0XHRyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTtcblx0fVxuXG5cdHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG5cblxuLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG52YXIgcm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nO1xuXG4vLyBVc2VkIGJ5IGNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcbmZ1bmN0aW9uIGZjYW1lbENhc2UoIF9hbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gZWxlbS5ub2RlVHlwZSAmJlxuXHRcdFx0KCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0Ly8gSUUgPD05IHJlcGxhY2VzIDxvcHRpb24+IHRhZ3Mgd2l0aCB0aGVpciBjb250ZW50cyB3aGVuIGluc2VydGVkIG91dHNpZGUgb2Zcblx0Ly8gdGhlIHNlbGVjdCBlbGVtZW50LlxuXHRkaXYuaW5uZXJIVE1MID0gXCI8b3B0aW9uPjwvb3B0aW9uPlwiO1xuXHRzdXBwb3J0Lm9wdGlvbiA9ICEhZGl2Lmxhc3RDaGlsZDtcbn0gKSgpO1xuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbmlmICggIXN1cHBvcnQub3B0aW9uICkge1xuXHR3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb24gPSBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF07XG59XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBhdHRhY2hlZCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxudmFyXG5cdHJrZXlFdmVudCA9IC9ea2V5Lyxcblx0cm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sXG5cdHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuLy8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXMsIGV4Y2VwdCB3aGVuIHRoZXkgYXJlIG5vLW9wLlxuLy8gU28gZXhwZWN0IGZvY3VzIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBhY3RpdmUsXG4vLyBhbmQgYmx1ciB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhbHJlYWR5IGFjdGl2ZS5cbi8vIChmb2N1cyBhbmQgYmx1ciBhcmUgYWx3YXlzIHN5bmNocm9ub3VzIGluIG90aGVyIHN1cHBvcnRlZCBicm93c2Vycyxcbi8vIHRoaXMganVzdCBkZWZpbmVzIHdoZW4gd2UgY2FuIGNvdW50IG9uIGl0KS5cbmZ1bmN0aW9uIGV4cGVjdFN5bmMoIGVsZW0sIHR5cGUgKSB7XG5cdHJldHVybiAoIGVsZW0gPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgKSA9PT0gKCB0eXBlID09PSBcImZvY3VzXCIgKTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIEFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiB0aHJvdyB1bmV4cGVjdGVkbHlcbi8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM5M1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBPbmx5IGF0dGFjaCBldmVudHMgdG8gb2JqZWN0cyB0aGF0IGFjY2VwdCBkYXRhXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblxuXHRcdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICksXG5cblx0XHRcdGhhbmRsZXJzID0gKFxuXHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0XHQpWyBldmVudC50eXBlIF0gfHwgW10sXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTtcblxuXHRcdC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50XG5cdFx0YXJnc1sgMCBdID0gZXZlbnQ7XG5cblx0XHRmb3IgKCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcblxuXHRcdC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWRcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaGFuZGxlcnNcblx0XHRoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7XG5cblx0XHQvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1c1xuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcblxuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJlxuXHRcdFx0XHQhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGUgZXZlbnQgaXMgbmFtZXNwYWNlZCwgdGhlbiBlYWNoIGhhbmRsZXIgaXMgb25seSBpbnZva2VkIGlmIGl0IGlzXG5cdFx0XHRcdC8vIHNwZWNpYWxseSB1bml2ZXJzYWwgb3IgaXRzIG5hbWVzcGFjZXMgYXJlIGEgc3VwZXJzZXQgb2YgdGhlIGV2ZW50J3MuXG5cdFx0XHRcdGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgaGFuZGxlT2JqLm5hbWVzcGFjZSA9PT0gZmFsc2UgfHxcblx0XHRcdFx0XHRldmVudC5ybmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHtcblxuXHRcdFx0XHRcdGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajtcblx0XHRcdFx0XHRldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7XG5cblx0XHRcdFx0XHRyZXQgPSAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9ICkuaGFuZGxlIHx8XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlciApLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTtcblxuXHRcdFx0XHRcdGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlXG5cdFx0aWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHtcblx0XHRcdHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHRoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHtcblx0XHR2YXIgaSwgaGFuZGxlT2JqLCBzZWwsIG1hdGNoZWRIYW5kbGVycywgbWF0Y2hlZFNlbGVjdG9ycyxcblx0XHRcdGhhbmRsZXJRdWV1ZSA9IFtdLFxuXHRcdFx0ZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsXG5cdFx0XHRjdXIgPSBldmVudC50YXJnZXQ7XG5cblx0XHQvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50ICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OVxuXHRcdFx0Ly8gQmxhY2staG9sZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKHRyYWMtMTMxODApXG5cdFx0XHRjdXIubm9kZVR5cGUgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQyXG5cdFx0XHQvLyBTdXBwcmVzcyBzcGVjLXZpb2xhdGluZyBjbGlja3MgaW5kaWNhdGluZyBhIG5vbi1wcmltYXJ5IHBvaW50ZXIgYnV0dG9uICh0cmFjLTM4NjEpXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudC10eXBlLWNsaWNrXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHQvLyAuLi5idXQgbm90IGFycm93IGtleSBcImNsaWNrc1wiIG9mIHJhZGlvIGlucHV0cywgd2hpY2ggY2FuIGhhdmUgYGJ1dHRvbmAgLTEgKGdoLTIzNDMpXG5cdFx0XHQhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgZXZlbnQuYnV0dG9uID49IDEgKSApIHtcblxuXHRcdFx0Zm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4MiwgIzExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMylcblx0XHRcdFx0XHRcdHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArIFwiIFwiO1xuXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPiAtMSA6XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkSGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogbWF0Y2hlZEhhbmRsZXJzIH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzXG5cdFx0Y3VyID0gdGhpcztcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaGFuZGxlclF1ZXVlO1xuXHR9LFxuXG5cdGFkZFByb3A6IGZ1bmN0aW9uKCBuYW1lLCBob29rICkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSwgbmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblxuXHRcdFx0Z2V0OiBpc0Z1bmN0aW9uKCBob29rICkgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgcmV0dXJuVHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgZXhwZWN0U3luYyApIHtcblxuXHQvLyBNaXNzaW5nIGV4cGVjdFN5bmMgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFleHBlY3RTeW5jICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgbm90QXN5bmMsIHJlc3VsdCxcblx0XHRcdFx0c2F2ZWQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0aWYgKCAoIGV2ZW50LmlzVHJpZ2dlciAmIDEgKSAmJiB0aGlzWyB0eXBlIF0gKSB7XG5cblx0XHRcdFx0Ly8gSW50ZXJydXB0IHByb2Nlc3Npbmcgb2YgdGhlIG91dGVyIHN5bnRoZXRpYyAudHJpZ2dlcigpZWQgZXZlbnRcblx0XHRcdFx0Ly8gU2F2ZWQgZGF0YSBzaG91bGQgYmUgZmFsc2UgaW4gc3VjaCBjYXNlcywgYnV0IG1pZ2h0IGJlIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3Rcblx0XHRcdFx0Ly8gZnJvbSBhbiBhc3luYyBuYXRpdmUgaGFuZGxlciAoZ2gtNDM1MClcblx0XHRcdFx0aWYgKCAhc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHQvLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91c1xuXHRcdFx0XHRcdG5vdEFzeW5jID0gZXhwZWN0U3luYyggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdHRoaXNbIHR5cGUgXSgpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCB8fCBub3RBc3luYyApIHtcblx0XHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgZmFsc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBvdXRlciBzeW50aGV0aWMgZXZlbnRcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nIHRoZVxuXHRcdFx0XHQvLyBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCB7XG5cdFx0XHRcdFx0dmFsdWU6IGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHRcdC8vIEV4dGVuZCB3aXRoIHRoZSBwcm90b3R5cGUgdG8gcmVzZXQgdGhlIGFib3ZlIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRqUXVlcnkuZXh0ZW5kKCBzYXZlZFsgMCBdLCBqUXVlcnkuRXZlbnQucHJvdG90eXBlICksXG5cdFx0XHRcdFx0XHRzYXZlZC5zbGljZSggMSApLFxuXHRcdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIEFib3J0IGhhbmRsaW5nIG9mIHRoZSBuYXRpdmUgZXZlbnRcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y29kZTogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cblx0d2hpY2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgYnV0dG9uID0gZXZlbnQuYnV0dG9uO1xuXG5cdFx0Ly8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzXG5cdFx0aWYgKCBldmVudC53aGljaCA9PSBudWxsICYmIHJrZXlFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRyZXR1cm4gZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTtcblx0XHR9XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0XG5cdFx0aWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgJiYgcm1vdXNlRXZlbnQudGVzdCggZXZlbnQudHlwZSApICkge1xuXHRcdFx0aWYgKCBidXR0b24gJiAxICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiAyICkge1xuXHRcdFx0XHRyZXR1cm4gMztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiA0ICkge1xuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LndoaWNoO1xuXHR9XG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImZvY3VzXCIsIC4uLiApXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiYmx1clwiLCAuLi4gKVxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIGV4cGVjdFN5bmMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdGRlbGVnYXRlVHlwZTogZGVsZWdhdGVUeXBlXG5cdH07XG59ICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5nZXQoIHNyYyApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkZXN0LCBcImhhbmRsZSBldmVudHNcIiApO1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gZmxhdCggYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyAmJiAoIG5vZGUudHlwZSB8fCBcIlwiICkudG9Mb3dlckNhc2UoKSAgIT09IFwibW9kdWxlXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgJiYgIW5vZGUubm9Nb2R1bGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYywge1xuXHRcdFx0XHRcdFx0XHRcdFx0bm9uY2U6IG5vZGUubm9uY2UgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoIFwibm9uY2VcIiApXG5cdFx0XHRcdFx0XHRcdFx0fSwgZG9jICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdERPTUV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICksIG5vZGUsIGRvYyApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHtcblx0dmFyIG5vZGUsXG5cdFx0bm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLFxuXHRcdGkgPSAwO1xuXG5cdGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRpZiAoICFrZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG5vZGUucGFyZW50Tm9kZSApIHtcblx0XHRcdGlmICgga2VlcERhdGEgJiYgaXNBdHRhY2hlZCggbm9kZSApICkge1xuXHRcdFx0XHRzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0fVxuXHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0cmV0dXJuIGh0bWw7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHR2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cyxcblx0XHRcdGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSxcblx0XHRcdGluUGFnZSA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEZpeCBJRSBjbG9uaW5nIGlzc3Vlc1xuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcblx0XHRcdFx0IWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHBzOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzJcblx0XHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTtcblx0XHRcdHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7XG5cblx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lXG5cdFx0aWYgKCBkYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0aWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdFx0c3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTtcblx0XHRcdFx0ZGVzdEVsZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsIFwic2NyaXB0XCIgKTtcblx0XHRpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0XG5cdFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkge1xuXHRcdHZhciBkYXRhLCBlbGVtLCB0eXBlLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7XG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdFx0aWYgKCAoIGRhdGEgPSBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0Zm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWRcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApO1xuXHR9LFxuXG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRwcmVwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gdGhpc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0ZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50cztcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XG5cblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBlbGVtID0gdGhpc1sgMCBdIHx8IHt9LFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uaW5uZXJIVE1MO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MXG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiZcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xuXG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cdFx0XHRcdFx0XHRcdGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XG5cblx0XHRcdFx0Ly8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHR0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpZ25vcmVkID0gW107XG5cblx0XHQvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnRcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuXG5cdFx0XHRpZiAoIGpRdWVyeS5pbkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkge1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApO1xuXHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0XHRwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb25cblx0XHR9LCBpZ25vcmVkICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIHtcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXG5cdGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXG59LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBlbGVtcyxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xuXHRcdFx0ZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTtcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHQvLyAuZ2V0KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTtcblx0fTtcbn0gKTtcbnZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKD8hcHgpW2EteiVdKyRcIiwgXCJpXCIgKTtcblxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5LCBGaXJlZm94IDw9MzAgKCMxNTA5OCwgIzE0MTUwKVxuXHRcdC8vIElFIHRocm93cyBvbiBlbGVtZW50cyBjcmVhdGVkIGluIHBvcHVwc1xuXHRcdC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCBcImRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGVcIlxuXHRcdHZhciB2aWV3ID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXG5cdFx0aWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7XG5cdFx0XHR2aWV3ID0gd2luZG93O1xuXHRcdH1cblxuXHRcdHJldHVybiB2aWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0gKTtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2sgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5jYWxsKCBlbGVtICk7XG5cblx0Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD02NFxuXHRcdC8vIERvbid0IGdldCB0cmlja2VkIHdoZW4gem9vbSBhZmZlY3RzIG9mZnNldFdpZHRoIChnaC00MDI5KVxuXHRcdGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XHRzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsLCByZWxpYWJsZU1hcmdpbkxlZnRWYWwsXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLFxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHQvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50c1xuXHRpZiAoICFkaXYuc3R5bGUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcblx0XHR9LFxuXHRcdHBpeGVsQm94U3R5bGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxCb3hTdHlsZXNWYWw7XG5cdFx0fSxcblx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcblx0XHR9LFxuXHRcdHNjcm9sbGJveFNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBzY3JvbGxib3hTaXplVmFsO1xuXHRcdH0sXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBCZWhhdmlvciBpbiBJRSA5IGlzIG1vcmUgc3VidGxlIHRoYW4gaW4gbmV3ZXIgdmVyc2lvbnMgJiBpdCBwYXNzZXNcblx0XHQvLyBzb21lIHZlcnNpb25zIG9mIHRoaXMgdGVzdDsgbWFrZSBzdXJlIG5vdCB0byBtYWtlIGl0IHBhc3MgdGhlcmUhXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYmxlLCB0ciwgdHJDaGlsZCwgdHJTdHlsZTtcblx0XHRcdGlmICggcmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRhYmxlXCIgKTtcblx0XHRcdFx0dHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRyXCIgKTtcblx0XHRcdFx0dHJDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHRcdFx0XHR0YWJsZS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4XCI7XG5cdFx0XHRcdHRyLnN0eWxlLmhlaWdodCA9IFwiMXB4XCI7XG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gXCI5cHhcIjtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnRcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRhYmxlIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyQ2hpbGQgKTtcblxuXHRcdFx0XHR0clN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIHRyICk7XG5cdFx0XHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID0gcGFyc2VJbnQoIHRyU3R5bGUuaGVpZ2h0ICkgPiAzO1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggdGFibGUgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbDtcblx0XHR9XG5cdH0gKTtcbn0gKSgpO1xuXG5cbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDUxK1xuXHRcdC8vIFJldHJpZXZpbmcgc3R5bGUgYmVmb3JlIGNvbXB1dGVkIHNvbWVob3dcblx0XHQvLyBmaXhlcyBhbiBpc3N1ZSB3aXRoIGdldHRpbmcgd3JvbmcgdmFsdWVzXG5cdFx0Ly8gb24gZGV0YWNoZWQgZWxlbWVudHNcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0Y29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTtcblxuXHQvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG5lZWRlZCBmb3I6XG5cdC8vICAgLmNzcygnZmlsdGVyJykgKElFIDkgb25seSwgIzEyNTM3KVxuXHQvLyAgIC5jc3MoJy0tY3VzdG9tUHJvcGVydHkpICgjMzE0NClcblx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRyZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTtcblxuXHRcdGlmICggcmV0ID09PSBcIlwiICYmICFpc0F0dGFjaGVkKCBlbGVtICkgKSB7XG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXG5cdFx0Ly8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy5cblx0XHQvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6XG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsQm94U3R5bGVzKCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJib3hTdHlsZS50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhciBjc3NQcmVmaXhlcyA9IFsgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiIF0sXG5cdGVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkuc3R5bGUsXG5cdHZlbmRvclByb3BzID0ge307XG5cbi8vIFJldHVybiBhIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBvciB1bmRlZmluZWRcbmZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1lICkge1xuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG4vLyBSZXR1cm4gYSBwb3RlbnRpYWxseS1tYXBwZWQgalF1ZXJ5LmNzc1Byb3BzIG9yIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gZmluYWxQcm9wTmFtZSggbmFtZSApIHtcblx0dmFyIGZpbmFsID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgdmVuZG9yUHJvcHNbIG5hbWUgXTtcblxuXHRpZiAoIGZpbmFsICkge1xuXHRcdHJldHVybiBmaW5hbDtcblx0fVxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXHRyZXR1cm4gdmVuZG9yUHJvcHNbIG5hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBuYW1lICkgfHwgbmFtZTtcbn1cblxuXG52YXJcblxuXHQvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlXG5cdC8vIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxuXHQvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXlcblx0cmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFxuXHRyY3VzdG9tUHJvcCA9IC9eLS0vLFxuXHRjc3NTaG93ID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfSxcblx0Y3NzTm9ybWFsVHJhbnNmb3JtID0ge1xuXHRcdGxldHRlclNwYWNpbmc6IFwiMFwiLFxuXHRcdGZvbnRXZWlnaHQ6IFwiNDAwXCJcblx0fTtcblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIF9lbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YTtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXG5cdHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTQzMjIpLlxuXHRcdC8vIEZha2UgY29udGVudC1ib3ggdW50aWwgd2Uga25vdyBpdCdzIG5lZWRlZCB0byBrbm93IHRoZSB0cnVlIHZhbHVlLlxuXHRcdGJveFNpemluZ05lZWRlZCA9ICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgZXh0cmEsXG5cdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94LFxuXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdG9mZnNldFByb3AgPSBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApO1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHQvLyBSZXR1cm4gYSBjb25mb3VuZGluZyBub24tcGl4ZWwgdmFsdWUgb3IgZmVpZ24gaWdub3JhbmNlLCBhcyBhcHByb3ByaWF0ZS5cblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0aWYgKCAhZXh0cmEgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblx0XHR2YWwgPSBcImF1dG9cIjtcblx0fVxuXG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gVXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3Igd2hlbiBib3ggc2l6aW5nIGlzIHVucmVsaWFibGUuXG5cdC8vIEluIHRob3NlIGNhc2VzLCB0aGUgY29tcHV0ZWQgdmFsdWUgY2FuIGJlIHRydXN0ZWQgdG8gYmUgYm9yZGVyLWJveC5cblx0aWYgKCAoICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgJiYgaXNCb3JkZXJCb3ggfHxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDEwIC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBJbnRlcmVzdGluZ2x5LCBpbiBzb21lIGNhc2VzIElFIDkgZG9lc24ndCBzdWZmZXIgZnJvbSB0aGlzIGlzc3VlLlxuXHRcdCFzdXBwb3J0LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkgJiYgbm9kZU5hbWUoIGVsZW0sIFwidHJcIiApIHx8XG5cblx0XHQvLyBGYWxsIGJhY2sgdG8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IHdoZW4gdmFsdWUgaXMgXCJhdXRvXCJcblx0XHQvLyBUaGlzIGhhcHBlbnMgZm9yIGlubGluZSBlbGVtZW50cyB3aXRoIG5vIGV4cGxpY2l0IHNldHRpbmcgKGdoLTM1NzEpXG5cdFx0dmFsID09PSBcImF1dG9cIiB8fFxuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSAtIDQuMyBvbmx5XG5cdFx0Ly8gQWxzbyB1c2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciBtaXNyZXBvcnRlZCBpbmxpbmUgZGltZW5zaW9ucyAoZ2gtMzYwMilcblx0XHQhcGFyc2VGbG9hdCggdmFsICkgJiYgalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJpbmxpbmVcIiApICYmXG5cblx0XHQvLyBNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSAmIGNvbm5lY3RlZFxuXHRcdGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0XHQvLyBXaGVyZSBhdmFpbGFibGUsIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBhcHByb3hpbWF0ZSBib3JkZXIgYm94IGRpbWVuc2lvbnMuXG5cdFx0Ly8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZVxuXHRcdC8vIHJldHJpZXZlZCB2YWx1ZSBhcyBhIGNvbnRlbnQgYm94IGRpbWVuc2lvbi5cblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gb2Zmc2V0UHJvcCBpbiBlbGVtO1xuXHRcdGlmICggdmFsdWVJc0JvcmRlckJveCApIHtcblx0XHRcdHZhbCA9IGVsZW1bIG9mZnNldFByb3AgXTtcblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgXCJcIiBhbmQgYXV0b1xuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXG5cdC8vIEFkanVzdCBmb3IgdGhlIGVsZW1lbnQncyBib3ggbW9kZWxcblx0cmV0dXJuICggdmFsICtcblx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcblx0XHRcdHN0eWxlcyxcblxuXHRcdFx0Ly8gUHJvdmlkZSB0aGUgY3VycmVudCBjb21wdXRlZCBzaXplIHRvIHJlcXVlc3Qgc2Nyb2xsIGd1dHRlciBjYWxjdWxhdGlvbiAoZ2gtMzU4OSlcblx0XHRcdHZhbFxuXHRcdClcblx0KSArIFwicHhcIjtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwiZ3JpZEFyZWFcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5cIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5FbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5TdGFydFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1wiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd0VuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1N0YXJ0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge30sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHQvLyBUaGUgaXNDdXN0b21Qcm9wIGNoZWNrIGNhbiBiZSByZW1vdmVkIGluIGpRdWVyeSA0LjAgd2hlbiB3ZSBvbmx5IGF1dG8tYXBwZW5kXG5cdFx0XHQvLyBcInB4XCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBfaSwgZGltZW5zaW9uICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIGRpbWVuc2lvbiBdID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XG5cdFx0XHRcdHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApICYmXG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCtcblx0XHRcdFx0XHQvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16ZXJvIG9mZnNldFdpZHRoICYgemVyb1xuXHRcdFx0XHRcdC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlzIGNoYW5nZWQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0XHRcdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZVxuXHRcdFx0XHRcdC8vIGluIElFIHRocm93cyBhbiBlcnJvci5cblx0XHRcdFx0XHQoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICkgP1xuXHRcdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHRcdFx0Ly8gT25seSByZWFkIHN0eWxlcy5wb3NpdGlvbiBpZiB0aGUgdGVzdCBoYXMgYSBjaGFuY2UgdG8gZmFpbFxuXHRcdFx0XHQvLyB0byBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LlxuXHRcdFx0XHRzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiZcblx0XHRcdFx0XHRzdHlsZXMucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIixcblxuXHRcdFx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC0zOTkxKVxuXHRcdFx0XHRib3hTaXppbmdOZWVkZWQgPSBzY3JvbGxib3hTaXplQnVnZ3kgfHwgZXh0cmEsXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSA/XG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcdGRpbWVuc2lvbixcblx0XHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0XHQpIDpcblx0XHRcdFx0XHQwO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB1bnJlbGlhYmxlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBieSBjb21wYXJpbmcgb2Zmc2V0KiB0byBjb21wdXRlZCBhbmRcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXG5cdFx0XHRpZiAoIGlzQm9yZGVyQm94ICYmIHNjcm9sbGJveFNpemVCdWdneSApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0XHRqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSB8fFxuXHRcdFx0XHRcdHR3ZWVuLmVsZW0uc3R5bGVbIGZpbmFsUHJvcE5hbWUoIHR3ZWVuLnByb3AgKSBdICE9IG51bGwgKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZWFzaW5nID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcblx0fSxcblx0X2RlZmF1bHQ6IFwic3dpbmdcIlxufTtcblxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XG5cbi8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50XG5qUXVlcnkuZnguc3RlcCA9IHt9O1xuXG5cblxuXG52YXJcblx0ZnhOb3csIGluUHJvZ3Jlc3MsXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxuXHRycnVuID0gL3F1ZXVlSG9va3MkLztcblxuZnVuY3Rpb24gc2NoZWR1bGUoKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRpZiAoIGRvY3VtZW50LmhpZGRlbiA9PT0gZmFsc2UgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcblx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBzY2hlZHVsZSwgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdFx0fVxuXG5cdFx0alF1ZXJ5LmZ4LnRpY2soKTtcblx0fVxufVxuXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9ICk7XG5cdHJldHVybiAoIGZ4Tm93ID0gRGF0ZS5ub3coKSApO1xufVxuXG4vLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvblxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcblx0dmFyIHdoaWNoLFxuXHRcdGkgPSAwLFxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcblxuXHQvLyBJZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XG5cdGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwO1xuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7XG5cdFx0d2hpY2ggPSBjc3NFeHBhbmRbIGkgXTtcblx0XHRhdHRyc1sgXCJtYXJnaW5cIiArIHdoaWNoIF0gPSBhdHRyc1sgXCJwYWRkaW5nXCIgKyB3aGljaCBdID0gdHlwZTtcblx0fVxuXG5cdGlmICggaW5jbHVkZVdpZHRoICkge1xuXHRcdGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7XG5cdH1cblxuXHRyZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkge1xuXHR2YXIgdHdlZW4sXG5cdFx0Y29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgXCIqXCIgXSApLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkge1xuXG5cdFx0XHQvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eVxuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHtcblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIGhvb2tzLCBvbGRmaXJlLCBwcm9wVHdlZW4sIHJlc3RvcmVEaXNwbGF5LCBkaXNwbGF5LFxuXHRcdGlzQm94ID0gXCJ3aWR0aFwiIGluIHByb3BzIHx8IFwiaGVpZ2h0XCIgaW4gcHJvcHMsXG5cdFx0YW5pbSA9IHRoaXMsXG5cdFx0b3JpZyA9IHt9LFxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcblx0XHRoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApLFxuXHRcdGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cblx0Ly8gUXVldWUtc2tpcHBpbmcgYW5pbWF0aW9ucyBoaWphY2sgdGhlIGZ4IGhvb2tzXG5cdGlmICggIW9wdHMucXVldWUgKSB7XG5cdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIFwiZnhcIiApO1xuXHRcdGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHtcblx0XHRcdGhvb2tzLnVucXVldWVkID0gMDtcblx0XHRcdG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlO1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICFob29rcy51bnF1ZXVlZCApIHtcblx0XHRcdFx0XHRvbGRmaXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdGhvb2tzLnVucXVldWVkKys7XG5cblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzXG5cdFx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGhvb2tzLnVucXVldWVkLS07XG5cdFx0XHRcdGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgXCJmeFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIERldGVjdCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSBcInNob3dcIiBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3RvcHBlZCBzaG93L2hpZGVcblx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJzaG93XCIgJiYgZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IHRydWU7XG5cblx0XHRcdFx0Ly8gSWdub3JlIGFsbCBvdGhlciBuby1vcCBzaG93L2hpZGUgZGF0YVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEJhaWwgb3V0IGlmIHRoaXMgaXMgYSBuby1vcCBsaWtlIC5oaWRlKCkuaGlkZSgpXG5cdHByb3BUd2VlbiA9ICFqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTtcblx0aWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVzdHJpY3QgXCJvdmVyZmxvd1wiIGFuZCBcImRpc3BsYXlcIiBzdHlsZXMgZHVyaW5nIGJveCBhbmltYXRpb25zXG5cdGlmICggaXNCb3ggJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90IGluZmVyIHRoZSBzaG9ydGhhbmRcblx0XHQvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSBhbmQgRWRnZSBqdXN0IG1pcnJvcnNcblx0XHQvLyB0aGUgb3ZlcmZsb3dYIHZhbHVlIHRoZXJlLlxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xuXG5cdFx0Ly8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlXG5cdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhU2hvdyAmJiBkYXRhU2hvdy5kaXNwbGF5O1xuXHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdH1cblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSApIHtcblx0XHRcdFx0ZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBHZXQgbm9uZW1wdHkgdmFsdWUocykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSB8fCByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFuaW1hdGUgaW5saW5lIGVsZW1lbnRzIGFzIGlubGluZS1ibG9ja1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJpbmxpbmVcIiB8fCBkaXNwbGF5ID09PSBcImlubGluZS1ibG9ja1wiICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZmxvYXRcIiApID09PSBcIm5vbmVcIiApIHtcblxuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRcdFx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0ZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7XG5cdFx0XHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID8gXCJcIiA6IGRpc3BsYXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggb3B0cy5vdmVyZmxvdyApIHtcblx0XHRzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdHByb3BUd2VlbiA9IGZhbHNlO1xuXHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cblx0XHQvLyBHZW5lcmFsIHNob3cvaGlkZSBzZXR1cCBmb3IgdGhpcyBlbGVtZW50IGFuaW1hdGlvblxuXHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdGlmICggZGF0YVNob3cgKSB7XG5cdFx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBcImZ4c2hvd1wiLCB7IGRpc3BsYXk6IHJlc3RvcmVEaXNwbGF5IH0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RvcmUgaGlkZGVuL3Zpc2libGUgZm9yIHRvZ2dsZSBzbyBgLnN0b3AoKS50b2dnbGUoKWAgXCJyZXZlcnNlc1wiXG5cdFx0XHRpZiAoIHRvZ2dsZSApIHtcblx0XHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2hvdyBlbGVtZW50cyBiZWZvcmUgYW5pbWF0aW5nIHRoZW1cblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdHJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcblx0fVxuXG5cdC8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdGFuaW1hdGlvblxuXHRcdC5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKVxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxuXHRcdC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApO1xuXG5cdGpRdWVyeS5meC50aW1lcihcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxuXHRcdFx0cXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlXG5cdFx0fSApXG5cdCk7XG5cblx0cmV0dXJuIGFuaW1hdGlvbjtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXG5cdHR3ZWVuZXJzOiB7XG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcblx0XHRcdGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApO1xuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH0gXVxuXHR9LFxuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdC8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZlxuXHRpZiAoIGpRdWVyeS5meC5vZmYgKSB7XG5cdFx0b3B0LmR1cmF0aW9uID0gMDtcblxuXHR9IGVsc2Uge1xuXHRcdGlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdGlmICggb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgKSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcblx0XHRvcHQucXVldWUgPSBcImZ4XCI7XG5cdH1cblxuXHQvLyBRdWV1ZWluZ1xuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xuXG5cdG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSBcImJvb2xlYW5cIiA/XG5cdFx0XHRjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOlxuXHRcdFx0dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG4vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zXG5qUXVlcnkuZWFjaCgge1xuXHRzbGlkZURvd246IGdlbkZ4KCBcInNob3dcIiApLFxuXHRzbGlkZVVwOiBnZW5GeCggXCJoaWRlXCIgKSxcblx0c2xpZGVUb2dnbGU6IGdlbkZ4KCBcInRvZ2dsZVwiICksXG5cdGZhZGVJbjogeyBvcGFjaXR5OiBcInNob3dcIiB9LFxuXHRmYWRlT3V0OiB7IG9wYWNpdHk6IFwiaGlkZVwiIH0sXG5cdGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogXCJ0b2dnbGVcIiB9XG59LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkudGltZXJzID0gW107XG5qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZXIsXG5cdFx0aSA9IDAsXG5cdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycztcblxuXHRmeE5vdyA9IERhdGUubm93KCk7XG5cblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xuXHRcdHRpbWVyID0gdGltZXJzWyBpIF07XG5cblx0XHQvLyBSdW4gdGhlIHRpbWVyIGFuZCBzYWZlbHkgcmVtb3ZlIGl0IHdoZW4gZG9uZSAoYWxsb3dpbmcgZm9yIGV4dGVybmFsIHJlbW92YWwpXG5cdFx0aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7XG5cdFx0XHR0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoICF0aW1lcnMubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5meC5zdG9wKCk7XG5cdH1cblx0ZnhOb3cgPSB1bmRlZmluZWQ7XG59O1xuXG5qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7XG5cdGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTtcblx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG59O1xuXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aW5Qcm9ncmVzcyA9IHRydWU7XG5cdHNjaGVkdWxlKCk7XG59O1xuXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRpblByb2dyZXNzID0gbnVsbDtcbn07XG5cbmpRdWVyeS5meC5zcGVlZHMgPSB7XG5cdHNsb3c6IDYwMCxcblx0ZmFzdDogMjAwLFxuXG5cdC8vIERlZmF1bHQgc3BlZWRcblx0X2RlZmF1bHQ6IDQwMFxufTtcblxuXG4vLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uXG4vLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5L1xualF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7XG5cdHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7XG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xuXHRcdHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTtcblx0XHRob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0fTtcblx0fSApO1xufTtcblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKSxcblx0XHRzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNlbGVjdFwiICksXG5cdFx0b3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9wdGlvblwiICkgKTtcblxuXHRpbnB1dC50eXBlID0gXCJjaGVja2JveFwiO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seVxuXHQvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSBcIm9uXCJcblx0c3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09IFwiXCI7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0XG5cdHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXG5cdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdGlucHV0LnZhbHVlID0gXCJ0XCI7XG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XG5cdHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSBcInRcIjtcbn0gKSgpO1xuXG5cbnZhciBib29sSG9vayxcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHQvLyBBdHRyaWJ1dGUgaG9va3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXHRcdFx0aG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArIFwiXCIgKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxuXHRcdHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDtcblx0fSxcblxuXHRhdHRySG9va3M6IHtcblx0XHR0eXBlOiB7XG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSBcInJhZGlvXCIgJiZcblx0XHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XG5cdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHR2YXIgbmFtZSxcblx0XHRcdGkgPSAwLFxuXG5cdFx0XHQvLyBBdHRyaWJ1dGUgbmFtZXMgY2FuIGNvbnRhaW4gbm9uLUhUTUwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG5cdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNhdHRyaWJ1dGVzLTJcblx0XHRcdGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cblx0XHRpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0d2hpbGUgKCAoIG5hbWUgPSBhdHRyTmFtZXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXNcbmJvb2xIb29rID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHtcblx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZVxuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cbn07XG5cbmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1xcdysvZyApLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlLFxuXHRcdFx0bG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdGxvd2VyY2FzZU5hbWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTQxMTE2MjMzMzQ3L2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvXG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkge1xuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgaXNWYWxpZFZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7XG5cblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cdFx0XHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdFx0XHR3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IChcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0XHQpWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBpc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG4vLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcbi8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG4vL1xuLy8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG4vLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cyxcbi8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcbmlmICggIXN1cHBvcnQuZm9jdXNpbiApIHtcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7XG5cdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBIYW5kbGU6IHJlZ3VsYXIgbm9kZXMgKHZpYSBgdGhpcy5vd25lckRvY3VtZW50YCksIHdpbmRvd1xuXHRcdFx0XHQvLyAodmlhIGB0aGlzLmRvY3VtZW50YCkgJiBkb2N1bWVudCAodmlhIGB0aGlzYCkuXG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKSAtIDE7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSApO1xufVxudmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuXG52YXIgbm9uY2UgPSB7IGd1aWQ6IERhdGUubm93KCkgfTtcblxudmFyIHJxdWVyeSA9ICggL1xcPy8gKTtcblxuXG5cbi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmdcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHR2YXIgeG1sO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0eG1sID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiICkubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyBkYXRhICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApXG5cdFx0LmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKVxuXHRcdC5tYXAoIGZ1bmN0aW9uKCBfaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdH0gKS5nZXQoKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyMjAgPSAvJTIwL2csXG5cdHJoYXNoID0gLyMuKiQvLFxuXHRyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblx0b3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzICM5ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcblxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gPVxuXHRcdFx0XHRcdFx0XHRcdFx0KCByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gfHwgW10gKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuY29uY2F0KCBtYXRjaFsgMiBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSArIFwiIFwiIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoLmpvaW4oIFwiLCBcIiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGxldGVkID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSA9XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XG5cdFx0XHRcdGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcblx0XHRcdFx0XHRcdHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XG5cblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxuXHRcdC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZVxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCAjMTIwMDRcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdFxuXHRcdHMuZGF0YVR5cGVzID0gKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XG5cdFx0XHR1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0XHQvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLFxuXHRcdFx0Ly8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4L1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSBzLnVybDtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSBvbmx5XG5cdFx0XHRcdC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlXG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gdXJsQW5jaG9yLmhyZWY7XG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT1cblx0XHRcdFx0XHR1cmxBbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyB1cmxBbmNob3IuaG9zdDtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLFxuXHRcdFx0XHQvLyBpdCBjYW4gYmUgcmVqZWN0ZWQgYnkgdGhlIHRyYW5zcG9ydCBpZiBpdCBpcyBpbnZhbGlkXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZ1xuXHRcdGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xuXHRcdGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcblx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdHJldHVybiBqcVhIUjtcblx0XHR9XG5cblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RhcnRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFVwcGVyY2FzZSB0aGUgdHlwZVxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnRcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcblxuXHRcdC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZVxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxuXHRcdC8vIFJlbW92ZSBoYXNoIHRvIHNpbXBsaWZ5IHVybCBtYW5pcHVsYXRpb25cblx0XHRjYWNoZVVSTCA9IHMudXJsLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrXG5cdFx0XHR1bmNhY2hlZCA9IHMudXJsLnNsaWNlKCBjYWNoZVVSTC5sZW5ndGggKTtcblxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQsIGFwcGVuZCBkYXRhIHRvIHVybFxuXHRcdFx0aWYgKCBzLmRhdGEgJiYgKCBzLnByb2Nlc3NEYXRhIHx8IHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgKSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YTtcblxuXHRcdFx0XHQvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdGNhY2hlVVJMID0gY2FjaGVVUkwucmVwbGFjZSggcmFudGlDYWNoZSwgXCIkMVwiICk7XG5cdFx0XHRcdHVuY2FjaGVkID0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArICggbm9uY2UuZ3VpZCsrICkgK1xuXHRcdFx0XHRcdHVuY2FjaGVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpXG5cdFx0XHRzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7XG5cblx0XHQvLyBDaGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAoZ2gtMjY1OClcblx0XHR9IGVsc2UgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJlxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XG5cdFx0XHRzLmRhdGEgPSBzLmRhdGEucmVwbGFjZSggcjIwLCBcIitcIiApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBjb21wbGV0ZWQgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XG5cdFx0anFYSFIuZG9uZSggcy5zdWNjZXNzICk7XG5cdFx0anFYSFIuZmFpbCggcy5lcnJvciApO1xuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb21wbGV0ZWQgPSBmYWxzZTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgb3RoZXJzIGFzIHJlc3VsdHNcblx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBJZ25vcmUgcmVwZWF0IGludm9jYXRpb25zXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21wbGV0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVc2UgYSBub29wIGNvbnZlcnRlciBmb3IgbWlzc2luZyBzY3JpcHRcblx0XHRcdGlmICggIWlzU3VjY2VzcyAmJiBqUXVlcnkuaW5BcnJheSggXCJzY3JpcHRcIiwgcy5kYXRhVHlwZXMgKSA+IC0xICkge1xuXHRcdFx0XHRzLmNvbnZlcnRlcnNbIFwidGV4dCBzY3JpcHRcIiBdID0gZnVuY3Rpb24oKSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggX2ksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGRhdGEgKSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybClcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHR2YXIgaTtcblx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0aWYgKCBpLnRvTG93ZXJDYXNlKCkgPT09IFwiY29udGVudC10eXBlXCIgKSB7XG5cdFx0XHRzLmNvbnRlbnRUeXBlID0gcy5oZWFkZXJzWyBpIF0gfHwgXCJcIjtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsLCBvcHRpb25zLCBkb2MgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucywgZG9jICk7XG5cdFx0fVxuXHR9ICk7XG59O1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIHdyYXA7XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbElzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCBcImJvZHlcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7XG59O1xuXG5cblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdC8vICMxNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub250aW1lb3V0ID1cblx0XHRcdFx0XHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSB4aHIub250aW1lb3V0ID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKVxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTtcblx0fVxufSApO1xuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIG9yIGZvcmNlZC1ieS1hdHRycyByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gfHwgcy5zY3JpcHRBdHRycyApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApXG5cdFx0XHRcdFx0LmF0dHIoIHMuc2NyaXB0QXR0cnMgfHwge30gKVxuXHRcdFx0XHRcdC5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9IClcblx0XHRcdFx0XHQub24oIFwibG9hZCBlcnJvclwiLCBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UuZ3VpZCsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCB0eXBlb2YgcHJvcHMudG9wID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRwcm9wcy50b3AgKz0gXCJweFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCB0eXBlb2YgcHJvcHMubGVmdCA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0cHJvcHMubGVmdCArPSBcInB4XCI7XG5cdFx0XHR9XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBfaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCggeyBwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCBcIlwiOiBcIm91dGVyXCIgKyBuYW1lIH0sXG5cdFx0ZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoIFwib3V0ZXJcIiApID09PSAwID9cblx0XHRcdFx0XHRcdGVsZW1bIFwiaW5uZXJcIiArIG5hbWUgXSA6XG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggX2ksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9LFxuXG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggKCBcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiICkuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblxuXHRcdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdFx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgP1xuXHRcdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdFx0fTtcblx0fSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcbi8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxudmFyIHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5qUXVlcnkudHJpbSA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcIlwiIDpcblx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcbn07XG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KVxuaWYgKCB0eXBlb2Ygbm9HbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcbn1cblxuXG5cblxucmV0dXJuIGpRdWVyeTtcbn0gKTtcbiJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiA5ODk2NywgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogOTg5Njd9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAyNzguNjUxLCAicmVjZWl2ZSI6IDI5Mi4wMTN9LCAicGFnZXJlZiI6ICJwYWdlQGZiOWIyNjQ3ODU1NDIwNmJlMDIwZWQ1YmRkMmIzYzE1IiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cud2VpbG9naW4uY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTU3LCAidmFsaWRUbyI6IDE2OTI2NjkxNTZ9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNToxMTo1NC4wOTFaIiwgInRpbWUiOiA1ODEuODY1LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2pzL3Z1ZS5qcyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogIndlaWxvZ2luLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9pYmcvanMvdnVlLmpzIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiKi8qIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2NsaWVudC9sX2hvbWVfcC5waHAifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInNjcmlwdCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAic2FtZS1vcmlnaW4ifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDQxOSwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTQzMjAwIn0sIHsibmFtZSI6ICJjb250ZW50LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0In0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTU6MTE6NTQgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCI2MDg5NDMyZS01Mzg4MlwiIn0sIHsibmFtZSI6ICJleHBpcmVzIiwgInZhbHVlIjogIlRodSwgMjUgTWF5IDIwMjMgMDM6MTE6NTQgR01UIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIldlZCwgMjggQXByIDIwMjEgMTE6MTI6NDYgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogMzQyMTQ2LCAibWltZVR5cGUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsICJjb21wcmVzc2lvbiI6IDIzNTU3MiwgInRleHQiOiAiLyohXG4gKiBWdWUuanMgdjIuNi4xMVxuICogKGMpIDIwMTQtMjAxOSBFdmFuIFlvdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLlZ1ZSA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qICAqL1xuXG4gIHZhciBlbXB0eU9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuXG4gIC8vIFRoZXNlIGhlbHBlcnMgcHJvZHVjZSBiZXR0ZXIgVk0gY29kZSBpbiBKUyBlbmdpbmVzIGR1ZSB0byB0aGVpclxuICAvLyBleHBsaWNpdG5lc3MgYW5kIGZ1bmN0aW9uIGlubGluaW5nLlxuICBmdW5jdGlvbiBpc1VuZGVmICh2KSB7XG4gICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBpc0RlZiAodikge1xuICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gaXNUcnVlICh2KSB7XG4gICAgcmV0dXJuIHYgPT09IHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRmFsc2UgKHYpIHtcbiAgICByZXR1cm4gdiA9PT0gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB2YWx1ZSBpcyBwcmltaXRpdmUuXG4gICAqL1xuICBmdW5jdGlvbiBpc1ByaW1pdGl2ZSAodmFsdWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnIHx8XG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWljayBvYmplY3QgY2hlY2sgLSB0aGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHRlbGxcbiAgICogT2JqZWN0cyBmcm9tIHByaW1pdGl2ZSB2YWx1ZXMgd2hlbiB3ZSBrbm93IHRoZSB2YWx1ZVxuICAgKiBpcyBhIEpTT04tY29tcGxpYW50IHR5cGUuXG4gICAqL1xuICBmdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmF3IHR5cGUgc3RyaW5nIG9mIGEgdmFsdWUsIGUuZy4sIFtvYmplY3QgT2JqZWN0XS5cbiAgICovXG4gIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gIGZ1bmN0aW9uIHRvUmF3VHlwZSAodmFsdWUpIHtcbiAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKVxuICB9XG5cbiAgLyoqXG4gICAqIFN0cmljdCBvYmplY3QgdHlwZSBjaGVjay4gT25seSByZXR1cm5zIHRydWVcbiAgICogZm9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QgKG9iaikge1xuICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJ1xuICB9XG5cbiAgZnVuY3Rpb24gaXNSZWdFeHAgKHYpIHtcbiAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdmFsIGlzIGEgdmFsaWQgYXJyYXkgaW5kZXguXG4gICAqL1xuICBmdW5jdGlvbiBpc1ZhbGlkQXJyYXlJbmRleCAodmFsKSB7XG4gICAgdmFyIG4gPSBwYXJzZUZsb2F0KFN0cmluZyh2YWwpKTtcbiAgICByZXR1cm4gbiA+PSAwICYmIE1hdGguZmxvb3IobikgPT09IG4gJiYgaXNGaW5pdGUodmFsKVxuICB9XG5cbiAgZnVuY3Rpb24gaXNQcm9taXNlICh2YWwpIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXNEZWYodmFsKSAmJlxuICAgICAgdHlwZW9mIHZhbC50aGVuID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2YgdmFsLmNhdGNoID09PSAnZnVuY3Rpb24nXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSB2YWx1ZSB0byBhIHN0cmluZyB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgKi9cbiAgZnVuY3Rpb24gdG9TdHJpbmcgKHZhbCkge1xuICAgIHJldHVybiB2YWwgPT0gbnVsbFxuICAgICAgPyAnJ1xuICAgICAgOiBBcnJheS5pc0FycmF5KHZhbCkgfHwgKGlzUGxhaW5PYmplY3QodmFsKSAmJiB2YWwudG9TdHJpbmcgPT09IF90b1N0cmluZylcbiAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWwsIG51bGwsIDIpXG4gICAgICAgIDogU3RyaW5nKHZhbClcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIGlucHV0IHZhbHVlIHRvIGEgbnVtYmVyIGZvciBwZXJzaXN0ZW5jZS5cbiAgICogSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVybiBvcmlnaW5hbCBzdHJpbmcuXG4gICAqL1xuICBmdW5jdGlvbiB0b051bWJlciAodmFsKSB7XG4gICAgdmFyIG4gPSBwYXJzZUZsb2F0KHZhbCk7XG4gICAgcmV0dXJuIGlzTmFOKG4pID8gdmFsIDogblxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYSBtYXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxuICAgKiBpcyBpbiB0aGF0IG1hcC5cbiAgICovXG4gIGZ1bmN0aW9uIG1ha2VNYXAgKFxuICAgIHN0cixcbiAgICBleHBlY3RzTG93ZXJDYXNlXG4gICkge1xuICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBsaXN0ID0gc3RyLnNwbGl0KCcsJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXBbbGlzdFtpXV0gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZXhwZWN0c0xvd2VyQ2FzZVxuICAgICAgPyBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsLnRvTG93ZXJDYXNlKCldOyB9XG4gICAgICA6IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWxdOyB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYSBidWlsdC1pbiB0YWcuXG4gICAqL1xuICB2YXIgaXNCdWlsdEluVGFnID0gbWFrZU1hcCgnc2xvdCxjb21wb25lbnQnLCB0cnVlKTtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxuICAgKi9cbiAgdmFyIGlzUmVzZXJ2ZWRBdHRyaWJ1dGUgPSBtYWtlTWFwKCdrZXkscmVmLHNsb3Qsc2xvdC1zY29wZSxpcycpO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaXRlbSBmcm9tIGFuIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlIChhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyLmxlbmd0aCkge1xuICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICByZXR1cm4gYXJyLnNwbGljZShpbmRleCwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhbiBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eS5cbiAgICovXG4gIHZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gIGZ1bmN0aW9uIGhhc093biAob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjYWNoZWQgdmVyc2lvbiBvZiBhIHB1cmUgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBjYWNoZWQgKGZuKSB7XG4gICAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICByZXR1cm4gKGZ1bmN0aW9uIGNhY2hlZEZuIChzdHIpIHtcbiAgICAgIHZhciBoaXQgPSBjYWNoZVtzdHJdO1xuICAgICAgcmV0dXJuIGhpdCB8fCAoY2FjaGVbc3RyXSA9IGZuKHN0cikpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW1lbGl6ZSBhIGh5cGhlbi1kZWxpbWl0ZWQgc3RyaW5nLlxuICAgKi9cbiAgdmFyIGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XG4gIHZhciBjYW1lbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIGZ1bmN0aW9uIChfLCBjKSB7IHJldHVybiBjID8gYy50b1VwcGVyQ2FzZSgpIDogJyc7IH0pXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBDYXBpdGFsaXplIGEgc3RyaW5nLlxuICAgKi9cbiAgdmFyIGNhcGl0YWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSlcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEh5cGhlbmF0ZSBhIGNhbWVsQ2FzZSBzdHJpbmcuXG4gICAqL1xuICB2YXIgaHlwaGVuYXRlUkUgPSAvXFxCKFtBLVpdKS9nO1xuICB2YXIgaHlwaGVuYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUkUsICctJDEnKS50b0xvd2VyQ2FzZSgpXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTaW1wbGUgYmluZCBwb2x5ZmlsbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IHN1cHBvcnQgaXQsXG4gICAqIGUuZy4sIFBoYW50b21KUyAxLnguIFRlY2huaWNhbGx5LCB3ZSBkb24ndCBuZWVkIHRoaXMgYW55bW9yZVxuICAgKiBzaW5jZSBuYXRpdmUgYmluZCBpcyBub3cgcGVyZm9ybWFudCBlbm91Z2ggaW4gbW9zdCBicm93c2Vycy5cbiAgICogQnV0IHJlbW92aW5nIGl0IHdvdWxkIG1lYW4gYnJlYWtpbmcgY29kZSB0aGF0IHdhcyBhYmxlIHRvIHJ1biBpblxuICAgKiBQaGFudG9tSlMgMS54LCBzbyB0aGlzIG11c3QgYmUga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgICovXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgZnVuY3Rpb24gcG9seWZpbGxCaW5kIChmbiwgY3R4KSB7XG4gICAgZnVuY3Rpb24gYm91bmRGbiAoYSkge1xuICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxcbiAgICAgICAgPyBsID4gMVxuICAgICAgICAgID8gZm4uYXBwbHkoY3R4LCBhcmd1bWVudHMpXG4gICAgICAgICAgOiBmbi5jYWxsKGN0eCwgYSlcbiAgICAgICAgOiBmbi5jYWxsKGN0eClcbiAgICB9XG5cbiAgICBib3VuZEZuLl9sZW5ndGggPSBmbi5sZW5ndGg7XG4gICAgcmV0dXJuIGJvdW5kRm5cbiAgfVxuXG4gIGZ1bmN0aW9uIG5hdGl2ZUJpbmQgKGZuLCBjdHgpIHtcbiAgICByZXR1cm4gZm4uYmluZChjdHgpXG4gIH1cblxuICB2YXIgYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gICAgPyBuYXRpdmVCaW5kXG4gICAgOiBwb2x5ZmlsbEJpbmQ7XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gQXJyYXktbGlrZSBvYmplY3QgdG8gYSByZWFsIEFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gdG9BcnJheSAobGlzdCwgc3RhcnQpIHtcbiAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gICAgdmFyIGkgPSBsaXN0Lmxlbmd0aCAtIHN0YXJ0O1xuICAgIHZhciByZXQgPSBuZXcgQXJyYXkoaSk7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcmV0W2ldID0gbGlzdFtpICsgc3RhcnRdO1xuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvKipcbiAgICogTWl4IHByb3BlcnRpZXMgaW50byB0YXJnZXQgb2JqZWN0LlxuICAgKi9cbiAgZnVuY3Rpb24gZXh0ZW5kICh0bywgX2Zyb20pIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gX2Zyb20pIHtcbiAgICAgIHRvW2tleV0gPSBfZnJvbVtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gdG9cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSBhbiBBcnJheSBvZiBPYmplY3RzIGludG8gYSBzaW5nbGUgT2JqZWN0LlxuICAgKi9cbiAgZnVuY3Rpb24gdG9PYmplY3QgKGFycikge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFycltpXSkge1xuICAgICAgICBleHRlbmQocmVzLCBhcnJbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4gIC8qKlxuICAgKiBQZXJmb3JtIG5vIG9wZXJhdGlvbi5cbiAgICogU3R1YmJpbmcgYXJncyB0byBtYWtlIEZsb3cgaGFwcHkgd2l0aG91dCBsZWF2aW5nIHVzZWxlc3MgdHJhbnNwaWxlZCBjb2RlXG4gICAqIHdpdGggLi4ucmVzdCAoaHR0cHM6Ly9mbG93Lm9yZy9ibG9nLzIwMTcvMDUvMDcvU3RyaWN0LUZ1bmN0aW9uLUNhbGwtQXJpdHkvKS5cbiAgICovXG4gIGZ1bmN0aW9uIG5vb3AgKGEsIGIsIGMpIHt9XG5cbiAgLyoqXG4gICAqIEFsd2F5cyByZXR1cm4gZmFsc2UuXG4gICAqL1xuICB2YXIgbm8gPSBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gZmFsc2U7IH07XG5cbiAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNhbWUgdmFsdWUuXG4gICAqL1xuICB2YXIgaWRlbnRpdHkgPSBmdW5jdGlvbiAoXykgeyByZXR1cm4gXzsgfTtcblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBzdHJpbmcgY29udGFpbmluZyBzdGF0aWMga2V5cyBmcm9tIGNvbXBpbGVyIG1vZHVsZXMuXG4gICAqL1xuICBmdW5jdGlvbiBnZW5TdGF0aWNLZXlzIChtb2R1bGVzKSB7XG4gICAgcmV0dXJuIG1vZHVsZXMucmVkdWNlKGZ1bmN0aW9uIChrZXlzLCBtKSB7XG4gICAgICByZXR1cm4ga2V5cy5jb25jYXQobS5zdGF0aWNLZXlzIHx8IFtdKVxuICAgIH0sIFtdKS5qb2luKCcsJylcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gdmFsdWVzIGFyZSBsb29zZWx5IGVxdWFsIC0gdGhhdCBpcyxcbiAgICogaWYgdGhleSBhcmUgcGxhaW4gb2JqZWN0cywgZG8gdGhleSBoYXZlIHRoZSBzYW1lIHNoYXBlP1xuICAgKi9cbiAgZnVuY3Rpb24gbG9vc2VFcXVhbCAoYSwgYikge1xuICAgIGlmIChhID09PSBiKSB7IHJldHVybiB0cnVlIH1cbiAgICB2YXIgaXNPYmplY3RBID0gaXNPYmplY3QoYSk7XG4gICAgdmFyIGlzT2JqZWN0QiA9IGlzT2JqZWN0KGIpO1xuICAgIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgaXNBcnJheUEgPSBBcnJheS5pc0FycmF5KGEpO1xuICAgICAgICB2YXIgaXNBcnJheUIgPSBBcnJheS5pc0FycmF5KGIpO1xuICAgICAgICBpZiAoaXNBcnJheUEgJiYgaXNBcnJheUIpIHtcbiAgICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoZnVuY3Rpb24gKGUsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGUsIGJbaV0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKClcbiAgICAgICAgfSBlbHNlIGlmICghaXNBcnJheUEgJiYgIWlzQXJyYXlCKSB7XG4gICAgICAgICAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgICAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMoYik7XG4gICAgICAgICAgcmV0dXJuIGtleXNBLmxlbmd0aCA9PT0ga2V5c0IubGVuZ3RoICYmIGtleXNBLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc09iamVjdEEgJiYgIWlzT2JqZWN0Qikge1xuICAgICAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGZpcnN0IGluZGV4IGF0IHdoaWNoIGEgbG9vc2VseSBlcXVhbCB2YWx1ZSBjYW4gYmVcbiAgICogZm91bmQgaW4gdGhlIGFycmF5IChpZiB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCwgdGhlIGFycmF5IG11c3RcbiAgICogY29udGFpbiBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgc2hhcGUpLCBvciAtMSBpZiBpdCBpcyBub3QgcHJlc2VudC5cbiAgICovXG4gIGZ1bmN0aW9uIGxvb3NlSW5kZXhPZiAoYXJyLCB2YWwpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxvb3NlRXF1YWwoYXJyW2ldLCB2YWwpKSB7IHJldHVybiBpIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xXG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGEgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZS5cbiAgICovXG4gIGZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gICAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBTU1JfQVRUUiA9ICdkYXRhLXNlcnZlci1yZW5kZXJlZCc7XG5cbiAgdmFyIEFTU0VUX1RZUEVTID0gW1xuICAgICdjb21wb25lbnQnLFxuICAgICdkaXJlY3RpdmUnLFxuICAgICdmaWx0ZXInXG4gIF07XG5cbiAgdmFyIExJRkVDWUNMRV9IT09LUyA9IFtcbiAgICAnYmVmb3JlQ3JlYXRlJyxcbiAgICAnY3JlYXRlZCcsXG4gICAgJ2JlZm9yZU1vdW50JyxcbiAgICAnbW91bnRlZCcsXG4gICAgJ2JlZm9yZVVwZGF0ZScsXG4gICAgJ3VwZGF0ZWQnLFxuICAgICdiZWZvcmVEZXN0cm95JyxcbiAgICAnZGVzdHJveWVkJyxcbiAgICAnYWN0aXZhdGVkJyxcbiAgICAnZGVhY3RpdmF0ZWQnLFxuICAgICdlcnJvckNhcHR1cmVkJyxcbiAgICAnc2VydmVyUHJlZmV0Y2gnXG4gIF07XG5cbiAgLyogICovXG5cblxuXG4gIHZhciBjb25maWcgPSAoe1xuICAgIC8qKlxuICAgICAqIE9wdGlvbiBtZXJnZSBzdHJhdGVnaWVzICh1c2VkIGluIGNvcmUvdXRpbC9vcHRpb25zKVxuICAgICAqL1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIG9wdGlvbk1lcmdlU3RyYXRlZ2llczogT2JqZWN0LmNyZWF0ZShudWxsKSxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc3VwcHJlc3Mgd2FybmluZ3MuXG4gICAgICovXG4gICAgc2lsZW50OiBmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIFNob3cgcHJvZHVjdGlvbiBtb2RlIHRpcCBtZXNzYWdlIG9uIGJvb3Q/XG4gICAgICovXG4gICAgcHJvZHVjdGlvblRpcDogXCJkZXZlbG9wbWVudFwiICE9PSAncHJvZHVjdGlvbicsXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBkZXZ0b29sc1xuICAgICAqL1xuICAgIGRldnRvb2xzOiBcImRldmVsb3BtZW50XCIgIT09ICdwcm9kdWN0aW9uJyxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcmVjb3JkIHBlcmZcbiAgICAgKi9cbiAgICBwZXJmb3JtYW5jZTogZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBFcnJvciBoYW5kbGVyIGZvciB3YXRjaGVyIGVycm9yc1xuICAgICAqL1xuICAgIGVycm9ySGFuZGxlcjogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIFdhcm4gaGFuZGxlciBmb3Igd2F0Y2hlciB3YXJuc1xuICAgICAqL1xuICAgIHdhcm5IYW5kbGVyOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogSWdub3JlIGNlcnRhaW4gY3VzdG9tIGVsZW1lbnRzXG4gICAgICovXG4gICAgaWdub3JlZEVsZW1lbnRzOiBbXSxcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSB1c2VyIGtleSBhbGlhc2VzIGZvciB2LW9uXG4gICAgICovXG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAga2V5Q29kZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIHRhZyBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSByZWdpc3RlcmVkIGFzIGFcbiAgICAgKiBjb21wb25lbnQuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAgICovXG4gICAgaXNSZXNlcnZlZFRhZzogbm8sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbXBvbmVudFxuICAgICAqIHByb3AuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAgICovXG4gICAgaXNSZXNlcnZlZEF0dHI6IG5vLFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYW4gdW5rbm93biBlbGVtZW50LlxuICAgICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICAgKi9cbiAgICBpc1Vua25vd25FbGVtZW50OiBubyxcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbmFtZXNwYWNlIG9mIGFuIGVsZW1lbnRcbiAgICAgKi9cbiAgICBnZXRUYWdOYW1lc3BhY2U6IG5vb3AsXG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSB0aGUgcmVhbCB0YWcgbmFtZSBmb3IgdGhlIHNwZWNpZmljIHBsYXRmb3JtLlxuICAgICAqL1xuICAgIHBhcnNlUGxhdGZvcm1UYWdOYW1lOiBpZGVudGl0eSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIGJvdW5kIHVzaW5nIHByb3BlcnR5LCBlLmcuIHZhbHVlXG4gICAgICogUGxhdGZvcm0tZGVwZW5kZW50LlxuICAgICAqL1xuICAgIG11c3RVc2VQcm9wOiBubyxcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gdXBkYXRlcyBhc3luY2hyb25vdXNseS4gSW50ZW5kZWQgdG8gYmUgdXNlZCBieSBWdWUgVGVzdCBVdGlsc1xuICAgICAqIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHJlZHVjZSBwZXJmb3JtYW5jZSBpZiBzZXQgdG8gZmFsc2UuXG4gICAgICovXG4gICAgYXN5bmM6IHRydWUsXG5cbiAgICAvKipcbiAgICAgKiBFeHBvc2VkIGZvciBsZWdhY3kgcmVhc29uc1xuICAgICAqL1xuICAgIF9saWZlY3ljbGVIb29rczogTElGRUNZQ0xFX0hPT0tTXG4gIH0pO1xuXG4gIC8qICAqL1xuXG4gIC8qKlxuICAgKiB1bmljb2RlIGxldHRlcnMgdXNlZCBmb3IgcGFyc2luZyBodG1sIHRhZ3MsIGNvbXBvbmVudCBuYW1lcyBhbmQgcHJvcGVydHkgcGF0aHMuXG4gICAqIHVzaW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNTMvc2VtYW50aWNzLXNjcmlwdGluZy5odG1sI3BvdGVudGlhbGN1c3RvbWVsZW1lbnRuYW1lXG4gICAqIHNraXBwaW5nIFxcdTEwMDAwLVxcdUVGRkZGIGR1ZSB0byBpdCBmcmVlemluZyB1cCBQaGFudG9tSlNcbiAgICovXG4gIHZhciB1bmljb2RlUmVnRXhwID0gL2EtekEtWlxcdTAwQjdcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDNGLVxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQvO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHN0cmluZyBzdGFydHMgd2l0aCAkIG9yIF9cbiAgICovXG4gIGZ1bmN0aW9uIGlzUmVzZXJ2ZWQgKHN0cikge1xuICAgIHZhciBjID0gKHN0ciArICcnKS5jaGFyQ29kZUF0KDApO1xuICAgIHJldHVybiBjID09PSAweDI0IHx8IGMgPT09IDB4NUZcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYSBwcm9wZXJ0eS5cbiAgICovXG4gIGZ1bmN0aW9uIGRlZiAob2JqLCBrZXksIHZhbCwgZW51bWVyYWJsZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbCxcbiAgICAgIGVudW1lcmFibGU6ICEhZW51bWVyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2Ugc2ltcGxlIHBhdGguXG4gICAqL1xuICB2YXIgYmFpbFJFID0gbmV3IFJlZ0V4cCgoXCJbXlwiICsgKHVuaWNvZGVSZWdFeHAuc291cmNlKSArIFwiLiRfXFxcXGRdXCIpKTtcbiAgZnVuY3Rpb24gcGFyc2VQYXRoIChwYXRoKSB7XG4gICAgaWYgKGJhaWxSRS50ZXN0KHBhdGgpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghb2JqKSB7IHJldHVybiB9XG4gICAgICAgIG9iaiA9IG9ialtzZWdtZW50c1tpXV07XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqXG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgLy8gY2FuIHdlIHVzZSBfX3Byb3RvX18/XG4gIHZhciBoYXNQcm90byA9ICdfX3Byb3RvX18nIGluIHt9O1xuXG4gIC8vIEJyb3dzZXIgZW52aXJvbm1lbnQgc25pZmZpbmdcbiAgdmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuICB2YXIgaW5XZWV4ID0gdHlwZW9mIFdYRW52aXJvbm1lbnQgIT09ICd1bmRlZmluZWQnICYmICEhV1hFbnZpcm9ubWVudC5wbGF0Zm9ybTtcbiAgdmFyIHdlZXhQbGF0Zm9ybSA9IGluV2VleCAmJiBXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBVQSA9IGluQnJvd3NlciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICB2YXIgaXNJRSA9IFVBICYmIC9tc2llfHRyaWRlbnQvLnRlc3QoVUEpO1xuICB2YXIgaXNJRTkgPSBVQSAmJiBVQS5pbmRleE9mKCdtc2llIDkuMCcpID4gMDtcbiAgdmFyIGlzRWRnZSA9IFVBICYmIFVBLmluZGV4T2YoJ2VkZ2UvJykgPiAwO1xuICB2YXIgaXNBbmRyb2lkID0gKFVBICYmIFVBLmluZGV4T2YoJ2FuZHJvaWQnKSA+IDApIHx8ICh3ZWV4UGxhdGZvcm0gPT09ICdhbmRyb2lkJyk7XG4gIHZhciBpc0lPUyA9IChVQSAmJiAvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoVUEpKSB8fCAod2VleFBsYXRmb3JtID09PSAnaW9zJyk7XG4gIHZhciBpc0Nocm9tZSA9IFVBICYmIC9jaHJvbWVcXC9cXGQrLy50ZXN0KFVBKSAmJiAhaXNFZGdlO1xuICB2YXIgaXNQaGFudG9tSlMgPSBVQSAmJiAvcGhhbnRvbWpzLy50ZXN0KFVBKTtcbiAgdmFyIGlzRkYgPSBVQSAmJiBVQS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pO1xuXG4gIC8vIEZpcmVmb3ggaGFzIGEgXCJ3YXRjaFwiIGZ1bmN0aW9uIG9uIE9iamVjdC5wcm90b3R5cGUuLi5cbiAgdmFyIG5hdGl2ZVdhdGNoID0gKHt9KS53YXRjaDtcblxuICB2YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG4gIGlmIChpbkJyb3dzZXIpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIG9wdHMgPSB7fTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRzLCAncGFzc2l2ZScsICh7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QtcGFzc2l2ZScsIG51bGwsIG9wdHMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cblxuICAvLyB0aGlzIG5lZWRzIHRvIGJlIGxhenktZXZhbGVkIGJlY2F1c2UgdnVlIG1heSBiZSByZXF1aXJlZCBiZWZvcmVcbiAgLy8gdnVlLXNlcnZlci1yZW5kZXJlciBjYW4gc2V0IFZVRV9FTlZcbiAgdmFyIF9pc1NlcnZlcjtcbiAgdmFyIGlzU2VydmVyUmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfaXNTZXJ2ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIWluQnJvd3NlciAmJiAhaW5XZWV4ICYmIHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIGRldGVjdCBwcmVzZW5jZSBvZiB2dWUtc2VydmVyLXJlbmRlcmVyIGFuZCBhdm9pZFxuICAgICAgICAvLyBXZWJwYWNrIHNoaW1taW5nIHRoZSBwcm9jZXNzXG4gICAgICAgIF9pc1NlcnZlciA9IGdsb2JhbFsncHJvY2VzcyddICYmIGdsb2JhbFsncHJvY2VzcyddLmVudi5WVUVfRU5WID09PSAnc2VydmVyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9pc1NlcnZlciA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX2lzU2VydmVyXG4gIH07XG5cbiAgLy8gZGV0ZWN0IGRldnRvb2xzXG4gIHZhciBkZXZ0b29scyA9IGluQnJvd3NlciAmJiB3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmdW5jdGlvbiBpc05hdGl2ZSAoQ3Rvcikge1xuICAgIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoQ3Rvci50b1N0cmluZygpKVxuICB9XG5cbiAgdmFyIGhhc1N5bWJvbCA9XG4gICAgdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU3ltYm9sKSAmJlxuICAgIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShSZWZsZWN0Lm93bktleXMpO1xuXG4gIHZhciBfU2V0O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICh0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTZXQpKSB7XG4gICAgLy8gdXNlIG5hdGl2ZSBTZXQgd2hlbiBhdmFpbGFibGUuXG4gICAgX1NldCA9IFNldDtcbiAgfSBlbHNlIHtcbiAgICAvLyBhIG5vbi1zdGFuZGFyZCBTZXQgcG9seWZpbGwgdGhhdCBvbmx5IHdvcmtzIHdpdGggcHJpbWl0aXZlIGtleXMuXG4gICAgX1NldCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gU2V0ICgpIHtcbiAgICAgICAgdGhpcy5zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuICAgICAgU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBoYXMgKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRba2V5XSA9PT0gdHJ1ZVxuICAgICAgfTtcbiAgICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChrZXkpIHtcbiAgICAgICAgdGhpcy5zZXRba2V5XSA9IHRydWU7XG4gICAgICB9O1xuICAgICAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICAgICAgdGhpcy5zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFNldDtcbiAgICB9KCkpO1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIHdhcm4gPSBub29wO1xuICB2YXIgdGlwID0gbm9vcDtcbiAgdmFyIGdlbmVyYXRlQ29tcG9uZW50VHJhY2UgPSAobm9vcCk7IC8vIHdvcmsgYXJvdW5kIGZsb3cgY2hlY2tcbiAgdmFyIGZvcm1hdENvbXBvbmVudE5hbWUgPSAobm9vcCk7XG5cbiAge1xuICAgIHZhciBoYXNDb25zb2xlID0gdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnO1xuICAgIHZhciBjbGFzc2lmeVJFID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xuICAgIHZhciBjbGFzc2lmeSA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0clxuICAgICAgLnJlcGxhY2UoY2xhc3NpZnlSRSwgZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMudG9VcHBlckNhc2UoKTsgfSlcbiAgICAgIC5yZXBsYWNlKC9bLV9dL2csICcnKTsgfTtcblxuICAgIHdhcm4gPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgICAgdmFyIHRyYWNlID0gdm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnO1xuXG4gICAgICBpZiAoY29uZmlnLndhcm5IYW5kbGVyKSB7XG4gICAgICAgIGNvbmZpZy53YXJuSGFuZGxlci5jYWxsKG51bGwsIG1zZywgdm0sIHRyYWNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaGFzQ29uc29sZSAmJiAoIWNvbmZpZy5zaWxlbnQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW1Z1ZSB3YXJuXTogXCIgKyBtc2cgKyB0cmFjZSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aXAgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgICAgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbVnVlIHRpcF06IFwiICsgbXNnICsgKFxuICAgICAgICAgIHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJ1xuICAgICAgICApKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybWF0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uICh2bSwgaW5jbHVkZUZpbGUpIHtcbiAgICAgIGlmICh2bS4kcm9vdCA9PT0gdm0pIHtcbiAgICAgICAgcmV0dXJuICc8Um9vdD4nXG4gICAgICB9XG4gICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiB2bSA9PT0gJ2Z1bmN0aW9uJyAmJiB2bS5jaWQgIT0gbnVsbFxuICAgICAgICA/IHZtLm9wdGlvbnNcbiAgICAgICAgOiB2bS5faXNWdWVcbiAgICAgICAgICA/IHZtLiRvcHRpb25zIHx8IHZtLmNvbnN0cnVjdG9yLm9wdGlvbnNcbiAgICAgICAgICA6IHZtO1xuICAgICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgfHwgb3B0aW9ucy5fY29tcG9uZW50VGFnO1xuICAgICAgdmFyIGZpbGUgPSBvcHRpb25zLl9fZmlsZTtcbiAgICAgIGlmICghbmFtZSAmJiBmaWxlKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IGZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwudnVlJC8pO1xuICAgICAgICBuYW1lID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIChuYW1lID8gKFwiPFwiICsgKGNsYXNzaWZ5KG5hbWUpKSArIFwiPlwiKSA6IFwiPEFub255bW91cz5cIikgK1xuICAgICAgICAoZmlsZSAmJiBpbmNsdWRlRmlsZSAhPT0gZmFsc2UgPyAoXCIgYXQgXCIgKyBmaWxlKSA6ICcnKVxuICAgICAgKVxuICAgIH07XG5cbiAgICB2YXIgcmVwZWF0ID0gZnVuY3Rpb24gKHN0ciwgbikge1xuICAgICAgdmFyIHJlcyA9ICcnO1xuICAgICAgd2hpbGUgKG4pIHtcbiAgICAgICAgaWYgKG4gJSAyID09PSAxKSB7IHJlcyArPSBzdHI7IH1cbiAgICAgICAgaWYgKG4gPiAxKSB7IHN0ciArPSBzdHI7IH1cbiAgICAgICAgbiA+Pj0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9O1xuXG4gICAgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IGZ1bmN0aW9uICh2bSkge1xuICAgICAgaWYgKHZtLl9pc1Z1ZSAmJiB2bS4kcGFyZW50KSB7XG4gICAgICAgIHZhciB0cmVlID0gW107XG4gICAgICAgIHZhciBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICB3aGlsZSAodm0pIHtcbiAgICAgICAgICBpZiAodHJlZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgbGFzdCA9IHRyZWVbdHJlZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmIChsYXN0LmNvbnN0cnVjdG9yID09PSB2bS5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UrKztcbiAgICAgICAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPiAwKSB7XG4gICAgICAgICAgICAgIHRyZWVbdHJlZS5sZW5ndGggLSAxXSA9IFtsYXN0LCBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2VdO1xuICAgICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0cmVlLnB1c2godm0pO1xuICAgICAgICAgIHZtID0gdm0uJHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1xcblxcbmZvdW5kIGluXFxuXFxuJyArIHRyZWVcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uICh2bSwgaSkgeyByZXR1cm4gKFwiXCIgKyAoaSA9PT0gMCA/ICctLS0+ICcgOiByZXBlYXQoJyAnLCA1ICsgaSAqIDIpKSArIChBcnJheS5pc0FycmF5KHZtKVxuICAgICAgICAgICAgICA/ICgoZm9ybWF0Q29tcG9uZW50TmFtZSh2bVswXSkpICsgXCIuLi4gKFwiICsgKHZtWzFdKSArIFwiIHJlY3Vyc2l2ZSBjYWxscylcIilcbiAgICAgICAgICAgICAgOiBmb3JtYXRDb21wb25lbnROYW1lKHZtKSkpOyB9KVxuICAgICAgICAgIC5qb2luKCdcXG4nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChcIlxcblxcbihmb3VuZCBpbiBcIiArIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIilcIilcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIHVpZCA9IDA7XG5cbiAgLyoqXG4gICAqIEEgZGVwIGlzIGFuIG9ic2VydmFibGUgdGhhdCBjYW4gaGF2ZSBtdWx0aXBsZVxuICAgKiBkaXJlY3RpdmVzIHN1YnNjcmliaW5nIHRvIGl0LlxuICAgKi9cbiAgdmFyIERlcCA9IGZ1bmN0aW9uIERlcCAoKSB7XG4gICAgdGhpcy5pZCA9IHVpZCsrO1xuICAgIHRoaXMuc3VicyA9IFtdO1xuICB9O1xuXG4gIERlcC5wcm90b3R5cGUuYWRkU3ViID0gZnVuY3Rpb24gYWRkU3ViIChzdWIpIHtcbiAgICB0aGlzLnN1YnMucHVzaChzdWIpO1xuICB9O1xuXG4gIERlcC5wcm90b3R5cGUucmVtb3ZlU3ViID0gZnVuY3Rpb24gcmVtb3ZlU3ViIChzdWIpIHtcbiAgICByZW1vdmUodGhpcy5zdWJzLCBzdWIpO1xuICB9O1xuXG4gIERlcC5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gZGVwZW5kICgpIHtcbiAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgRGVwLnRhcmdldC5hZGREZXAodGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIERlcC5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5ICgpIHtcbiAgICAvLyBzdGFiaWxpemUgdGhlIHN1YnNjcmliZXIgbGlzdCBmaXJzdFxuICAgIHZhciBzdWJzID0gdGhpcy5zdWJzLnNsaWNlKCk7XG4gICAgaWYgKCFjb25maWcuYXN5bmMpIHtcbiAgICAgIC8vIHN1YnMgYXJlbid0IHNvcnRlZCBpbiBzY2hlZHVsZXIgaWYgbm90IHJ1bm5pbmcgYXN5bmNcbiAgICAgIC8vIHdlIG5lZWQgdG8gc29ydCB0aGVtIG5vdyB0byBtYWtlIHN1cmUgdGhleSBmaXJlIGluIGNvcnJlY3RcbiAgICAgIC8vIG9yZGVyXG4gICAgICBzdWJzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdWJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgc3Vic1tpXS51cGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gVGhlIGN1cnJlbnQgdGFyZ2V0IHdhdGNoZXIgYmVpbmcgZXZhbHVhdGVkLlxuICAvLyBUaGlzIGlzIGdsb2JhbGx5IHVuaXF1ZSBiZWNhdXNlIG9ubHkgb25lIHdhdGNoZXJcbiAgLy8gY2FuIGJlIGV2YWx1YXRlZCBhdCBhIHRpbWUuXG4gIERlcC50YXJnZXQgPSBudWxsO1xuICB2YXIgdGFyZ2V0U3RhY2sgPSBbXTtcblxuICBmdW5jdGlvbiBwdXNoVGFyZ2V0ICh0YXJnZXQpIHtcbiAgICB0YXJnZXRTdGFjay5wdXNoKHRhcmdldCk7XG4gICAgRGVwLnRhcmdldCA9IHRhcmdldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvcFRhcmdldCAoKSB7XG4gICAgdGFyZ2V0U3RhY2sucG9wKCk7XG4gICAgRGVwLnRhcmdldCA9IHRhcmdldFN0YWNrW3RhcmdldFN0YWNrLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIFZOb2RlID0gZnVuY3Rpb24gVk5vZGUgKFxuICAgIHRhZyxcbiAgICBkYXRhLFxuICAgIGNoaWxkcmVuLFxuICAgIHRleHQsXG4gICAgZWxtLFxuICAgIGNvbnRleHQsXG4gICAgY29tcG9uZW50T3B0aW9ucyxcbiAgICBhc3luY0ZhY3RvcnlcbiAgKSB7XG4gICAgdGhpcy50YWcgPSB0YWc7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLmVsbSA9IGVsbTtcbiAgICB0aGlzLm5zID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5mbkNvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mbk9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mblNjb3BlSWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5rZXkgPSBkYXRhICYmIGRhdGEua2V5O1xuICAgIHRoaXMuY29tcG9uZW50T3B0aW9ucyA9IGNvbXBvbmVudE9wdGlvbnM7XG4gICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJhdyA9IGZhbHNlO1xuICAgIHRoaXMuaXNTdGF0aWMgPSBmYWxzZTtcbiAgICB0aGlzLmlzUm9vdEluc2VydCA9IHRydWU7XG4gICAgdGhpcy5pc0NvbW1lbnQgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2xvbmVkID0gZmFsc2U7XG4gICAgdGhpcy5pc09uY2UgPSBmYWxzZTtcbiAgICB0aGlzLmFzeW5jRmFjdG9yeSA9IGFzeW5jRmFjdG9yeTtcbiAgICB0aGlzLmFzeW5jTWV0YSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlzQXN5bmNQbGFjZWhvbGRlciA9IGZhbHNlO1xuICB9O1xuXG4gIHZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IGNoaWxkOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbiAgLy8gREVQUkVDQVRFRDogYWxpYXMgZm9yIGNvbXBvbmVudEluc3RhbmNlIGZvciBiYWNrd2FyZHMgY29tcGF0LlxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBwcm90b3R5cGVBY2Nlc3NvcnMuY2hpbGQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEluc3RhbmNlXG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFZOb2RlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbiAgdmFyIGNyZWF0ZUVtcHR5Vk5vZGUgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgIGlmICggdGV4dCA9PT0gdm9pZCAwICkgdGV4dCA9ICcnO1xuXG4gICAgdmFyIG5vZGUgPSBuZXcgVk5vZGUoKTtcbiAgICBub2RlLnRleHQgPSB0ZXh0O1xuICAgIG5vZGUuaXNDb21tZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gbm9kZVxuICB9O1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVRleHRWTm9kZSAodmFsKSB7XG4gICAgcmV0dXJuIG5ldyBWTm9kZSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBTdHJpbmcodmFsKSlcbiAgfVxuXG4gIC8vIG9wdGltaXplZCBzaGFsbG93IGNsb25lXG4gIC8vIHVzZWQgZm9yIHN0YXRpYyBub2RlcyBhbmQgc2xvdCBub2RlcyBiZWNhdXNlIHRoZXkgbWF5IGJlIHJldXNlZCBhY3Jvc3NcbiAgLy8gbXVsdGlwbGUgcmVuZGVycywgY2xvbmluZyB0aGVtIGF2b2lkcyBlcnJvcnMgd2hlbiBET00gbWFuaXB1bGF0aW9ucyByZWx5XG4gIC8vIG9uIHRoZWlyIGVsbSByZWZlcmVuY2UuXG4gIGZ1bmN0aW9uIGNsb25lVk5vZGUgKHZub2RlKSB7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBWTm9kZShcbiAgICAgIHZub2RlLnRhZyxcbiAgICAgIHZub2RlLmRhdGEsXG4gICAgICAvLyAjNzk3NVxuICAgICAgLy8gY2xvbmUgY2hpbGRyZW4gYXJyYXkgdG8gYXZvaWQgbXV0YXRpbmcgb3JpZ2luYWwgaW4gY2FzZSBvZiBjbG9uaW5nXG4gICAgICAvLyBhIGNoaWxkLlxuICAgICAgdm5vZGUuY2hpbGRyZW4gJiYgdm5vZGUuY2hpbGRyZW4uc2xpY2UoKSxcbiAgICAgIHZub2RlLnRleHQsXG4gICAgICB2bm9kZS5lbG0sXG4gICAgICB2bm9kZS5jb250ZXh0LFxuICAgICAgdm5vZGUuY29tcG9uZW50T3B0aW9ucyxcbiAgICAgIHZub2RlLmFzeW5jRmFjdG9yeVxuICAgICk7XG4gICAgY2xvbmVkLm5zID0gdm5vZGUubnM7XG4gICAgY2xvbmVkLmlzU3RhdGljID0gdm5vZGUuaXNTdGF0aWM7XG4gICAgY2xvbmVkLmtleSA9IHZub2RlLmtleTtcbiAgICBjbG9uZWQuaXNDb21tZW50ID0gdm5vZGUuaXNDb21tZW50O1xuICAgIGNsb25lZC5mbkNvbnRleHQgPSB2bm9kZS5mbkNvbnRleHQ7XG4gICAgY2xvbmVkLmZuT3B0aW9ucyA9IHZub2RlLmZuT3B0aW9ucztcbiAgICBjbG9uZWQuZm5TY29wZUlkID0gdm5vZGUuZm5TY29wZUlkO1xuICAgIGNsb25lZC5hc3luY01ldGEgPSB2bm9kZS5hc3luY01ldGE7XG4gICAgY2xvbmVkLmlzQ2xvbmVkID0gdHJ1ZTtcbiAgICByZXR1cm4gY2xvbmVkXG4gIH1cblxuICAvKlxuICAgKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGhcbiAgICogZHluYW1pY2FsbHkgYWNjZXNzaW5nIG1ldGhvZHMgb24gQXJyYXkgcHJvdG90eXBlXG4gICAqL1xuXG4gIHZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuICB2YXIgYXJyYXlNZXRob2RzID0gT2JqZWN0LmNyZWF0ZShhcnJheVByb3RvKTtcblxuICB2YXIgbWV0aG9kc1RvUGF0Y2ggPSBbXG4gICAgJ3B1c2gnLFxuICAgICdwb3AnLFxuICAgICdzaGlmdCcsXG4gICAgJ3Vuc2hpZnQnLFxuICAgICdzcGxpY2UnLFxuICAgICdzb3J0JyxcbiAgICAncmV2ZXJzZSdcbiAgXTtcblxuICAvKipcbiAgICogSW50ZXJjZXB0IG11dGF0aW5nIG1ldGhvZHMgYW5kIGVtaXQgZXZlbnRzXG4gICAqL1xuICBtZXRob2RzVG9QYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAvLyBjYWNoZSBvcmlnaW5hbCBtZXRob2RcbiAgICB2YXIgb3JpZ2luYWwgPSBhcnJheVByb3RvW21ldGhvZF07XG4gICAgZGVmKGFycmF5TWV0aG9kcywgbWV0aG9kLCBmdW5jdGlvbiBtdXRhdG9yICgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB2YXIgb2IgPSB0aGlzLl9fb2JfXztcbiAgICAgIHZhciBpbnNlcnRlZDtcbiAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgICBjYXNlICd1bnNoaWZ0JzpcbiAgICAgICAgICBpbnNlcnRlZCA9IGFyZ3M7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnc3BsaWNlJzpcbiAgICAgICAgICBpbnNlcnRlZCA9IGFyZ3Muc2xpY2UoMik7XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmIChpbnNlcnRlZCkgeyBvYi5vYnNlcnZlQXJyYXkoaW5zZXJ0ZWQpOyB9XG4gICAgICAvLyBub3RpZnkgY2hhbmdlXG4gICAgICBvYi5kZXAubm90aWZ5KCk7XG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8qICAqL1xuXG4gIHZhciBhcnJheUtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhcnJheU1ldGhvZHMpO1xuXG4gIC8qKlxuICAgKiBJbiBzb21lIGNhc2VzIHdlIG1heSB3YW50IHRvIGRpc2FibGUgb2JzZXJ2YXRpb24gaW5zaWRlIGEgY29tcG9uZW50J3NcbiAgICogdXBkYXRlIGNvbXB1dGF0aW9uLlxuICAgKi9cbiAgdmFyIHNob3VsZE9ic2VydmUgPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIHRvZ2dsZU9ic2VydmluZyAodmFsdWUpIHtcbiAgICBzaG91bGRPYnNlcnZlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2ZXIgY2xhc3MgdGhhdCBpcyBhdHRhY2hlZCB0byBlYWNoIG9ic2VydmVkXG4gICAqIG9iamVjdC4gT25jZSBhdHRhY2hlZCwgdGhlIG9ic2VydmVyIGNvbnZlcnRzIHRoZSB0YXJnZXRcbiAgICogb2JqZWN0J3MgcHJvcGVydHkga2V5cyBpbnRvIGdldHRlci9zZXR0ZXJzIHRoYXRcbiAgICogY29sbGVjdCBkZXBlbmRlbmNpZXMgYW5kIGRpc3BhdGNoIHVwZGF0ZXMuXG4gICAqL1xuICB2YXIgT2JzZXJ2ZXIgPSBmdW5jdGlvbiBPYnNlcnZlciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5kZXAgPSBuZXcgRGVwKCk7XG4gICAgdGhpcy52bUNvdW50ID0gMDtcbiAgICBkZWYodmFsdWUsICdfX29iX18nLCB0aGlzKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGlmIChoYXNQcm90bykge1xuICAgICAgICBwcm90b0F1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3B5QXVnbWVudCh2YWx1ZSwgYXJyYXlNZXRob2RzLCBhcnJheUtleXMpO1xuICAgICAgfVxuICAgICAgdGhpcy5vYnNlcnZlQXJyYXkodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndhbGsodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogV2FsayB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIGFuZCBjb252ZXJ0IHRoZW0gaW50b1xuICAgKiBnZXR0ZXIvc2V0dGVycy4gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW5cbiAgICogdmFsdWUgdHlwZSBpcyBPYmplY3QuXG4gICAqL1xuICBPYnNlcnZlci5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIHdhbGsgKG9iaikge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKG9iaiwga2V5c1tpXSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBPYnNlcnZlIGEgbGlzdCBvZiBBcnJheSBpdGVtcy5cbiAgICovXG4gIE9ic2VydmVyLnByb3RvdHlwZS5vYnNlcnZlQXJyYXkgPSBmdW5jdGlvbiBvYnNlcnZlQXJyYXkgKGl0ZW1zKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIG9ic2VydmUoaXRlbXNbaV0pO1xuICAgIH1cbiAgfTtcblxuICAvLyBoZWxwZXJzXG5cbiAgLyoqXG4gICAqIEF1Z21lbnQgYSB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGludGVyY2VwdGluZ1xuICAgKiB0aGUgcHJvdG90eXBlIGNoYWluIHVzaW5nIF9fcHJvdG9fX1xuICAgKi9cbiAgZnVuY3Rpb24gcHJvdG9BdWdtZW50ICh0YXJnZXQsIHNyYykge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG4gICAgdGFyZ2V0Ll9fcHJvdG9fXyA9IHNyYztcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXByb3RvICovXG4gIH1cblxuICAvKipcbiAgICogQXVnbWVudCBhIHRhcmdldCBPYmplY3Qgb3IgQXJyYXkgYnkgZGVmaW5pbmdcbiAgICogaGlkZGVuIHByb3BlcnRpZXMuXG4gICAqL1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmdW5jdGlvbiBjb3B5QXVnbWVudCAodGFyZ2V0LCBzcmMsIGtleXMpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIGRlZih0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZSBmb3IgYSB2YWx1ZSxcbiAgICogcmV0dXJucyB0aGUgbmV3IG9ic2VydmVyIGlmIHN1Y2Nlc3NmdWxseSBvYnNlcnZlZCxcbiAgICogb3IgdGhlIGV4aXN0aW5nIG9ic2VydmVyIGlmIHRoZSB2YWx1ZSBhbHJlYWR5IGhhcyBvbmUuXG4gICAqL1xuICBmdW5jdGlvbiBvYnNlcnZlICh2YWx1ZSwgYXNSb290RGF0YSkge1xuICAgIGlmICghaXNPYmplY3QodmFsdWUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB2YXIgb2I7XG4gICAgaWYgKGhhc093bih2YWx1ZSwgJ19fb2JfXycpICYmIHZhbHVlLl9fb2JfXyBpbnN0YW5jZW9mIE9ic2VydmVyKSB7XG4gICAgICBvYiA9IHZhbHVlLl9fb2JfXztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc2hvdWxkT2JzZXJ2ZSAmJlxuICAgICAgIWlzU2VydmVyUmVuZGVyaW5nKCkgJiZcbiAgICAgIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqZWN0KHZhbHVlKSkgJiZcbiAgICAgIE9iamVjdC5pc0V4dGVuc2libGUodmFsdWUpICYmXG4gICAgICAhdmFsdWUuX2lzVnVlXG4gICAgKSB7XG4gICAgICBvYiA9IG5ldyBPYnNlcnZlcih2YWx1ZSk7XG4gICAgfVxuICAgIGlmIChhc1Jvb3REYXRhICYmIG9iKSB7XG4gICAgICBvYi52bUNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBvYlxuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhIHJlYWN0aXZlIHByb3BlcnR5IG9uIGFuIE9iamVjdC5cbiAgICovXG4gIGZ1bmN0aW9uIGRlZmluZVJlYWN0aXZlJCQxIChcbiAgICBvYmosXG4gICAga2V5LFxuICAgIHZhbCxcbiAgICBjdXN0b21TZXR0ZXIsXG4gICAgc2hhbGxvd1xuICApIHtcbiAgICB2YXIgZGVwID0gbmV3IERlcCgpO1xuXG4gICAgdmFyIHByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7XG4gICAgaWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGNhdGVyIGZvciBwcmUtZGVmaW5lZCBnZXR0ZXIvc2V0dGVyc1xuICAgIHZhciBnZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQ7XG4gICAgdmFyIHNldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LnNldDtcbiAgICBpZiAoKCFnZXR0ZXIgfHwgc2V0dGVyKSAmJiBhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICB2YWwgPSBvYmpba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRPYiA9ICFzaGFsbG93ICYmIG9ic2VydmUodmFsKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlR2V0dGVyICgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgICBkZXAuZGVwZW5kKCk7XG4gICAgICAgICAgaWYgKGNoaWxkT2IpIHtcbiAgICAgICAgICAgIGNoaWxkT2IuZGVwLmRlcGVuZCgpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGRlcGVuZEFycmF5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiByZWFjdGl2ZVNldHRlciAobmV3VmFsKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgICBpZiAobmV3VmFsID09PSB2YWx1ZSB8fCAobmV3VmFsICE9PSBuZXdWYWwgJiYgdmFsdWUgIT09IHZhbHVlKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICAgIGlmIChjdXN0b21TZXR0ZXIpIHtcbiAgICAgICAgICBjdXN0b21TZXR0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyAjNzk4MTogZm9yIGFjY2Vzc29yIHByb3BlcnRpZXMgd2l0aG91dCBzZXR0ZXJcbiAgICAgICAgaWYgKGdldHRlciAmJiAhc2V0dGVyKSB7IHJldHVybiB9XG4gICAgICAgIGlmIChzZXR0ZXIpIHtcbiAgICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gbmV3VmFsO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkT2IgPSAhc2hhbGxvdyAmJiBvYnNlcnZlKG5ld1ZhbCk7XG4gICAgICAgIGRlcC5ub3RpZnkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3QuIEFkZHMgdGhlIG5ldyBwcm9wZXJ0eSBhbmRcbiAgICogdHJpZ2dlcnMgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZiB0aGUgcHJvcGVydHkgZG9lc24ndFxuICAgKiBhbHJlYWR5IGV4aXN0LlxuICAgKi9cbiAgZnVuY3Rpb24gc2V0ICh0YXJnZXQsIGtleSwgdmFsKSB7XG4gICAgaWYgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpXG4gICAgKSB7XG4gICAgICB3YXJuKChcIkNhbm5vdCBzZXQgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpICYmIGlzVmFsaWRBcnJheUluZGV4KGtleSkpIHtcbiAgICAgIHRhcmdldC5sZW5ndGggPSBNYXRoLm1heCh0YXJnZXQubGVuZ3RoLCBrZXkpO1xuICAgICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XG4gICAgICByZXR1cm4gdmFsXG4gICAgfVxuICAgIGlmIChrZXkgaW4gdGFyZ2V0ICYmICEoa2V5IGluIE9iamVjdC5wcm90b3R5cGUpKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHZhbDtcbiAgICAgIHJldHVybiB2YWxcbiAgICB9XG4gICAgdmFyIG9iID0gKHRhcmdldCkuX19vYl9fO1xuICAgIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIGFkZGluZyByZWFjdGl2ZSBwcm9wZXJ0aWVzIHRvIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgICAnYXQgcnVudGltZSAtIGRlY2xhcmUgaXQgdXBmcm9udCBpbiB0aGUgZGF0YSBvcHRpb24uJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiB2YWxcbiAgICB9XG4gICAgaWYgKCFvYikge1xuICAgICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgICByZXR1cm4gdmFsXG4gICAgfVxuICAgIGRlZmluZVJlYWN0aXZlJCQxKG9iLnZhbHVlLCBrZXksIHZhbCk7XG4gICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYSBwcm9wZXJ0eSBhbmQgdHJpZ2dlciBjaGFuZ2UgaWYgbmVjZXNzYXJ5LlxuICAgKi9cbiAgZnVuY3Rpb24gZGVsICh0YXJnZXQsIGtleSkge1xuICAgIGlmIChpc1VuZGVmKHRhcmdldCkgfHwgaXNQcmltaXRpdmUodGFyZ2V0KVxuICAgICkge1xuICAgICAgd2FybigoXCJDYW5ub3QgZGVsZXRlIHJlYWN0aXZlIHByb3BlcnR5IG9uIHVuZGVmaW5lZCwgbnVsbCwgb3IgcHJpbWl0aXZlIHZhbHVlOiBcIiArICgodGFyZ2V0KSkpKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgICB0YXJnZXQuc3BsaWNlKGtleSwgMSk7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIG9iID0gKHRhcmdldCkuX19vYl9fO1xuICAgIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIGRlbGV0aW5nIHByb3BlcnRpZXMgb24gYSBWdWUgaW5zdGFuY2Ugb3IgaXRzIHJvb3QgJGRhdGEgJyArXG4gICAgICAgICctIGp1c3Qgc2V0IGl0IHRvIG51bGwuJ1xuICAgICAgKTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBkZWxldGUgdGFyZ2V0W2tleV07XG4gICAgaWYgKCFvYikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG9iLmRlcC5ub3RpZnkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0IGRlcGVuZGVuY2llcyBvbiBhcnJheSBlbGVtZW50cyB3aGVuIHRoZSBhcnJheSBpcyB0b3VjaGVkLCBzaW5jZVxuICAgKiB3ZSBjYW5ub3QgaW50ZXJjZXB0IGFycmF5IGVsZW1lbnQgYWNjZXNzIGxpa2UgcHJvcGVydHkgZ2V0dGVycy5cbiAgICovXG4gIGZ1bmN0aW9uIGRlcGVuZEFycmF5ICh2YWx1ZSkge1xuICAgIGZvciAodmFyIGUgPSAodm9pZCAwKSwgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGUgPSB2YWx1ZVtpXTtcbiAgICAgIGUgJiYgZS5fX29iX18gJiYgZS5fX29iX18uZGVwLmRlcGVuZCgpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHtcbiAgICAgICAgZGVwZW5kQXJyYXkoZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgLyoqXG4gICAqIE9wdGlvbiBvdmVyd3JpdGluZyBzdHJhdGVnaWVzIGFyZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGVcbiAgICogaG93IHRvIG1lcmdlIGEgcGFyZW50IG9wdGlvbiB2YWx1ZSBhbmQgYSBjaGlsZCBvcHRpb25cbiAgICogdmFsdWUgaW50byB0aGUgZmluYWwgdmFsdWUuXG4gICAqL1xuICB2YXIgc3RyYXRzID0gY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcblxuICAvKipcbiAgICogT3B0aW9ucyB3aXRoIHJlc3RyaWN0aW9uc1xuICAgKi9cbiAge1xuICAgIHN0cmF0cy5lbCA9IHN0cmF0cy5wcm9wc0RhdGEgPSBmdW5jdGlvbiAocGFyZW50LCBjaGlsZCwgdm0sIGtleSkge1xuICAgICAgaWYgKCF2bSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIFwib3B0aW9uIFxcXCJcIiArIGtleSArIFwiXFxcIiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnN0YW5jZSBcIiArXG4gICAgICAgICAgJ2NyZWF0aW9uIHdpdGggdGhlIGBuZXdgIGtleXdvcmQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZmF1bHRTdHJhdChwYXJlbnQsIGNoaWxkKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIHR3byBkYXRhIG9iamVjdHMgdG9nZXRoZXIuXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZURhdGEgKHRvLCBmcm9tKSB7XG4gICAgaWYgKCFmcm9tKSB7IHJldHVybiB0byB9XG4gICAgdmFyIGtleSwgdG9WYWwsIGZyb21WYWw7XG5cbiAgICB2YXIga2V5cyA9IGhhc1N5bWJvbFxuICAgICAgPyBSZWZsZWN0Lm93bktleXMoZnJvbSlcbiAgICAgIDogT2JqZWN0LmtleXMoZnJvbSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAvLyBpbiBjYXNlIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBvYnNlcnZlZC4uLlxuICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpIHsgY29udGludWUgfVxuICAgICAgdG9WYWwgPSB0b1trZXldO1xuICAgICAgZnJvbVZhbCA9IGZyb21ba2V5XTtcbiAgICAgIGlmICghaGFzT3duKHRvLCBrZXkpKSB7XG4gICAgICAgIHNldCh0bywga2V5LCBmcm9tVmFsKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRvVmFsICE9PSBmcm9tVmFsICYmXG4gICAgICAgIGlzUGxhaW5PYmplY3QodG9WYWwpICYmXG4gICAgICAgIGlzUGxhaW5PYmplY3QoZnJvbVZhbClcbiAgICAgICkge1xuICAgICAgICBtZXJnZURhdGEodG9WYWwsIGZyb21WYWwpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG9cbiAgfVxuXG4gIC8qKlxuICAgKiBEYXRhXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZURhdGFPckZuIChcbiAgICBwYXJlbnRWYWwsXG4gICAgY2hpbGRWYWwsXG4gICAgdm1cbiAgKSB7XG4gICAgaWYgKCF2bSkge1xuICAgICAgLy8gaW4gYSBWdWUuZXh0ZW5kIG1lcmdlLCBib3RoIHNob3VsZCBiZSBmdW5jdGlvbnNcbiAgICAgIGlmICghY2hpbGRWYWwpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgICAgfVxuICAgICAgaWYgKCFwYXJlbnRWYWwpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkVmFsXG4gICAgICB9XG4gICAgICAvLyB3aGVuIHBhcmVudFZhbCAmIGNoaWxkVmFsIGFyZSBib3RoIHByZXNlbnQsXG4gICAgICAvLyB3ZSBuZWVkIHRvIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgICAgIC8vIG1lcmdlZCByZXN1bHQgb2YgYm90aCBmdW5jdGlvbnMuLi4gbm8gbmVlZCB0b1xuICAgICAgLy8gY2hlY2sgaWYgcGFyZW50VmFsIGlzIGEgZnVuY3Rpb24gaGVyZSBiZWNhdXNlXG4gICAgICAvLyBpdCBoYXMgdG8gYmUgYSBmdW5jdGlvbiB0byBwYXNzIHByZXZpb3VzIG1lcmdlcy5cbiAgICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZWREYXRhRm4gKCkge1xuICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKFxuICAgICAgICAgIHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkVmFsLmNhbGwodGhpcywgdGhpcykgOiBjaGlsZFZhbCxcbiAgICAgICAgICB0eXBlb2YgcGFyZW50VmFsID09PSAnZnVuY3Rpb24nID8gcGFyZW50VmFsLmNhbGwodGhpcywgdGhpcykgOiBwYXJlbnRWYWxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4gKCkge1xuICAgICAgICAvLyBpbnN0YW5jZSBtZXJnZVxuICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gdHlwZW9mIGNoaWxkVmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgICA6IGNoaWxkVmFsO1xuICAgICAgICB2YXIgZGVmYXVsdERhdGEgPSB0eXBlb2YgcGFyZW50VmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgICAgOiBwYXJlbnRWYWw7XG4gICAgICAgIGlmIChpbnN0YW5jZURhdGEpIHtcbiAgICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGluc3RhbmNlRGF0YSwgZGVmYXVsdERhdGEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHREYXRhXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdHJhdHMuZGF0YSA9IGZ1bmN0aW9uIChcbiAgICBwYXJlbnRWYWwsXG4gICAgY2hpbGRWYWwsXG4gICAgdm1cbiAgKSB7XG4gICAgaWYgKCF2bSkge1xuICAgICAgaWYgKGNoaWxkVmFsICYmIHR5cGVvZiBjaGlsZFZhbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdUaGUgXCJkYXRhXCIgb3B0aW9uIHNob3VsZCBiZSBhIGZ1bmN0aW9uICcgK1xuICAgICAgICAgICd0aGF0IHJldHVybnMgYSBwZXItaW5zdGFuY2UgdmFsdWUgaW4gY29tcG9uZW50ICcgK1xuICAgICAgICAgICdkZWZpbml0aW9ucy4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgICAgfVxuICAgICAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbClcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSlcbiAgfTtcblxuICAvKipcbiAgICogSG9va3MgYW5kIHByb3BzIGFyZSBtZXJnZWQgYXMgYXJyYXlzLlxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VIb29rIChcbiAgICBwYXJlbnRWYWwsXG4gICAgY2hpbGRWYWxcbiAgKSB7XG4gICAgdmFyIHJlcyA9IGNoaWxkVmFsXG4gICAgICA/IHBhcmVudFZhbFxuICAgICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZFZhbClcbiAgICAgICAgICA/IGNoaWxkVmFsXG4gICAgICAgICAgOiBbY2hpbGRWYWxdXG4gICAgICA6IHBhcmVudFZhbDtcbiAgICByZXR1cm4gcmVzXG4gICAgICA/IGRlZHVwZUhvb2tzKHJlcylcbiAgICAgIDogcmVzXG4gIH1cblxuICBmdW5jdGlvbiBkZWR1cGVIb29rcyAoaG9va3MpIHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlcy5pbmRleE9mKGhvb2tzW2ldKSA9PT0gLTEpIHtcbiAgICAgICAgcmVzLnB1c2goaG9va3NbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBMSUZFQ1lDTEVfSE9PS1MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICAgIHN0cmF0c1tob29rXSA9IG1lcmdlSG9vaztcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFzc2V0c1xuICAgKlxuICAgKiBXaGVuIGEgdm0gaXMgcHJlc2VudCAoaW5zdGFuY2UgY3JlYXRpb24pLCB3ZSBuZWVkIHRvIGRvXG4gICAqIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gY29uc3RydWN0b3Igb3B0aW9ucywgaW5zdGFuY2VcbiAgICogb3B0aW9ucyBhbmQgcGFyZW50IG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZUFzc2V0cyAoXG4gICAgcGFyZW50VmFsLFxuICAgIGNoaWxkVmFsLFxuICAgIHZtLFxuICAgIGtleVxuICApIHtcbiAgICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCk7XG4gICAgaWYgKGNoaWxkVmFsKSB7XG4gICAgICBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgICAgIHJldHVybiBleHRlbmQocmVzLCBjaGlsZFZhbClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxuXG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFdhdGNoZXJzLlxuICAgKlxuICAgKiBXYXRjaGVycyBoYXNoZXMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgb25lXG4gICAqIGFub3RoZXIsIHNvIHdlIG1lcmdlIHRoZW0gYXMgYXJyYXlzLlxuICAgKi9cbiAgc3RyYXRzLndhdGNoID0gZnVuY3Rpb24gKFxuICAgIHBhcmVudFZhbCxcbiAgICBjaGlsZFZhbCxcbiAgICB2bSxcbiAgICBrZXlcbiAgKSB7XG4gICAgLy8gd29yayBhcm91bmQgRmlyZWZveCdzIE9iamVjdC5wcm90b3R5cGUud2F0Y2guLi5cbiAgICBpZiAocGFyZW50VmFsID09PSBuYXRpdmVXYXRjaCkgeyBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgICBpZiAoY2hpbGRWYWwgPT09IG5hdGl2ZVdhdGNoKSB7IGNoaWxkVmFsID0gdW5kZWZpbmVkOyB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGlsZFZhbCkgeyByZXR1cm4gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCkgfVxuICAgIHtcbiAgICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIH1cbiAgICBpZiAoIXBhcmVudFZhbCkgeyByZXR1cm4gY2hpbGRWYWwgfVxuICAgIHZhciByZXQgPSB7fTtcbiAgICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICAgIGZvciAodmFyIGtleSQxIGluIGNoaWxkVmFsKSB7XG4gICAgICB2YXIgcGFyZW50ID0gcmV0W2tleSQxXTtcbiAgICAgIHZhciBjaGlsZCA9IGNoaWxkVmFsW2tleSQxXTtcbiAgICAgIGlmIChwYXJlbnQgJiYgIUFycmF5LmlzQXJyYXkocGFyZW50KSkge1xuICAgICAgICBwYXJlbnQgPSBbcGFyZW50XTtcbiAgICAgIH1cbiAgICAgIHJldFtrZXkkMV0gPSBwYXJlbnRcbiAgICAgICAgPyBwYXJlbnQuY29uY2F0KGNoaWxkKVxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGQpID8gY2hpbGQgOiBbY2hpbGRdO1xuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH07XG5cbiAgLyoqXG4gICAqIE90aGVyIG9iamVjdCBoYXNoZXMuXG4gICAqL1xuICBzdHJhdHMucHJvcHMgPVxuICBzdHJhdHMubWV0aG9kcyA9XG4gIHN0cmF0cy5pbmplY3QgPVxuICBzdHJhdHMuY29tcHV0ZWQgPSBmdW5jdGlvbiAoXG4gICAgcGFyZW50VmFsLFxuICAgIGNoaWxkVmFsLFxuICAgIHZtLFxuICAgIGtleVxuICApIHtcbiAgICBpZiAoY2hpbGRWYWwgJiYgXCJkZXZlbG9wbWVudFwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIH1cbiAgICBpZiAoIXBhcmVudFZhbCkgeyByZXR1cm4gY2hpbGRWYWwgfVxuICAgIHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gICAgaWYgKGNoaWxkVmFsKSB7IGV4dGVuZChyZXQsIGNoaWxkVmFsKTsgfVxuICAgIHJldHVybiByZXRcbiAgfTtcbiAgc3RyYXRzLnByb3ZpZGUgPSBtZXJnZURhdGFPckZuO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHN0cmF0ZWd5LlxuICAgKi9cbiAgdmFyIGRlZmF1bHRTdHJhdCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgcmV0dXJuIGNoaWxkVmFsID09PSB1bmRlZmluZWRcbiAgICAgID8gcGFyZW50VmFsXG4gICAgICA6IGNoaWxkVmFsXG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGNvbXBvbmVudCBuYW1lc1xuICAgKi9cbiAgZnVuY3Rpb24gY2hlY2tDb21wb25lbnRzIChvcHRpb25zKSB7XG4gICAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMuY29tcG9uZW50cykge1xuICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGtleSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVDb21wb25lbnROYW1lIChuYW1lKSB7XG4gICAgaWYgKCFuZXcgUmVnRXhwKChcIl5bYS16QS1aXVtcXFxcLVxcXFwuMC05X1wiICsgKHVuaWNvZGVSZWdFeHAuc291cmNlKSArIFwiXSokXCIpKS50ZXN0KG5hbWUpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnSW52YWxpZCBjb21wb25lbnQgbmFtZTogXCInICsgbmFtZSArICdcIi4gQ29tcG9uZW50IG5hbWVzICcgK1xuICAgICAgICAnc2hvdWxkIGNvbmZvcm0gdG8gdmFsaWQgY3VzdG9tIGVsZW1lbnQgbmFtZSBpbiBodG1sNSBzcGVjaWZpY2F0aW9uLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc0J1aWx0SW5UYWcobmFtZSkgfHwgY29uZmlnLmlzUmVzZXJ2ZWRUYWcobmFtZSkpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwgZWxlbWVudHMgYXMgY29tcG9uZW50ICcgK1xuICAgICAgICAnaWQ6ICcgKyBuYW1lXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAgICogT2JqZWN0LWJhc2VkIGZvcm1hdC5cbiAgICovXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzIChvcHRpb25zLCB2bSkge1xuICAgIHZhciBwcm9wcyA9IG9wdGlvbnMucHJvcHM7XG4gICAgaWYgKCFwcm9wcykgeyByZXR1cm4gfVxuICAgIHZhciByZXMgPSB7fTtcbiAgICB2YXIgaSwgdmFsLCBuYW1lO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BzKSkge1xuICAgICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgdmFsID0gcHJvcHNbaV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG5hbWUgPSBjYW1lbGl6ZSh2YWwpO1xuICAgICAgICAgIHJlc1tuYW1lXSA9IHsgdHlwZTogbnVsbCB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdhcm4oJ3Byb3BzIG11c3QgYmUgc3RyaW5ncyB3aGVuIHVzaW5nIGFycmF5IHN5bnRheC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICB2YWwgPSBwcm9wc1trZXldO1xuICAgICAgICBuYW1lID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgcmVzW25hbWVdID0gaXNQbGFpbk9iamVjdCh2YWwpXG4gICAgICAgICAgPyB2YWxcbiAgICAgICAgICA6IHsgdHlwZTogdmFsIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJwcm9wc1xcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKHByb3BzKSkgKyBcIi5cIixcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuICAgIG9wdGlvbnMucHJvcHMgPSByZXM7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGludG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxuICAgKi9cbiAgZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0IChvcHRpb25zLCB2bSkge1xuICAgIHZhciBpbmplY3QgPSBvcHRpb25zLmluamVjdDtcbiAgICBpZiAoIWluamVjdCkgeyByZXR1cm4gfVxuICAgIHZhciBub3JtYWxpemVkID0gb3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbmplY3QpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChpbmplY3QpKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gaW5qZWN0KSB7XG4gICAgICAgIHZhciB2YWwgPSBpbmplY3Rba2V5XTtcbiAgICAgICAgbm9ybWFsaXplZFtrZXldID0gaXNQbGFpbk9iamVjdCh2YWwpXG4gICAgICAgICAgPyBleHRlbmQoeyBmcm9tOiBrZXkgfSwgdmFsKVxuICAgICAgICAgIDogeyBmcm9tOiB2YWwgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2FybihcbiAgICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcImluamVjdFxcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKGluamVjdCkpICsgXCIuXCIsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemUgcmF3IGZ1bmN0aW9uIGRpcmVjdGl2ZXMgaW50byBvYmplY3QgZm9ybWF0LlxuICAgKi9cbiAgZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyAob3B0aW9ucykge1xuICAgIHZhciBkaXJzID0gb3B0aW9ucy5kaXJlY3RpdmVzO1xuICAgIGlmIChkaXJzKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gZGlycykge1xuICAgICAgICB2YXIgZGVmJCQxID0gZGlyc1trZXldO1xuICAgICAgICBpZiAodHlwZW9mIGRlZiQkMSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGRpcnNba2V5XSA9IHsgYmluZDogZGVmJCQxLCB1cGRhdGU6IGRlZiQkMSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXNzZXJ0T2JqZWN0VHlwZSAobmFtZSwgdmFsdWUsIHZtKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcIlwiICsgbmFtZSArIFwiXFxcIjogZXhwZWN0ZWQgYW4gT2JqZWN0LCBcIiArXG4gICAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUodmFsdWUpKSArIFwiLlwiLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgdHdvIG9wdGlvbiBvYmplY3RzIGludG8gYSBuZXcgb25lLlxuICAgKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VPcHRpb25zIChcbiAgICBwYXJlbnQsXG4gICAgY2hpbGQsXG4gICAgdm1cbiAgKSB7XG4gICAge1xuICAgICAgY2hlY2tDb21wb25lbnRzKGNoaWxkKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkLm9wdGlvbnM7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplUHJvcHMoY2hpbGQsIHZtKTtcbiAgICBub3JtYWxpemVJbmplY3QoY2hpbGQsIHZtKTtcbiAgICBub3JtYWxpemVEaXJlY3RpdmVzKGNoaWxkKTtcblxuICAgIC8vIEFwcGx5IGV4dGVuZHMgYW5kIG1peGlucyBvbiB0aGUgY2hpbGQgb3B0aW9ucyxcbiAgICAvLyBidXQgb25seSBpZiBpdCBpcyBhIHJhdyBvcHRpb25zIG9iamVjdCB0aGF0IGlzbid0XG4gICAgLy8gdGhlIHJlc3VsdCBvZiBhbm90aGVyIG1lcmdlT3B0aW9ucyBjYWxsLlxuICAgIC8vIE9ubHkgbWVyZ2VkIG9wdGlvbnMgaGFzIHRoZSBfYmFzZSBwcm9wZXJ0eS5cbiAgICBpZiAoIWNoaWxkLl9iYXNlKSB7XG4gICAgICBpZiAoY2hpbGQuZXh0ZW5kcykge1xuICAgICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5leHRlbmRzLCB2bSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQubWl4aW5zKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLm1peGluc1tpXSwgdm0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIga2V5O1xuICAgIGZvciAoa2V5IGluIHBhcmVudCkge1xuICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgICAgaWYgKCFoYXNPd24ocGFyZW50LCBrZXkpKSB7XG4gICAgICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbWVyZ2VGaWVsZCAoa2V5KSB7XG4gICAgICB2YXIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQ7XG4gICAgICBvcHRpb25zW2tleV0gPSBzdHJhdChwYXJlbnRba2V5XSwgY2hpbGRba2V5XSwgdm0sIGtleSk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhbiBhc3NldC5cbiAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJlY2F1c2UgY2hpbGQgaW5zdGFuY2VzIG5lZWQgYWNjZXNzXG4gICAqIHRvIGFzc2V0cyBkZWZpbmVkIGluIGl0cyBhbmNlc3RvciBjaGFpbi5cbiAgICovXG4gIGZ1bmN0aW9uIHJlc29sdmVBc3NldCAoXG4gICAgb3B0aW9ucyxcbiAgICB0eXBlLFxuICAgIGlkLFxuICAgIHdhcm5NaXNzaW5nXG4gICkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIGFzc2V0cyA9IG9wdGlvbnNbdHlwZV07XG4gICAgLy8gY2hlY2sgbG9jYWwgcmVnaXN0cmF0aW9uIHZhcmlhdGlvbnMgZmlyc3RcbiAgICBpZiAoaGFzT3duKGFzc2V0cywgaWQpKSB7IHJldHVybiBhc3NldHNbaWRdIH1cbiAgICB2YXIgY2FtZWxpemVkSWQgPSBjYW1lbGl6ZShpZCk7XG4gICAgaWYgKGhhc093bihhc3NldHMsIGNhbWVsaXplZElkKSkgeyByZXR1cm4gYXNzZXRzW2NhbWVsaXplZElkXSB9XG4gICAgdmFyIFBhc2NhbENhc2VJZCA9IGNhcGl0YWxpemUoY2FtZWxpemVkSWQpO1xuICAgIGlmIChoYXNPd24oYXNzZXRzLCBQYXNjYWxDYXNlSWQpKSB7IHJldHVybiBhc3NldHNbUGFzY2FsQ2FzZUlkXSB9XG4gICAgLy8gZmFsbGJhY2sgdG8gcHJvdG90eXBlIGNoYWluXG4gICAgdmFyIHJlcyA9IGFzc2V0c1tpZF0gfHwgYXNzZXRzW2NhbWVsaXplZElkXSB8fCBhc3NldHNbUGFzY2FsQ2FzZUlkXTtcbiAgICBpZiAod2Fybk1pc3NpbmcgJiYgIXJlcykge1xuICAgICAgd2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byByZXNvbHZlICcgKyB0eXBlLnNsaWNlKDAsIC0xKSArICc6ICcgKyBpZCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgLyogICovXG5cblxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlUHJvcCAoXG4gICAga2V5LFxuICAgIHByb3BPcHRpb25zLFxuICAgIHByb3BzRGF0YSxcbiAgICB2bVxuICApIHtcbiAgICB2YXIgcHJvcCA9IHByb3BPcHRpb25zW2tleV07XG4gICAgdmFyIGFic2VudCA9ICFoYXNPd24ocHJvcHNEYXRhLCBrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHByb3BzRGF0YVtrZXldO1xuICAgIC8vIGJvb2xlYW4gY2FzdGluZ1xuICAgIHZhciBib29sZWFuSW5kZXggPSBnZXRUeXBlSW5kZXgoQm9vbGVhbiwgcHJvcC50eXBlKTtcbiAgICBpZiAoYm9vbGVhbkluZGV4ID4gLTEpIHtcbiAgICAgIGlmIChhYnNlbnQgJiYgIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gaHlwaGVuYXRlKGtleSkpIHtcbiAgICAgICAgLy8gb25seSBjYXN0IGVtcHR5IHN0cmluZyAvIHNhbWUgbmFtZSB0byBib29sZWFuIGlmXG4gICAgICAgIC8vIGJvb2xlYW4gaGFzIGhpZ2hlciBwcmlvcml0eVxuICAgICAgICB2YXIgc3RyaW5nSW5kZXggPSBnZXRUeXBlSW5kZXgoU3RyaW5nLCBwcm9wLnR5cGUpO1xuICAgICAgICBpZiAoc3RyaW5nSW5kZXggPCAwIHx8IGJvb2xlYW5JbmRleCA8IHN0cmluZ0luZGV4KSB7XG4gICAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNoZWNrIGRlZmF1bHQgdmFsdWVcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWUgPSBnZXRQcm9wRGVmYXVsdFZhbHVlKHZtLCBwcm9wLCBrZXkpO1xuICAgICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBmcmVzaCBjb3B5LFxuICAgICAgLy8gbWFrZSBzdXJlIHRvIG9ic2VydmUgaXQuXG4gICAgICB2YXIgcHJldlNob3VsZE9ic2VydmUgPSBzaG91bGRPYnNlcnZlO1xuICAgICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgICAgb2JzZXJ2ZSh2YWx1ZSk7XG4gICAgICB0b2dnbGVPYnNlcnZpbmcocHJldlNob3VsZE9ic2VydmUpO1xuICAgIH1cbiAgICB7XG4gICAgICBhc3NlcnRQcm9wKHByb3AsIGtleSwgdmFsdWUsIHZtLCBhYnNlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYSBwcm9wLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSAodm0sIHByb3AsIGtleSkge1xuICAgIC8vIG5vIGRlZmF1bHQsIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIHZhciBkZWYgPSBwcm9wLmRlZmF1bHQ7XG4gICAgLy8gd2FybiBhZ2FpbnN0IG5vbi1mYWN0b3J5IGRlZmF1bHRzIGZvciBPYmplY3QgJiBBcnJheVxuICAgIGlmIChpc09iamVjdChkZWYpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArIGtleSArICdcIjogJyArXG4gICAgICAgICdQcm9wcyB3aXRoIHR5cGUgT2JqZWN0L0FycmF5IG11c3QgdXNlIGEgZmFjdG9yeSBmdW5jdGlvbiAnICtcbiAgICAgICAgJ3RvIHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZS4nLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gdGhlIHJhdyBwcm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgICAvLyByZXR1cm4gcHJldmlvdXMgZGVmYXVsdCB2YWx1ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3YXRjaGVyIHRyaWdnZXJcbiAgICBpZiAodm0gJiYgdm0uJG9wdGlvbnMucHJvcHNEYXRhICYmXG4gICAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGFba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICB2bS5fcHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gdm0uX3Byb3BzW2tleV1cbiAgICB9XG4gICAgLy8gY2FsbCBmYWN0b3J5IGZ1bmN0aW9uIGZvciBub24tRnVuY3Rpb24gdHlwZXNcbiAgICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gICAgcmV0dXJuIHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicgJiYgZ2V0VHlwZShwcm9wLnR5cGUpICE9PSAnRnVuY3Rpb24nXG4gICAgICA/IGRlZi5jYWxsKHZtKVxuICAgICAgOiBkZWZcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlcnQgd2hldGhlciBhIHByb3AgaXMgdmFsaWQuXG4gICAqL1xuICBmdW5jdGlvbiBhc3NlcnRQcm9wIChcbiAgICBwcm9wLFxuICAgIG5hbWUsXG4gICAgdmFsdWUsXG4gICAgdm0sXG4gICAgYWJzZW50XG4gICkge1xuICAgIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ01pc3NpbmcgcmVxdWlyZWQgcHJvcDogXCInICsgbmFtZSArICdcIicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PSBudWxsICYmICFwcm9wLnJlcXVpcmVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIHR5cGUgPSBwcm9wLnR5cGU7XG4gICAgdmFyIHZhbGlkID0gIXR5cGUgfHwgdHlwZSA9PT0gdHJ1ZTtcbiAgICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodHlwZSkpIHtcbiAgICAgICAgdHlwZSA9IFt0eXBlXTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZS5sZW5ndGggJiYgIXZhbGlkOyBpKyspIHtcbiAgICAgICAgdmFyIGFzc2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0pO1xuICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goYXNzZXJ0ZWRUeXBlLmV4cGVjdGVkVHlwZSB8fCAnJyk7XG4gICAgICAgIHZhbGlkID0gYXNzZXJ0ZWRUeXBlLnZhbGlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdmFsaWQpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcyksXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciB2YWxpZGF0b3IgPSBwcm9wLnZhbGlkYXRvcjtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBpZiAoIXZhbGlkYXRvcih2YWx1ZSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIicgKyBuYW1lICsgJ1wiLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgc2ltcGxlQ2hlY2tSRSA9IC9eKFN0cmluZ3xOdW1iZXJ8Qm9vbGVhbnxGdW5jdGlvbnxTeW1ib2wpJC87XG5cbiAgZnVuY3Rpb24gYXNzZXJ0VHlwZSAodmFsdWUsIHR5cGUpIHtcbiAgICB2YXIgdmFsaWQ7XG4gICAgdmFyIGV4cGVjdGVkVHlwZSA9IGdldFR5cGUodHlwZSk7XG4gICAgaWYgKHNpbXBsZUNoZWNrUkUudGVzdChleHBlY3RlZFR5cGUpKSB7XG4gICAgICB2YXIgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIHZhbGlkID0gdCA9PT0gZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAvLyBmb3IgcHJpbWl0aXZlIHdyYXBwZXIgb2JqZWN0c1xuICAgICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICAgIHZhbGlkID0gaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09ICdBcnJheScpIHtcbiAgICAgIHZhbGlkID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkID0gdmFsdWUgaW5zdGFuY2VvZiB0eXBlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IHZhbGlkLFxuICAgICAgZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXNlIGZ1bmN0aW9uIHN0cmluZyBuYW1lIHRvIGNoZWNrIGJ1aWx0LWluIHR5cGVzLFxuICAgKiBiZWNhdXNlIGEgc2ltcGxlIGVxdWFsaXR5IGNoZWNrIHdpbGwgZmFpbCB3aGVuIHJ1bm5pbmdcbiAgICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0VHlwZSAoZm4pIHtcbiAgICB2YXIgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJydcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU2FtZVR5cGUgKGEsIGIpIHtcbiAgICByZXR1cm4gZ2V0VHlwZShhKSA9PT0gZ2V0VHlwZShiKVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VHlwZUluZGV4ICh0eXBlLCBleHBlY3RlZFR5cGVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVHlwZXMpKSB7XG4gICAgICByZXR1cm4gaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzLCB0eXBlKSA/IDAgOiAtMVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGlzU2FtZVR5cGUoZXhwZWN0ZWRUeXBlc1tpXSwgdHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIGlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xXG4gIH1cblxuICBmdW5jdGlvbiBnZXRJbnZhbGlkVHlwZU1lc3NhZ2UgKG5hbWUsIHZhbHVlLCBleHBlY3RlZFR5cGVzKSB7XG4gICAgdmFyIG1lc3NhZ2UgPSBcIkludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXFxcIlwiICsgbmFtZSArIFwiXFxcIi5cIiArXG4gICAgICBcIiBFeHBlY3RlZCBcIiArIChleHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKCcsICcpKTtcbiAgICB2YXIgZXhwZWN0ZWRUeXBlID0gZXhwZWN0ZWRUeXBlc1swXTtcbiAgICB2YXIgcmVjZWl2ZWRUeXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgICB2YXIgZXhwZWN0ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIGV4cGVjdGVkVHlwZSk7XG4gICAgdmFyIHJlY2VpdmVkVmFsdWUgPSBzdHlsZVZhbHVlKHZhbHVlLCByZWNlaXZlZFR5cGUpO1xuICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSBleHBlY3RlZCB2YWx1ZVxuICAgIGlmIChleHBlY3RlZFR5cGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBpc0V4cGxpY2FibGUoZXhwZWN0ZWRUeXBlKSAmJlxuICAgICAgICAhaXNCb29sZWFuKGV4cGVjdGVkVHlwZSwgcmVjZWl2ZWRUeXBlKSkge1xuICAgICAgbWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlIFwiICsgZXhwZWN0ZWRWYWx1ZTtcbiAgICB9XG4gICAgbWVzc2FnZSArPSBcIiwgZ290IFwiICsgcmVjZWl2ZWRUeXBlICsgXCIgXCI7XG4gICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IHJlY2VpdmVkIHZhbHVlXG4gICAgaWYgKGlzRXhwbGljYWJsZShyZWNlaXZlZFR5cGUpKSB7XG4gICAgICBtZXNzYWdlICs9IFwid2l0aCB2YWx1ZSBcIiArIHJlY2VpdmVkVmFsdWUgKyBcIi5cIjtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0eWxlVmFsdWUgKHZhbHVlLCB0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdTdHJpbmcnKSB7XG4gICAgICByZXR1cm4gKFwiXFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIilcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdOdW1iZXInKSB7XG4gICAgICByZXR1cm4gKFwiXCIgKyAoTnVtYmVyKHZhbHVlKSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXCJcIiArIHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRXhwbGljYWJsZSAodmFsdWUpIHtcbiAgICB2YXIgZXhwbGljaXRUeXBlcyA9IFsnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJ107XG4gICAgcmV0dXJuIGV4cGxpY2l0VHlwZXMuc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gZWxlbTsgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQm9vbGVhbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgcmV0dXJuIGFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gZWxlbS50b0xvd2VyQ2FzZSgpID09PSAnYm9vbGVhbic7IH0pXG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBoYW5kbGVFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICAgIC8vIERlYWN0aXZhdGUgZGVwcyB0cmFja2luZyB3aGlsZSBwcm9jZXNzaW5nIGVycm9yIGhhbmRsZXIgdG8gYXZvaWQgcG9zc2libGUgaW5maW5pdGUgcmVuZGVyaW5nLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZXgvaXNzdWVzLzE1MDVcbiAgICBwdXNoVGFyZ2V0KCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh2bSkge1xuICAgICAgICB2YXIgY3VyID0gdm07XG4gICAgICAgIHdoaWxlICgoY3VyID0gY3VyLiRwYXJlbnQpKSB7XG4gICAgICAgICAgdmFyIGhvb2tzID0gY3VyLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7XG4gICAgICAgICAgaWYgKGhvb2tzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGNhcHR1cmUgPSBob29rc1tpXS5jYWxsKGN1ciwgZXJyLCB2bSwgaW5mbykgPT09IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7IHJldHVybiB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWxIYW5kbGVFcnJvcihlLCBjdXIsICdlcnJvckNhcHR1cmVkIGhvb2snKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2xvYmFsSGFuZGxlRXJyb3IoZXJyLCB2bSwgaW5mbyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHBvcFRhcmdldCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZVdpdGhFcnJvckhhbmRsaW5nIChcbiAgICBoYW5kbGVyLFxuICAgIGNvbnRleHQsXG4gICAgYXJncyxcbiAgICB2bSxcbiAgICBpbmZvXG4gICkge1xuICAgIHZhciByZXM7XG4gICAgdHJ5IHtcbiAgICAgIHJlcyA9IGFyZ3MgPyBoYW5kbGVyLmFwcGx5KGNvbnRleHQsIGFyZ3MpIDogaGFuZGxlci5jYWxsKGNvbnRleHQpO1xuICAgICAgaWYgKHJlcyAmJiAhcmVzLl9pc1Z1ZSAmJiBpc1Byb21pc2UocmVzKSAmJiAhcmVzLl9oYW5kbGVkKSB7XG4gICAgICAgIHJlcy5jYXRjaChmdW5jdGlvbiAoZSkgeyByZXR1cm4gaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8gKyBcIiAoUHJvbWlzZS9hc3luYylcIik7IH0pO1xuICAgICAgICAvLyBpc3N1ZSAjOTUxMVxuICAgICAgICAvLyBhdm9pZCBjYXRjaCB0cmlnZ2VyaW5nIG11bHRpcGxlIHRpbWVzIHdoZW4gbmVzdGVkIGNhbGxzXG4gICAgICAgIHJlcy5faGFuZGxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBmdW5jdGlvbiBnbG9iYWxIYW5kbGVFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICAgIGlmIChjb25maWcuZXJyb3JIYW5kbGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY29uZmlnLmVycm9ySGFuZGxlci5jYWxsKG51bGwsIGVyciwgdm0sIGluZm8pXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlmIHRoZSB1c2VyIGludGVudGlvbmFsbHkgdGhyb3dzIHRoZSBvcmlnaW5hbCBlcnJvciBpbiB0aGUgaGFuZGxlcixcbiAgICAgICAgLy8gZG8gbm90IGxvZyBpdCB0d2ljZVxuICAgICAgICBpZiAoZSAhPT0gZXJyKSB7XG4gICAgICAgICAgbG9nRXJyb3IoZSwgbnVsbCwgJ2NvbmZpZy5lcnJvckhhbmRsZXInKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsb2dFcnJvcihlcnIsIHZtLCBpbmZvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvZ0Vycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gICAge1xuICAgICAgd2FybigoXCJFcnJvciBpbiBcIiArIGluZm8gKyBcIjogXFxcIlwiICsgKGVyci50b1N0cmluZygpKSArIFwiXFxcIlwiKSwgdm0pO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICgoaW5Ccm93c2VyIHx8IGluV2VleCkgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIHZhciBpc1VzaW5nTWljcm9UYXNrID0gZmFsc2U7XG5cbiAgdmFyIGNhbGxiYWNrcyA9IFtdO1xuICB2YXIgcGVuZGluZyA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGZsdXNoQ2FsbGJhY2tzICgpIHtcbiAgICBwZW5kaW5nID0gZmFsc2U7XG4gICAgdmFyIGNvcGllcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcbiAgICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvcGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29waWVzW2ldKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gSGVyZSB3ZSBoYXZlIGFzeW5jIGRlZmVycmluZyB3cmFwcGVycyB1c2luZyBtaWNyb3Rhc2tzLlxuICAvLyBJbiAyLjUgd2UgdXNlZCAobWFjcm8pIHRhc2tzIChpbiBjb21iaW5hdGlvbiB3aXRoIG1pY3JvdGFza3MpLlxuICAvLyBIb3dldmVyLCBpdCBoYXMgc3VidGxlIHByb2JsZW1zIHdoZW4gc3RhdGUgaXMgY2hhbmdlZCByaWdodCBiZWZvcmUgcmVwYWludFxuICAvLyAoZS5nLiAjNjgxMywgb3V0LWluIHRyYW5zaXRpb25zKS5cbiAgLy8gQWxzbywgdXNpbmcgKG1hY3JvKSB0YXNrcyBpbiBldmVudCBoYW5kbGVyIHdvdWxkIGNhdXNlIHNvbWUgd2VpcmQgYmVoYXZpb3JzXG4gIC8vIHRoYXQgY2Fubm90IGJlIGNpcmN1bXZlbnRlZCAoZS5nLiAjNzEwOSwgIzcxNTMsICM3NTQ2LCAjNzgzNCwgIzgxMDkpLlxuICAvLyBTbyB3ZSBub3cgdXNlIG1pY3JvdGFza3MgZXZlcnl3aGVyZSwgYWdhaW4uXG4gIC8vIEEgbWFqb3IgZHJhd2JhY2sgb2YgdGhpcyB0cmFkZW9mZiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHNjZW5hcmlvc1xuICAvLyB3aGVyZSBtaWNyb3Rhc2tzIGhhdmUgdG9vIGhpZ2ggYSBwcmlvcml0eSBhbmQgZmlyZSBpbiBiZXR3ZWVuIHN1cHBvc2VkbHlcbiAgLy8gc2VxdWVudGlhbCBldmVudHMgKGUuZy4gIzQ1MjEsICM2NjkwLCB3aGljaCBoYXZlIHdvcmthcm91bmRzKVxuICAvLyBvciBldmVuIGJldHdlZW4gYnViYmxpbmcgb2YgdGhlIHNhbWUgZXZlbnQgKCM2NTY2KS5cbiAgdmFyIHRpbWVyRnVuYztcblxuICAvLyBUaGUgbmV4dFRpY2sgYmVoYXZpb3IgbGV2ZXJhZ2VzIHRoZSBtaWNyb3Rhc2sgcXVldWUsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZFxuICAvLyB2aWEgZWl0aGVyIG5hdGl2ZSBQcm9taXNlLnRoZW4gb3IgTXV0YXRpb25PYnNlcnZlci5cbiAgLy8gTXV0YXRpb25PYnNlcnZlciBoYXMgd2lkZXIgc3VwcG9ydCwgaG93ZXZlciBpdCBpcyBzZXJpb3VzbHkgYnVnZ2VkIGluXG4gIC8vIFVJV2ViVmlldyBpbiBpT1MgPj0gOS4zLjMgd2hlbiB0cmlnZ2VyZWQgaW4gdG91Y2ggZXZlbnQgaGFuZGxlcnMuIEl0XG4gIC8vIGNvbXBsZXRlbHkgc3RvcHMgd29ya2luZyBhZnRlciB0cmlnZ2VyaW5nIGEgZmV3IHRpbWVzLi4uIHNvLCBpZiBuYXRpdmVcbiAgLy8gUHJvbWlzZSBpcyBhdmFpbGFibGUsIHdlIHdpbGwgdXNlIGl0OlxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCwgJGZsb3ctZGlzYWJsZS1saW5lICovXG4gIGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJvbWlzZSkpIHtcbiAgICB2YXIgcCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHAudGhlbihmbHVzaENhbGxiYWNrcyk7XG4gICAgICAvLyBJbiBwcm9ibGVtYXRpYyBVSVdlYlZpZXdzLCBQcm9taXNlLnRoZW4gZG9lc24ndCBjb21wbGV0ZWx5IGJyZWFrLCBidXRcbiAgICAgIC8vIGl0IGNhbiBnZXQgc3R1Y2sgaW4gYSB3ZWlyZCBzdGF0ZSB3aGVyZSBjYWxsYmFja3MgYXJlIHB1c2hlZCBpbnRvIHRoZVxuICAgICAgLy8gbWljcm90YXNrIHF1ZXVlIGJ1dCB0aGUgcXVldWUgaXNuJ3QgYmVpbmcgZmx1c2hlZCwgdW50aWwgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG5lZWRzIHRvIGRvIHNvbWUgb3RoZXIgd29yaywgZS5nLiBoYW5kbGUgYSB0aW1lci4gVGhlcmVmb3JlIHdlIGNhblxuICAgICAgLy8gXCJmb3JjZVwiIHRoZSBtaWNyb3Rhc2sgcXVldWUgdG8gYmUgZmx1c2hlZCBieSBhZGRpbmcgYW4gZW1wdHkgdGltZXIuXG4gICAgICBpZiAoaXNJT1MpIHsgc2V0VGltZW91dChub29wKTsgfVxuICAgIH07XG4gICAgaXNVc2luZ01pY3JvVGFzayA9IHRydWU7XG4gIH0gZWxzZSBpZiAoIWlzSUUgJiYgdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnICYmIChcbiAgICBpc05hdGl2ZShNdXRhdGlvbk9ic2VydmVyKSB8fFxuICAgIC8vIFBoYW50b21KUyBhbmQgaU9TIDcueFxuICAgIE11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXSdcbiAgKSkge1xuICAgIC8vIFVzZSBNdXRhdGlvbk9ic2VydmVyIHdoZXJlIG5hdGl2ZSBQcm9taXNlIGlzIG5vdCBhdmFpbGFibGUsXG4gICAgLy8gZS5nLiBQaGFudG9tSlMsIGlPUzcsIEFuZHJvaWQgNC40XG4gICAgLy8gKCM2NDY2IE11dGF0aW9uT2JzZXJ2ZXIgaXMgdW5yZWxpYWJsZSBpbiBJRTExKVxuICAgIHZhciBjb3VudGVyID0gMTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaENhbGxiYWNrcyk7XG4gICAgdmFyIHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGNvdW50ZXIpKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKHRleHROb2RlLCB7XG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgfSk7XG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgY291bnRlciA9IChjb3VudGVyICsgMSkgJSAyO1xuICAgICAgdGV4dE5vZGUuZGF0YSA9IFN0cmluZyhjb3VudGVyKTtcbiAgICB9O1xuICAgIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKHNldEltbWVkaWF0ZSkpIHtcbiAgICAvLyBGYWxsYmFjayB0byBzZXRJbW1lZGlhdGUuXG4gICAgLy8gVGVjaG5pY2FsbHkgaXQgbGV2ZXJhZ2VzIHRoZSAobWFjcm8pIHRhc2sgcXVldWUsXG4gICAgLy8gYnV0IGl0IGlzIHN0aWxsIGEgYmV0dGVyIGNob2ljZSB0aGFuIHNldFRpbWVvdXQuXG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2V0SW1tZWRpYXRlKGZsdXNoQ2FsbGJhY2tzKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrIHRvIHNldFRpbWVvdXQuXG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2V0VGltZW91dChmbHVzaENhbGxiYWNrcywgMCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHRUaWNrIChjYiwgY3R4KSB7XG4gICAgdmFyIF9yZXNvbHZlO1xuICAgIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChjYikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNiLmNhbGwoY3R4KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIGN0eCwgJ25leHRUaWNrJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoX3Jlc29sdmUpIHtcbiAgICAgICAgX3Jlc29sdmUoY3R4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSB0cnVlO1xuICAgICAgdGltZXJGdW5jKCk7XG4gICAgfVxuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIGlmICghY2IgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgbWFyaztcbiAgdmFyIG1lYXN1cmU7XG5cbiAge1xuICAgIHZhciBwZXJmID0gaW5Ccm93c2VyICYmIHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoXG4gICAgICBwZXJmICYmXG4gICAgICBwZXJmLm1hcmsgJiZcbiAgICAgIHBlcmYubWVhc3VyZSAmJlxuICAgICAgcGVyZi5jbGVhck1hcmtzICYmXG4gICAgICBwZXJmLmNsZWFyTWVhc3VyZXNcbiAgICApIHtcbiAgICAgIG1hcmsgPSBmdW5jdGlvbiAodGFnKSB7IHJldHVybiBwZXJmLm1hcmsodGFnKTsgfTtcbiAgICAgIG1lYXN1cmUgPSBmdW5jdGlvbiAobmFtZSwgc3RhcnRUYWcsIGVuZFRhZykge1xuICAgICAgICBwZXJmLm1lYXN1cmUobmFtZSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICAgIHBlcmYuY2xlYXJNYXJrcyhzdGFydFRhZyk7XG4gICAgICAgIHBlcmYuY2xlYXJNYXJrcyhlbmRUYWcpO1xuICAgICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoIFByb3h5ICovXG5cbiAgdmFyIGluaXRQcm94eTtcblxuICB7XG4gICAgdmFyIGFsbG93ZWRHbG9iYWxzID0gbWFrZU1hcChcbiAgICAgICdJbmZpbml0eSx1bmRlZmluZWQsTmFOLGlzRmluaXRlLGlzTmFOLCcgK1xuICAgICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xuICAgICAgJ01hdGgsTnVtYmVyLERhdGUsQXJyYXksT2JqZWN0LEJvb2xlYW4sU3RyaW5nLFJlZ0V4cCxNYXAsU2V0LEpTT04sSW50bCwnICtcbiAgICAgICdyZXF1aXJlJyAvLyBmb3IgV2VicGFjay9Ccm93c2VyaWZ5XG4gICAgKTtcblxuICAgIHZhciB3YXJuTm9uUHJlc2VudCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgd2FybihcbiAgICAgICAgXCJQcm9wZXJ0eSBvciBtZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBpbnN0YW5jZSBidXQgXCIgK1xuICAgICAgICAncmVmZXJlbmNlZCBkdXJpbmcgcmVuZGVyLiBNYWtlIHN1cmUgdGhhdCB0aGlzIHByb3BlcnR5IGlzIHJlYWN0aXZlLCAnICtcbiAgICAgICAgJ2VpdGhlciBpbiB0aGUgZGF0YSBvcHRpb24sIG9yIGZvciBjbGFzcy1iYXNlZCBjb21wb25lbnRzLCBieSAnICtcbiAgICAgICAgJ2luaXRpYWxpemluZyB0aGUgcHJvcGVydHkuICcgK1xuICAgICAgICAnU2VlOiBodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS9yZWFjdGl2aXR5Lmh0bWwjRGVjbGFyaW5nLVJlYWN0aXZlLVByb3BlcnRpZXMuJyxcbiAgICAgICAgdGFyZ2V0XG4gICAgICApO1xuICAgIH07XG5cbiAgICB2YXIgd2FyblJlc2VydmVkUHJlZml4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIlByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggXFxcIiRkYXRhLlwiICsga2V5ICsgXCJcXFwiIGJlY2F1c2UgXCIgK1xuICAgICAgICAncHJvcGVydGllcyBzdGFydGluZyB3aXRoIFwiJFwiIG9yIFwiX1wiIGFyZSBub3QgcHJveGllZCBpbiB0aGUgVnVlIGluc3RhbmNlIHRvICcgK1xuICAgICAgICAncHJldmVudCBjb25mbGljdHMgd2l0aCBWdWUgaW50ZXJuYWxzLiAnICtcbiAgICAgICAgJ1NlZTogaHR0cHM6Ly92dWVqcy5vcmcvdjIvYXBpLyNkYXRhJyxcbiAgICAgICAgdGFyZ2V0XG4gICAgICApO1xuICAgIH07XG5cbiAgICB2YXIgaGFzUHJveHkgPVxuICAgICAgdHlwZW9mIFByb3h5ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShQcm94eSk7XG5cbiAgICBpZiAoaGFzUHJveHkpIHtcbiAgICAgIHZhciBpc0J1aWx0SW5Nb2RpZmllciA9IG1ha2VNYXAoJ3N0b3AscHJldmVudCxzZWxmLGN0cmwsc2hpZnQsYWx0LG1ldGEsZXhhY3QnKTtcbiAgICAgIGNvbmZpZy5rZXlDb2RlcyA9IG5ldyBQcm94eShjb25maWcua2V5Q29kZXMsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICAgIGlmIChpc0J1aWx0SW5Nb2RpZmllcihrZXkpKSB7XG4gICAgICAgICAgICB3YXJuKChcIkF2b2lkIG92ZXJ3cml0aW5nIGJ1aWx0LWluIG1vZGlmaWVyIGluIGNvbmZpZy5rZXlDb2RlczogLlwiICsga2V5KSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgaGFzSGFuZGxlciA9IHtcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzICh0YXJnZXQsIGtleSkge1xuICAgICAgICB2YXIgaGFzID0ga2V5IGluIHRhcmdldDtcbiAgICAgICAgdmFyIGlzQWxsb3dlZCA9IGFsbG93ZWRHbG9iYWxzKGtleSkgfHxcbiAgICAgICAgICAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5LmNoYXJBdCgwKSA9PT0gJ18nICYmICEoa2V5IGluIHRhcmdldC4kZGF0YSkpO1xuICAgICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XG4gICAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQuJGRhdGEpIHsgd2FyblJlc2VydmVkUHJlZml4KHRhcmdldCwga2V5KTsgfVxuICAgICAgICAgIGVsc2UgeyB3YXJuTm9uUHJlc2VudCh0YXJnZXQsIGtleSk7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzIHx8ICFpc0FsbG93ZWRcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGdldEhhbmRsZXIgPSB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCAodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmICEoa2V5IGluIHRhcmdldCkpIHtcbiAgICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSkgeyB3YXJuUmVzZXJ2ZWRQcmVmaXgodGFyZ2V0LCBrZXkpOyB9XG4gICAgICAgICAgZWxzZSB7IHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXRba2V5XVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpbml0UHJveHkgPSBmdW5jdGlvbiBpbml0UHJveHkgKHZtKSB7XG4gICAgICBpZiAoaGFzUHJveHkpIHtcbiAgICAgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIHByb3h5IGhhbmRsZXIgdG8gdXNlXG4gICAgICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gICAgICAgIHZhciBoYW5kbGVycyA9IG9wdGlvbnMucmVuZGVyICYmIG9wdGlvbnMucmVuZGVyLl93aXRoU3RyaXBwZWRcbiAgICAgICAgICA/IGdldEhhbmRsZXJcbiAgICAgICAgICA6IGhhc0hhbmRsZXI7XG4gICAgICAgIHZtLl9yZW5kZXJQcm94eSA9IG5ldyBQcm94eSh2bSwgaGFuZGxlcnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qICAqL1xuXG4gIHZhciBzZWVuT2JqZWN0cyA9IG5ldyBfU2V0KCk7XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFuIG9iamVjdCB0byBldm9rZSBhbGwgY29udmVydGVkXG4gICAqIGdldHRlcnMsIHNvIHRoYXQgZXZlcnkgbmVzdGVkIHByb3BlcnR5IGluc2lkZSB0aGUgb2JqZWN0XG4gICAqIGlzIGNvbGxlY3RlZCBhcyBhIFwiZGVlcFwiIGRlcGVuZGVuY3kuXG4gICAqL1xuICBmdW5jdGlvbiB0cmF2ZXJzZSAodmFsKSB7XG4gICAgX3RyYXZlcnNlKHZhbCwgc2Vlbk9iamVjdHMpO1xuICAgIHNlZW5PYmplY3RzLmNsZWFyKCk7XG4gIH1cblxuICBmdW5jdGlvbiBfdHJhdmVyc2UgKHZhbCwgc2Vlbikge1xuICAgIHZhciBpLCBrZXlzO1xuICAgIHZhciBpc0EgPSBBcnJheS5pc0FycmF5KHZhbCk7XG4gICAgaWYgKCghaXNBICYmICFpc09iamVjdCh2YWwpKSB8fCBPYmplY3QuaXNGcm96ZW4odmFsKSB8fCB2YWwgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh2YWwuX19vYl9fKSB7XG4gICAgICB2YXIgZGVwSWQgPSB2YWwuX19vYl9fLmRlcC5pZDtcbiAgICAgIGlmIChzZWVuLmhhcyhkZXBJZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzZWVuLmFkZChkZXBJZCk7XG4gICAgfVxuICAgIGlmIChpc0EpIHtcbiAgICAgIGkgPSB2YWwubGVuZ3RoO1xuICAgICAgd2hpbGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2ldLCBzZWVuKTsgfVxuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICAgIGkgPSBrZXlzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtrZXlzW2ldXSwgc2Vlbik7IH1cbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgbm9ybWFsaXplRXZlbnQgPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgcGFzc2l2ZSA9IG5hbWUuY2hhckF0KDApID09PSAnJic7XG4gICAgbmFtZSA9IHBhc3NpdmUgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgICB2YXIgb25jZSQkMSA9IG5hbWUuY2hhckF0KDApID09PSAnfic7IC8vIFByZWZpeGVkIGxhc3QsIGNoZWNrZWQgZmlyc3RcbiAgICBuYW1lID0gb25jZSQkMSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICAgIHZhciBjYXB0dXJlID0gbmFtZS5jaGFyQXQoMCkgPT09ICchJztcbiAgICBuYW1lID0gY2FwdHVyZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgb25jZTogb25jZSQkMSxcbiAgICAgIGNhcHR1cmU6IGNhcHR1cmUsXG4gICAgICBwYXNzaXZlOiBwYXNzaXZlXG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBjcmVhdGVGbkludm9rZXIgKGZucywgdm0pIHtcbiAgICBmdW5jdGlvbiBpbnZva2VyICgpIHtcbiAgICAgIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcblxuICAgICAgdmFyIGZucyA9IGludm9rZXIuZm5zO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zKSkge1xuICAgICAgICB2YXIgY2xvbmVkID0gZm5zLnNsaWNlKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xvbmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMkMSwgdm0sIFwidi1vbiBoYW5kbGVyXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgICByZXR1cm4gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoZm5zLCBudWxsLCBhcmd1bWVudHMsIHZtLCBcInYtb24gaGFuZGxlclwiKVxuICAgICAgfVxuICAgIH1cbiAgICBpbnZva2VyLmZucyA9IGZucztcbiAgICByZXR1cm4gaW52b2tlclxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlTGlzdGVuZXJzIChcbiAgICBvbixcbiAgICBvbGRPbixcbiAgICBhZGQsXG4gICAgcmVtb3ZlJCQxLFxuICAgIGNyZWF0ZU9uY2VIYW5kbGVyLFxuICAgIHZtXG4gICkge1xuICAgIHZhciBuYW1lLCBkZWYkJDEsIGN1ciwgb2xkLCBldmVudDtcbiAgICBmb3IgKG5hbWUgaW4gb24pIHtcbiAgICAgIGRlZiQkMSA9IGN1ciA9IG9uW25hbWVdO1xuICAgICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgICAgaWYgKGlzVW5kZWYoY3VyKSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIgKyAoZXZlbnQubmFtZSkgKyBcIlxcXCI6IGdvdCBcIiArIFN0cmluZyhjdXIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkKSkge1xuICAgICAgICBpZiAoaXNVbmRlZihjdXIuZm5zKSkge1xuICAgICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlRm5JbnZva2VyKGN1ciwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RydWUoZXZlbnQub25jZSkpIHtcbiAgICAgICAgICBjdXIgPSBvbltuYW1lXSA9IGNyZWF0ZU9uY2VIYW5kbGVyKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQuY2FwdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQuY2FwdHVyZSwgZXZlbnQucGFzc2l2ZSwgZXZlbnQucGFyYW1zKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VyICE9PSBvbGQpIHtcbiAgICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgICAgb25bbmFtZV0gPSBvbGQ7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobmFtZSBpbiBvbGRPbikge1xuICAgICAgaWYgKGlzVW5kZWYob25bbmFtZV0pKSB7XG4gICAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICAgIHJlbW92ZSQkMShldmVudC5uYW1lLCBvbGRPbltuYW1lXSwgZXZlbnQuY2FwdHVyZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2sgKGRlZiwgaG9va0tleSwgaG9vaykge1xuICAgIGlmIChkZWYgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgICAgZGVmID0gZGVmLmRhdGEuaG9vayB8fCAoZGVmLmRhdGEuaG9vayA9IHt9KTtcbiAgICB9XG4gICAgdmFyIGludm9rZXI7XG4gICAgdmFyIG9sZEhvb2sgPSBkZWZbaG9va0tleV07XG5cbiAgICBmdW5jdGlvbiB3cmFwcGVkSG9vayAoKSB7XG4gICAgICBob29rLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAvLyBpbXBvcnRhbnQ6IHJlbW92ZSBtZXJnZWQgaG9vayB0byBlbnN1cmUgaXQncyBjYWxsZWQgb25seSBvbmNlXG4gICAgICAvLyBhbmQgcHJldmVudCBtZW1vcnkgbGVha1xuICAgICAgcmVtb3ZlKGludm9rZXIuZm5zLCB3cmFwcGVkSG9vayk7XG4gICAgfVxuXG4gICAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAgIC8vIG5vIGV4aXN0aW5nIGhvb2tcbiAgICAgIGludm9rZXIgPSBjcmVhdGVGbkludm9rZXIoW3dyYXBwZWRIb29rXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGlzRGVmKG9sZEhvb2suZm5zKSAmJiBpc1RydWUob2xkSG9vay5tZXJnZWQpKSB7XG4gICAgICAgIC8vIGFscmVhZHkgYSBtZXJnZWQgaW52b2tlclxuICAgICAgICBpbnZva2VyID0gb2xkSG9vaztcbiAgICAgICAgaW52b2tlci5mbnMucHVzaCh3cmFwcGVkSG9vayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBleGlzdGluZyBwbGFpbiBob29rXG4gICAgICAgIGludm9rZXIgPSBjcmVhdGVGbkludm9rZXIoW29sZEhvb2ssIHdyYXBwZWRIb29rXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlci5tZXJnZWQgPSB0cnVlO1xuICAgIGRlZltob29rS2V5XSA9IGludm9rZXI7XG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIChcbiAgICBkYXRhLFxuICAgIEN0b3IsXG4gICAgdGFnXG4gICkge1xuICAgIC8vIHdlIGFyZSBvbmx5IGV4dHJhY3RpbmcgcmF3IHZhbHVlcyBoZXJlLlxuICAgIC8vIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgdmFsdWVzIGFyZSBoYW5kbGVkIGluIHRoZSBjaGlsZFxuICAgIC8vIGNvbXBvbmVudCBpdHNlbGYuXG4gICAgdmFyIHByb3BPcHRpb25zID0gQ3Rvci5vcHRpb25zLnByb3BzO1xuICAgIGlmIChpc1VuZGVmKHByb3BPcHRpb25zKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciByZXMgPSB7fTtcbiAgICB2YXIgYXR0cnMgPSBkYXRhLmF0dHJzO1xuICAgIHZhciBwcm9wcyA9IGRhdGEucHJvcHM7XG4gICAgaWYgKGlzRGVmKGF0dHJzKSB8fCBpc0RlZihwcm9wcykpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgICB2YXIgYWx0S2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIga2V5SW5Mb3dlckNhc2UgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBrZXkgIT09IGtleUluTG93ZXJDYXNlICYmXG4gICAgICAgICAgICBhdHRycyAmJiBoYXNPd24oYXR0cnMsIGtleUluTG93ZXJDYXNlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGlwKFxuICAgICAgICAgICAgICBcIlByb3AgXFxcIlwiICsga2V5SW5Mb3dlckNhc2UgKyBcIlxcXCIgaXMgcGFzc2VkIHRvIGNvbXBvbmVudCBcIiArXG4gICAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBkZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICAgIFwiIFxcXCJcIiArIGtleSArIFwiXFxcIi4gXCIgK1xuICAgICAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIGNhbWVsQ2FzZWQgXCIgK1xuICAgICAgICAgICAgICBcInByb3BzIG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1ET00gXCIgK1xuICAgICAgICAgICAgICBcInRlbXBsYXRlcy4gWW91IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiICsgYWx0S2V5ICsgXCJcXFwiIGluc3RlYWQgb2YgXFxcIlwiICsga2V5ICsgXCJcXFwiLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjaGVja1Byb3AocmVzLCBwcm9wcywga2V5LCBhbHRLZXksIHRydWUpIHx8XG4gICAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBmdW5jdGlvbiBjaGVja1Byb3AgKFxuICAgIHJlcyxcbiAgICBoYXNoLFxuICAgIGtleSxcbiAgICBhbHRLZXksXG4gICAgcHJlc2VydmVcbiAgKSB7XG4gICAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgICBpZiAoaGFzT3duKGhhc2gsIGtleSkpIHtcbiAgICAgICAgcmVzW2tleV0gPSBoYXNoW2tleV07XG4gICAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgICBkZWxldGUgaGFzaFtrZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGhhc093bihoYXNoLCBhbHRLZXkpKSB7XG4gICAgICAgIHJlc1trZXldID0gaGFzaFthbHRLZXldO1xuICAgICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgICAgZGVsZXRlIGhhc2hbYWx0S2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qICAqL1xuXG4gIC8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuICAvLyBzdGF0aWNhbGx5IGFuYWx5emluZyB0aGUgdGVtcGxhdGUgYXQgY29tcGlsZSB0aW1lLlxuICAvL1xuICAvLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuICAvLyBnZW5lcmF0ZWQgcmVuZGVyIGZ1bmN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIEFycmF5PFZOb2RlPi4gVGhlcmUgYXJlXG4gIC8vIHR3byBjYXNlcyB3aGVyZSBleHRyYSBub3JtYWxpemF0aW9uIGlzIG5lZWRlZDpcblxuICAvLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4gIC8vIG1heSByZXR1cm4gYW4gQXJyYXkgaW5zdGVhZCBvZiBhIHNpbmdsZSByb290LiBJbiB0aGlzIGNhc2UsIGp1c3QgYSBzaW1wbGVcbiAgLy8gbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQgLSBpZiBhbnkgY2hpbGQgaXMgYW4gQXJyYXksIHdlIGZsYXR0ZW4gdGhlIHdob2xlXG4gIC8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuICAvLyBiZWNhdXNlIGZ1bmN0aW9uYWwgY29tcG9uZW50cyBhbHJlYWR5IG5vcm1hbGl6ZSB0aGVpciBvd24gY2hpbGRyZW4uXG4gIGZ1bmN0aW9uIHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuIChjaGlsZHJlbikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuW2ldKSkge1xuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgY2hpbGRyZW4pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlblxuICB9XG5cbiAgLy8gMi4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29uc3RydWN0cyB0aGF0IGFsd2F5cyBnZW5lcmF0ZWQgbmVzdGVkIEFycmF5cyxcbiAgLy8gZS5nLiA8dGVtcGxhdGU+LCA8c2xvdD4sIHYtZm9yLCBvciB3aGVuIHRoZSBjaGlsZHJlbiBpcyBwcm92aWRlZCBieSB1c2VyXG4gIC8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbiAgLy8gaXMgbmVlZGVkIHRvIGNhdGVyIHRvIGFsbCBwb3NzaWJsZSB0eXBlcyBvZiBjaGlsZHJlbiB2YWx1ZXMuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUNoaWxkcmVuIChjaGlsZHJlbikge1xuICAgIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICAgID8gW2NyZWF0ZVRleHRWTm9kZShjaGlsZHJlbildXG4gICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pXG4gICAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgICByZXR1cm4gaXNEZWYobm9kZSkgJiYgaXNEZWYobm9kZS50ZXh0KSAmJiBpc0ZhbHNlKG5vZGUuaXNDb21tZW50KVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpLCBjLCBsYXN0SW5kZXgsIGxhc3Q7XG4gICAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoaXNVbmRlZihjKSB8fCB0eXBlb2YgYyA9PT0gJ2Jvb2xlYW4nKSB7IGNvbnRpbnVlIH1cbiAgICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgICAgbGFzdCA9IHJlc1tsYXN0SW5kZXhdO1xuICAgICAgLy8gIG5lc3RlZFxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgICAgaWYgKGMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGMgPSBub3JtYWxpemVBcnJheUNoaWxkcmVuKGMsICgobmVzdGVkSW5kZXggfHwgJycpICsgXCJfXCIgKyBpKSk7XG4gICAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICAgIGlmIChpc1RleHROb2RlKGNbMF0pICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIChjWzBdKS50ZXh0KTtcbiAgICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzLnB1c2guYXBwbHkocmVzLCBjKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1ByaW1pdGl2ZShjKSkge1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShsYXN0KSkge1xuICAgICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgICAvLyB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgU1NSIGh5ZHJhdGlvbiBiZWNhdXNlIHRleHQgbm9kZXMgYXJlXG4gICAgICAgICAgLy8gZXNzZW50aWFsbHkgbWVyZ2VkIHdoZW4gcmVuZGVyZWQgdG8gSFRNTCBzdHJpbmdzXG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYyAhPT0gJycpIHtcbiAgICAgICAgICAvLyBjb252ZXJ0IHByaW1pdGl2ZSB0byB2bm9kZVxuICAgICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYy50ZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkZWZhdWx0IGtleSBmb3IgbmVzdGVkIGFycmF5IGNoaWxkcmVuIChsaWtlbHkgZ2VuZXJhdGVkIGJ5IHYtZm9yKVxuICAgICAgICAgIGlmIChpc1RydWUoY2hpbGRyZW4uX2lzVkxpc3QpICYmXG4gICAgICAgICAgICBpc0RlZihjLnRhZykgJiZcbiAgICAgICAgICAgIGlzVW5kZWYoYy5rZXkpICYmXG4gICAgICAgICAgICBpc0RlZihuZXN0ZWRJbmRleCkpIHtcbiAgICAgICAgICAgIGMua2V5ID0gXCJfX3ZsaXN0XCIgKyBuZXN0ZWRJbmRleCArIFwiX1wiICsgaSArIFwiX19cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzLnB1c2goYyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gICAgdmFyIHByb3ZpZGUgPSB2bS4kb3B0aW9ucy5wcm92aWRlO1xuICAgIGlmIChwcm92aWRlKSB7XG4gICAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHByb3ZpZGUuY2FsbCh2bSlcbiAgICAgICAgOiBwcm92aWRlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRJbmplY3Rpb25zICh2bSkge1xuICAgIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICB7XG4gICAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHByb3ZpZGVkIGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICAgIFwiaW5qZWN0aW9uIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIiArIGtleSArIFwiXFxcIlwiLFxuICAgICAgICAgICAgICB2bVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZUluamVjdCAoaW5qZWN0LCB2bSkge1xuICAgIGlmIChpbmplY3QpIHtcbiAgICAgIC8vIGluamVjdCBpcyA6YW55IGJlY2F1c2UgZmxvdyBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgY2FjaGVkXG4gICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgICAgID8gUmVmbGVjdC5vd25LZXlzKGluamVjdClcbiAgICAgICAgOiBPYmplY3Qua2V5cyhpbmplY3QpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIC8vICM2NTc0IGluIGNhc2UgdGhlIGluamVjdCBvYmplY3QgaXMgb2JzZXJ2ZWQuLi5cbiAgICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpIHsgY29udGludWUgfVxuICAgICAgICB2YXIgcHJvdmlkZUtleSA9IGluamVjdFtrZXldLmZyb207XG4gICAgICAgIHZhciBzb3VyY2UgPSB2bTtcbiAgICAgICAgd2hpbGUgKHNvdXJjZSkge1xuICAgICAgICAgIGlmIChzb3VyY2UuX3Byb3ZpZGVkICYmIGhhc093bihzb3VyY2UuX3Byb3ZpZGVkLCBwcm92aWRlS2V5KSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBzb3VyY2UuX3Byb3ZpZGVkW3Byb3ZpZGVLZXldO1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgc291cmNlID0gc291cmNlLiRwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgICBpZiAoJ2RlZmF1bHQnIGluIGluamVjdFtrZXldKSB7XG4gICAgICAgICAgICB2YXIgcHJvdmlkZURlZmF1bHQgPSBpbmplY3Rba2V5XS5kZWZhdWx0O1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB0eXBlb2YgcHJvdmlkZURlZmF1bHQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgPyBwcm92aWRlRGVmYXVsdC5jYWxsKHZtKVxuICAgICAgICAgICAgICA6IHByb3ZpZGVEZWZhdWx0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3YXJuKChcIkluamVjdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cblxuXG4gIC8qKlxuICAgKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb2x2ZVNsb3RzIChcbiAgICBjaGlsZHJlbixcbiAgICBjb250ZXh0XG4gICkge1xuICAgIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICAgIHZhciBzbG90cyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIHZhciBkYXRhID0gY2hpbGQuZGF0YTtcbiAgICAgIC8vIHJlbW92ZSBzbG90IGF0dHJpYnV0ZSBpZiB0aGUgbm9kZSBpcyByZXNvbHZlZCBhcyBhIFZ1ZSBzbG90IG5vZGVcbiAgICAgIGlmIChkYXRhICYmIGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy5zbG90KSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhLmF0dHJzLnNsb3Q7XG4gICAgICB9XG4gICAgICAvLyBuYW1lZCBzbG90cyBzaG91bGQgb25seSBiZSByZXNwZWN0ZWQgaWYgdGhlIHZub2RlIHdhcyByZW5kZXJlZCBpbiB0aGVcbiAgICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICAgIGlmICgoY2hpbGQuY29udGV4dCA9PT0gY29udGV4dCB8fCBjaGlsZC5mbkNvbnRleHQgPT09IGNvbnRleHQpICYmXG4gICAgICAgIGRhdGEgJiYgZGF0YS5zbG90ICE9IG51bGxcbiAgICAgICkge1xuICAgICAgICB2YXIgbmFtZSA9IGRhdGEuc2xvdDtcbiAgICAgICAgdmFyIHNsb3QgPSAoc2xvdHNbbmFtZV0gfHwgKHNsb3RzW25hbWVdID0gW10pKTtcbiAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICAgIHNsb3QucHVzaC5hcHBseShzbG90LCBjaGlsZC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKHNsb3RzLmRlZmF1bHQgfHwgKHNsb3RzLmRlZmF1bHQgPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBpZ25vcmUgc2xvdHMgdGhhdCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VcbiAgICBmb3IgKHZhciBuYW1lJDEgaW4gc2xvdHMpIHtcbiAgICAgIGlmIChzbG90c1tuYW1lJDFdLmV2ZXJ5KGlzV2hpdGVzcGFjZSkpIHtcbiAgICAgICAgZGVsZXRlIHNsb3RzW25hbWUkMV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzbG90c1xuICB9XG5cbiAgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlIChub2RlKSB7XG4gICAgcmV0dXJuIChub2RlLmlzQ29tbWVudCAmJiAhbm9kZS5hc3luY0ZhY3RvcnkpIHx8IG5vZGUudGV4dCA9PT0gJyAnXG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90cyAoXG4gICAgc2xvdHMsXG4gICAgbm9ybWFsU2xvdHMsXG4gICAgcHJldlNsb3RzXG4gICkge1xuICAgIHZhciByZXM7XG4gICAgdmFyIGhhc05vcm1hbFNsb3RzID0gT2JqZWN0LmtleXMobm9ybWFsU2xvdHMpLmxlbmd0aCA+IDA7XG4gICAgdmFyIGlzU3RhYmxlID0gc2xvdHMgPyAhIXNsb3RzLiRzdGFibGUgOiAhaGFzTm9ybWFsU2xvdHM7XG4gICAgdmFyIGtleSA9IHNsb3RzICYmIHNsb3RzLiRrZXk7XG4gICAgaWYgKCFzbG90cykge1xuICAgICAgcmVzID0ge307XG4gICAgfSBlbHNlIGlmIChzbG90cy5fbm9ybWFsaXplZCkge1xuICAgICAgLy8gZmFzdCBwYXRoIDE6IGNoaWxkIGNvbXBvbmVudCByZS1yZW5kZXIgb25seSwgcGFyZW50IGRpZCBub3QgY2hhbmdlXG4gICAgICByZXR1cm4gc2xvdHMuX25vcm1hbGl6ZWRcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaXNTdGFibGUgJiZcbiAgICAgIHByZXZTbG90cyAmJlxuICAgICAgcHJldlNsb3RzICE9PSBlbXB0eU9iamVjdCAmJlxuICAgICAga2V5ID09PSBwcmV2U2xvdHMuJGtleSAmJlxuICAgICAgIWhhc05vcm1hbFNsb3RzICYmXG4gICAgICAhcHJldlNsb3RzLiRoYXNOb3JtYWxcbiAgICApIHtcbiAgICAgIC8vIGZhc3QgcGF0aCAyOiBzdGFibGUgc2NvcGVkIHNsb3RzIHcvIG5vIG5vcm1hbCBzbG90cyB0byBwcm94eSxcbiAgICAgIC8vIG9ubHkgbmVlZCB0byBub3JtYWxpemUgb25jZVxuICAgICAgcmV0dXJuIHByZXZTbG90c1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSB7fTtcbiAgICAgIGZvciAodmFyIGtleSQxIGluIHNsb3RzKSB7XG4gICAgICAgIGlmIChzbG90c1trZXkkMV0gJiYga2V5JDFbMF0gIT09ICckJykge1xuICAgICAgICAgIHJlc1trZXkkMV0gPSBub3JtYWxpemVTY29wZWRTbG90KG5vcm1hbFNsb3RzLCBrZXkkMSwgc2xvdHNba2V5JDFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBleHBvc2Ugbm9ybWFsIHNsb3RzIG9uIHNjb3BlZFNsb3RzXG4gICAgZm9yICh2YXIga2V5JDIgaW4gbm9ybWFsU2xvdHMpIHtcbiAgICAgIGlmICghKGtleSQyIGluIHJlcykpIHtcbiAgICAgICAgcmVzW2tleSQyXSA9IHByb3h5Tm9ybWFsU2xvdChub3JtYWxTbG90cywga2V5JDIpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XG4gICAgLy8gYW5kIHdoZW4gdGhhdCBpcyBwYXNzZWQgZG93biB0aGlzIHdvdWxkIGNhdXNlIGFuIGVycm9yXG4gICAgaWYgKHNsb3RzICYmIE9iamVjdC5pc0V4dGVuc2libGUoc2xvdHMpKSB7XG4gICAgICAoc2xvdHMpLl9ub3JtYWxpemVkID0gcmVzO1xuICAgIH1cbiAgICBkZWYocmVzLCAnJHN0YWJsZScsIGlzU3RhYmxlKTtcbiAgICBkZWYocmVzLCAnJGtleScsIGtleSk7XG4gICAgZGVmKHJlcywgJyRoYXNOb3JtYWwnLCBoYXNOb3JtYWxTbG90cyk7XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdChub3JtYWxTbG90cywga2V5LCBmbikge1xuICAgIHZhciBub3JtYWxpemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlcyA9IGFyZ3VtZW50cy5sZW5ndGggPyBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpIDogZm4oe30pO1xuICAgICAgcmVzID0gcmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHJlcylcbiAgICAgICAgPyBbcmVzXSAvLyBzaW5nbGUgdm5vZGVcbiAgICAgICAgOiBub3JtYWxpemVDaGlsZHJlbihyZXMpO1xuICAgICAgcmV0dXJuIHJlcyAmJiAoXG4gICAgICAgIHJlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgKHJlcy5sZW5ndGggPT09IDEgJiYgcmVzWzBdLmlzQ29tbWVudCkgLy8gIzk2NThcbiAgICAgICkgPyB1bmRlZmluZWRcbiAgICAgICAgOiByZXNcbiAgICB9O1xuICAgIC8vIHRoaXMgaXMgYSBzbG90IHVzaW5nIHRoZSBuZXcgdi1zbG90IHN5bnRheCB3aXRob3V0IHNjb3BlLiBhbHRob3VnaCBpdCBpc1xuICAgIC8vIGNvbXBpbGVkIGFzIGEgc2NvcGVkIHNsb3QsIHJlbmRlciBmbiB1c2VycyB3b3VsZCBleHBlY3QgaXQgdG8gYmUgcHJlc2VudFxuICAgIC8vIG9uIHRoaXMuJHNsb3RzIGJlY2F1c2UgdGhlIHVzYWdlIGlzIHNlbWFudGljYWxseSBhIG5vcm1hbCBzbG90LlxuICAgIGlmIChmbi5wcm94eSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vcm1hbFNsb3RzLCBrZXksIHtcbiAgICAgICAgZ2V0OiBub3JtYWxpemVkLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbm9ybWFsaXplZFxuICB9XG5cbiAgZnVuY3Rpb24gcHJveHlOb3JtYWxTbG90KHNsb3RzLCBrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2xvdHNba2V5XTsgfVxuICB9XG5cbiAgLyogICovXG5cbiAgLyoqXG4gICAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gICAqL1xuICBmdW5jdGlvbiByZW5kZXJMaXN0IChcbiAgICB2YWwsXG4gICAgcmVuZGVyXG4gICkge1xuICAgIHZhciByZXQsIGksIGwsIGtleXMsIGtleTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpIHx8IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXQgPSBuZXcgQXJyYXkodmFsLmxlbmd0aCk7XG4gICAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2ldLCBpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICByZXQgPSBuZXcgQXJyYXkodmFsKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB2YWw7IGkrKykge1xuICAgICAgICByZXRbaV0gPSByZW5kZXIoaSArIDEsIGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgICAgaWYgKGhhc1N5bWJvbCAmJiB2YWxbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgICByZXQgPSBbXTtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gdmFsW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICAgIHJldC5wdXNoKHJlbmRlcihyZXN1bHQudmFsdWUsIHJldC5sZW5ndGgpKTtcbiAgICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgICByZXQgPSBuZXcgQXJyYXkoa2V5cy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIHJldFtpXSA9IHJlbmRlcih2YWxba2V5XSwga2V5LCBpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzRGVmKHJldCkpIHtcbiAgICAgIHJldCA9IFtdO1xuICAgIH1cbiAgICAocmV0KS5faXNWTGlzdCA9IHRydWU7XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgLyogICovXG5cbiAgLyoqXG4gICAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgPHNsb3Q+XG4gICAqL1xuICBmdW5jdGlvbiByZW5kZXJTbG90IChcbiAgICBuYW1lLFxuICAgIGZhbGxiYWNrLFxuICAgIHByb3BzLFxuICAgIGJpbmRPYmplY3RcbiAgKSB7XG4gICAgdmFyIHNjb3BlZFNsb3RGbiA9IHRoaXMuJHNjb3BlZFNsb3RzW25hbWVdO1xuICAgIHZhciBub2RlcztcbiAgICBpZiAoc2NvcGVkU2xvdEZuKSB7IC8vIHNjb3BlZCBzbG90XG4gICAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgICAgaWYgKGJpbmRPYmplY3QpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChiaW5kT2JqZWN0KSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAnc2xvdCB2LWJpbmQgd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCcsXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9wcyA9IGV4dGVuZChleHRlbmQoe30sIGJpbmRPYmplY3QpLCBwcm9wcyk7XG4gICAgICB9XG4gICAgICBub2RlcyA9IHNjb3BlZFNsb3RGbihwcm9wcykgfHwgZmFsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzID0gdGhpcy4kc2xvdHNbbmFtZV0gfHwgZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldCA9IHByb3BzICYmIHByb3BzLnNsb3Q7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJywgeyBzbG90OiB0YXJnZXQgfSwgbm9kZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBub2Rlc1xuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIC8qKlxuICAgKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIGZpbHRlcnNcbiAgICovXG4gIGZ1bmN0aW9uIHJlc29sdmVGaWx0ZXIgKGlkKSB7XG4gICAgcmV0dXJuIHJlc29sdmVBc3NldCh0aGlzLiRvcHRpb25zLCAnZmlsdGVycycsIGlkLCB0cnVlKSB8fCBpZGVudGl0eVxuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gaXNLZXlOb3RNYXRjaCAoZXhwZWN0LCBhY3R1YWwpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3QpKSB7XG4gICAgICByZXR1cm4gZXhwZWN0LmluZGV4T2YoYWN0dWFsKSA9PT0gLTFcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGV4cGVjdCAhPT0gYWN0dWFsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnRpbWUgaGVscGVyIGZvciBjaGVja2luZyBrZXlDb2RlcyBmcm9tIGNvbmZpZy5cbiAgICogZXhwb3NlZCBhcyBWdWUucHJvdG90eXBlLl9rXG4gICAqIHBhc3NpbmcgaW4gZXZlbnRLZXlOYW1lIGFzIGxhc3QgYXJndW1lbnQgc2VwYXJhdGVseSBmb3IgYmFja3dhcmRzIGNvbXBhdFxuICAgKi9cbiAgZnVuY3Rpb24gY2hlY2tLZXlDb2RlcyAoXG4gICAgZXZlbnRLZXlDb2RlLFxuICAgIGtleSxcbiAgICBidWlsdEluS2V5Q29kZSxcbiAgICBldmVudEtleU5hbWUsXG4gICAgYnVpbHRJbktleU5hbWVcbiAgKSB7XG4gICAgdmFyIG1hcHBlZEtleUNvZGUgPSBjb25maWcua2V5Q29kZXNba2V5XSB8fCBidWlsdEluS2V5Q29kZTtcbiAgICBpZiAoYnVpbHRJbktleU5hbWUgJiYgZXZlbnRLZXlOYW1lICYmICFjb25maWcua2V5Q29kZXNba2V5XSkge1xuICAgICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2goYnVpbHRJbktleU5hbWUsIGV2ZW50S2V5TmFtZSlcbiAgICB9IGVsc2UgaWYgKG1hcHBlZEtleUNvZGUpIHtcbiAgICAgIHJldHVybiBpc0tleU5vdE1hdGNoKG1hcHBlZEtleUNvZGUsIGV2ZW50S2V5Q29kZSlcbiAgICB9IGVsc2UgaWYgKGV2ZW50S2V5TmFtZSkge1xuICAgICAgcmV0dXJuIGh5cGhlbmF0ZShldmVudEtleU5hbWUpICE9PSBrZXlcbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICAvKipcbiAgICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgdi1iaW5kPVwib2JqZWN0XCIgaW50byBhIFZOb2RlJ3MgZGF0YS5cbiAgICovXG4gIGZ1bmN0aW9uIGJpbmRPYmplY3RQcm9wcyAoXG4gICAgZGF0YSxcbiAgICB0YWcsXG4gICAgdmFsdWUsXG4gICAgYXNQcm9wLFxuICAgIGlzU3luY1xuICApIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ3YtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IG9yIEFycmF5IHZhbHVlJyxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRvT2JqZWN0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaGFzaDtcbiAgICAgICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoIGtleSApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBrZXkgPT09ICdjbGFzcycgfHxcbiAgICAgICAgICAgIGtleSA9PT0gJ3N0eWxlJyB8fFxuICAgICAgICAgICAgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBoYXNoID0gZGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLmF0dHJzICYmIGRhdGEuYXR0cnMudHlwZTtcbiAgICAgICAgICAgIGhhc2ggPSBhc1Byb3AgfHwgY29uZmlnLm11c3RVc2VQcm9wKHRhZywgdHlwZSwga2V5KVxuICAgICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgICAgOiBkYXRhLmF0dHJzIHx8IChkYXRhLmF0dHJzID0ge30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICAgIGlmICghKGNhbWVsaXplZEtleSBpbiBoYXNoKSAmJiAhKGh5cGhlbmF0ZWRLZXkgaW4gaGFzaCkpIHtcbiAgICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAgICAgICAgIGlmIChpc1N5bmMpIHtcbiAgICAgICAgICAgICAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdmFsdWVba2V5XSA9ICRldmVudDtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIC8qICAqL1xuXG4gIC8qKlxuICAgKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIHN0YXRpYyB0cmVlcy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gICAgaW5kZXgsXG4gICAgaXNJbkZvclxuICApIHtcbiAgICB2YXIgY2FjaGVkID0gdGhpcy5fc3RhdGljVHJlZXMgfHwgKHRoaXMuX3N0YXRpY1RyZWVzID0gW10pO1xuICAgIHZhciB0cmVlID0gY2FjaGVkW2luZGV4XTtcbiAgICAvLyBpZiBoYXMgYWxyZWFkeS1yZW5kZXJlZCBzdGF0aWMgdHJlZSBhbmQgbm90IGluc2lkZSB2LWZvcixcbiAgICAvLyB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgdHJlZS5cbiAgICBpZiAodHJlZSAmJiAhaXNJbkZvcikge1xuICAgICAgcmV0dXJuIHRyZWVcbiAgICB9XG4gICAgLy8gb3RoZXJ3aXNlLCByZW5kZXIgYSBmcmVzaCB0cmVlLlxuICAgIHRyZWUgPSBjYWNoZWRbaW5kZXhdID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbaW5kZXhdLmNhbGwoXG4gICAgICB0aGlzLl9yZW5kZXJQcm94eSxcbiAgICAgIG51bGwsXG4gICAgICB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICAgKTtcbiAgICBtYXJrU3RhdGljKHRyZWUsIChcIl9fc3RhdGljX19cIiArIGluZGV4KSwgZmFsc2UpO1xuICAgIHJldHVybiB0cmVlXG4gIH1cblxuICAvKipcbiAgICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAgICogRWZmZWN0aXZlbHkgaXQgbWVhbnMgbWFya2luZyB0aGUgbm9kZSBhcyBzdGF0aWMgd2l0aCBhIHVuaXF1ZSBrZXkuXG4gICAqL1xuICBmdW5jdGlvbiBtYXJrT25jZSAoXG4gICAgdHJlZSxcbiAgICBpbmRleCxcbiAgICBrZXlcbiAgKSB7XG4gICAgbWFya1N0YXRpYyh0cmVlLCAoXCJfX29uY2VfX1wiICsgaW5kZXggKyAoa2V5ID8gKFwiX1wiICsga2V5KSA6IFwiXCIpKSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtTdGF0aWMgKFxuICAgIHRyZWUsXG4gICAga2V5LFxuICAgIGlzT25jZVxuICApIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0cmVlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1hcmtTdGF0aWNOb2RlKHRyZWVbaV0sIChrZXkgKyBcIl9cIiArIGkpLCBpc09uY2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcmtTdGF0aWNOb2RlKHRyZWUsIGtleSwgaXNPbmNlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrU3RhdGljTm9kZSAobm9kZSwga2V5LCBpc09uY2UpIHtcbiAgICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgICBub2RlLmtleSA9IGtleTtcbiAgICBub2RlLmlzT25jZSA9IGlzT25jZTtcbiAgfVxuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGJpbmRPYmplY3RMaXN0ZW5lcnMgKGRhdGEsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ3Ytb24gd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCB2YWx1ZScsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG9uID0gZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge307XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICAgIHZhciBleGlzdGluZyA9IG9uW2tleV07XG4gICAgICAgICAgdmFyIG91cnMgPSB2YWx1ZVtrZXldO1xuICAgICAgICAgIG9uW2tleV0gPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgb3VycykgOiBvdXJzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiByZXNvbHZlU2NvcGVkU2xvdHMgKFxuICAgIGZucywgLy8gc2VlIGZsb3cvdm5vZGVcbiAgICByZXMsXG4gICAgLy8gdGhlIGZvbGxvd2luZyBhcmUgYWRkZWQgaW4gMi42XG4gICAgaGFzRHluYW1pY0tleXMsXG4gICAgY29udGVudEhhc2hLZXlcbiAgKSB7XG4gICAgcmVzID0gcmVzIHx8IHsgJHN0YWJsZTogIWhhc0R5bmFtaWNLZXlzIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzbG90ID0gZm5zW2ldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2xvdCkpIHtcbiAgICAgICAgcmVzb2x2ZVNjb3BlZFNsb3RzKHNsb3QsIHJlcywgaGFzRHluYW1pY0tleXMpO1xuICAgICAgfSBlbHNlIGlmIChzbG90KSB7XG4gICAgICAgIC8vIG1hcmtlciBmb3IgcmV2ZXJzZSBwcm94eWluZyB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICAgICAgICBpZiAoc2xvdC5wcm94eSkge1xuICAgICAgICAgIHNsb3QuZm4ucHJveHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlc1tzbG90LmtleV0gPSBzbG90LmZuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29udGVudEhhc2hLZXkpIHtcbiAgICAgIChyZXMpLiRrZXkgPSBjb250ZW50SGFzaEtleTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gYmluZER5bmFtaWNLZXlzIChiYXNlT2JqLCB2YWx1ZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgdmFyIGtleSA9IHZhbHVlc1tpXTtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkpIHtcbiAgICAgICAgYmFzZU9ialt2YWx1ZXNbaV1dID0gdmFsdWVzW2kgKyAxXTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSAnJyAmJiBrZXkgIT09IG51bGwpIHtcbiAgICAgICAgLy8gbnVsbCBpcyBhIHNwZWNpYWwgdmFsdWUgZm9yIGV4cGxpY2l0bHkgcmVtb3ZpbmcgYSBiaW5kaW5nXG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiSW52YWxpZCB2YWx1ZSBmb3IgZHluYW1pYyBkaXJlY3RpdmUgYXJndW1lbnQgKGV4cGVjdGVkIHN0cmluZyBvciBudWxsKTogXCIgKyBrZXkpLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJhc2VPYmpcbiAgfVxuXG4gIC8vIGhlbHBlciB0byBkeW5hbWljYWxseSBhcHBlbmQgbW9kaWZpZXIgcnVudGltZSBtYXJrZXJzIHRvIGV2ZW50IG5hbWVzLlxuICAvLyBlbnN1cmUgb25seSBhcHBlbmQgd2hlbiB2YWx1ZSBpcyBhbHJlYWR5IHN0cmluZywgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY2FzdFxuICAvLyB0byBzdHJpbmcgYW5kIGNhdXNlIHRoZSB0eXBlIGNoZWNrIHRvIG1pc3MuXG4gIGZ1bmN0aW9uIHByZXBlbmRNb2RpZmllciAodmFsdWUsIHN5bWJvbCkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gc3ltYm9sICsgdmFsdWUgOiB2YWx1ZVxuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gaW5zdGFsbFJlbmRlckhlbHBlcnMgKHRhcmdldCkge1xuICAgIHRhcmdldC5fbyA9IG1hcmtPbmNlO1xuICAgIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICAgIHRhcmdldC5fcyA9IHRvU3RyaW5nO1xuICAgIHRhcmdldC5fbCA9IHJlbmRlckxpc3Q7XG4gICAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgICB0YXJnZXQuX3EgPSBsb29zZUVxdWFsO1xuICAgIHRhcmdldC5faSA9IGxvb3NlSW5kZXhPZjtcbiAgICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gICAgdGFyZ2V0Ll9mID0gcmVzb2x2ZUZpbHRlcjtcbiAgICB0YXJnZXQuX2sgPSBjaGVja0tleUNvZGVzO1xuICAgIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgICB0YXJnZXQuX3YgPSBjcmVhdGVUZXh0Vk5vZGU7XG4gICAgdGFyZ2V0Ll9lID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gICAgdGFyZ2V0Ll9nID0gYmluZE9iamVjdExpc3RlbmVycztcbiAgICB0YXJnZXQuX2QgPSBiaW5kRHluYW1pY0tleXM7XG4gICAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgKFxuICAgIGRhdGEsXG4gICAgcHJvcHMsXG4gICAgY2hpbGRyZW4sXG4gICAgcGFyZW50LFxuICAgIEN0b3JcbiAgKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgICAvLyBlbnN1cmUgdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gaW4gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gICAgLy8gZ2V0cyBhIHVuaXF1ZSBjb250ZXh0IC0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNvcnJlY3QgbmFtZWQgc2xvdCBjaGVja1xuICAgIHZhciBjb250ZXh0Vm07XG4gICAgaWYgKGhhc093bihwYXJlbnQsICdfdWlkJykpIHtcbiAgICAgIGNvbnRleHRWbSA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgY29udGV4dFZtLl9vcmlnaW5hbCA9IHBhcmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhlIGNvbnRleHQgdm0gcGFzc2VkIGluIGlzIGEgZnVuY3Rpb25hbCBjb250ZXh0IGFzIHdlbGwuXG4gICAgICAvLyBpbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlIGFibGUgdG8gZ2V0IGEgaG9sZCB0byB0aGVcbiAgICAgIC8vIHJlYWwgY29udGV4dCBpbnN0YW5jZS5cbiAgICAgIGNvbnRleHRWbSA9IHBhcmVudDtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgcGFyZW50ID0gcGFyZW50Ll9vcmlnaW5hbDtcbiAgICB9XG4gICAgdmFyIGlzQ29tcGlsZWQgPSBpc1RydWUob3B0aW9ucy5fY29tcGlsZWQpO1xuICAgIHZhciBuZWVkTm9ybWFsaXphdGlvbiA9ICFpc0NvbXBpbGVkO1xuXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMubGlzdGVuZXJzID0gZGF0YS5vbiB8fCBlbXB0eU9iamVjdDtcbiAgICB0aGlzLmluamVjdGlvbnMgPSByZXNvbHZlSW5qZWN0KG9wdGlvbnMuaW5qZWN0LCBwYXJlbnQpO1xuICAgIHRoaXMuc2xvdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXRoaXMkMS4kc2xvdHMpIHtcbiAgICAgICAgbm9ybWFsaXplU2NvcGVkU2xvdHMoXG4gICAgICAgICAgZGF0YS5zY29wZWRTbG90cyxcbiAgICAgICAgICB0aGlzJDEuJHNsb3RzID0gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBwYXJlbnQpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcyQxLiRzbG90c1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3Njb3BlZFNsb3RzJywgKHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVTY29wZWRTbG90cyhkYXRhLnNjb3BlZFNsb3RzLCB0aGlzLnNsb3RzKCkpXG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgLy8gc3VwcG9ydCBmb3IgY29tcGlsZWQgZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICAgIGlmIChpc0NvbXBpbGVkKSB7XG4gICAgICAvLyBleHBvc2luZyAkb3B0aW9ucyBmb3IgcmVuZGVyU3RhdGljKClcbiAgICAgIHRoaXMuJG9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgLy8gcHJlLXJlc29sdmUgc2xvdHMgZm9yIHJlbmRlclNsb3QoKVxuICAgICAgdGhpcy4kc2xvdHMgPSB0aGlzLnNsb3RzKCk7XG4gICAgICB0aGlzLiRzY29wZWRTbG90cyA9IG5vcm1hbGl6ZVNjb3BlZFNsb3RzKGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuJHNsb3RzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5fc2NvcGVJZCkge1xuICAgICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICAgIGlmICh2bm9kZSAmJiAhQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgICB2bm9kZS5mblNjb3BlSWQgPSBvcHRpb25zLl9zY29wZUlkO1xuICAgICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm5vZGVcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudChjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTsgfTtcbiAgICB9XG4gIH1cblxuICBpbnN0YWxsUmVuZGVySGVscGVycyhGdW5jdGlvbmFsUmVuZGVyQ29udGV4dC5wcm90b3R5cGUpO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQgKFxuICAgIEN0b3IsXG4gICAgcHJvcHNEYXRhLFxuICAgIGRhdGEsXG4gICAgY29udGV4dFZtLFxuICAgIGNoaWxkcmVuXG4gICkge1xuICAgIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHZhciBwcm9wT3B0aW9ucyA9IG9wdGlvbnMucHJvcHM7XG4gICAgaWYgKGlzRGVmKHByb3BPcHRpb25zKSkge1xuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BPcHRpb25zKSB7XG4gICAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhIHx8IGVtcHR5T2JqZWN0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEuYXR0cnMpOyB9XG4gICAgICBpZiAoaXNEZWYoZGF0YS5wcm9wcykpIHsgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5wcm9wcyk7IH1cbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyQ29udGV4dCA9IG5ldyBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dChcbiAgICAgIGRhdGEsXG4gICAgICBwcm9wcyxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY29udGV4dFZtLFxuICAgICAgQ3RvclxuICAgICk7XG5cbiAgICB2YXIgdm5vZGUgPSBvcHRpb25zLnJlbmRlci5jYWxsKG51bGwsIHJlbmRlckNvbnRleHQuX2MsIHJlbmRlckNvbnRleHQpO1xuXG4gICAgaWYgKHZub2RlIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICAgIHJldHVybiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dClcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICB2YXIgdm5vZGVzID0gbm9ybWFsaXplQ2hpbGRyZW4odm5vZGUpIHx8IFtdO1xuICAgICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc1tpXSA9IGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGVzW2ldLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCAodm5vZGUsIGRhdGEsIGNvbnRleHRWbSwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCkge1xuICAgIC8vICM3ODE3IGNsb25lIG5vZGUgYmVmb3JlIHNldHRpbmcgZm5Db250ZXh0LCBvdGhlcndpc2UgaWYgdGhlIG5vZGUgaXMgcmV1c2VkXG4gICAgLy8gKGUuZy4gaXQgd2FzIGZyb20gYSBjYWNoZWQgbm9ybWFsIHNsb3QpIHRoZSBmbkNvbnRleHQgY2F1c2VzIG5hbWVkIHNsb3RzXG4gICAgLy8gdGhhdCBzaG91bGQgbm90IGJlIG1hdGNoZWQgdG8gbWF0Y2guXG4gICAgdmFyIGNsb25lID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgY2xvbmUuZm5Db250ZXh0ID0gY29udGV4dFZtO1xuICAgIGNsb25lLmZuT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAge1xuICAgICAgKGNsb25lLmRldnRvb2xzTWV0YSA9IGNsb25lLmRldnRvb2xzTWV0YSB8fCB7fSkucmVuZGVyQ29udGV4dCA9IHJlbmRlckNvbnRleHQ7XG4gICAgfVxuICAgIGlmIChkYXRhLnNsb3QpIHtcbiAgICAgIChjbG9uZS5kYXRhIHx8IChjbG9uZS5kYXRhID0ge30pKS5zbG90ID0gZGF0YS5zbG90O1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmVcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlUHJvcHMgKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICAgIHRvW2NhbWVsaXplKGtleSldID0gZnJvbVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIC8qICAqL1xuXG4gIC8qICAqL1xuXG4gIC8qICAqL1xuXG4gIC8vIGlubGluZSBob29rcyB0byBiZSBpbnZva2VkIG9uIGNvbXBvbmVudCBWTm9kZXMgZHVyaW5nIHBhdGNoXG4gIHZhciBjb21wb25lbnRWTm9kZUhvb2tzID0ge1xuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQgKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICAgIXZub2RlLmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCAmJlxuICAgICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZVxuICAgICAgKSB7XG4gICAgICAgIC8vIGtlcHQtYWxpdmUgY29tcG9uZW50cywgdHJlYXQgYXMgYSBwYXRjaFxuICAgICAgICB2YXIgbW91bnRlZE5vZGUgPSB2bm9kZTsgLy8gd29yayBhcm91bmQgZmxvd1xuICAgICAgICBjb21wb25lbnRWTm9kZUhvb2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUoXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgYWN0aXZlSW5zdGFuY2VcbiAgICAgICAgKTtcbiAgICAgICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2RlLmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0aW5nKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJlcGF0Y2g6IGZ1bmN0aW9uIHByZXBhdGNoIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICB1cGRhdGVDaGlsZENvbXBvbmVudChcbiAgICAgICAgY2hpbGQsXG4gICAgICAgIG9wdGlvbnMucHJvcHNEYXRhLCAvLyB1cGRhdGVkIHByb3BzXG4gICAgICAgIG9wdGlvbnMubGlzdGVuZXJzLCAvLyB1cGRhdGVkIGxpc3RlbmVyc1xuICAgICAgICB2bm9kZSwgLy8gbmV3IHBhcmVudCB2bm9kZVxuICAgICAgICBvcHRpb25zLmNoaWxkcmVuIC8vIG5ldyBjaGlsZHJlblxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgaW5zZXJ0OiBmdW5jdGlvbiBpbnNlcnQgKHZub2RlKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHZub2RlLmNvbnRleHQ7XG4gICAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgIGlmICghY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCkge1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgY2FsbEhvb2soY29tcG9uZW50SW5zdGFuY2UsICdtb3VudGVkJyk7XG4gICAgICB9XG4gICAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgICAgaWYgKGNvbnRleHQuX2lzTW91bnRlZCkge1xuICAgICAgICAgIC8vIHZ1ZS1yb3V0ZXIjMTIxMlxuICAgICAgICAgIC8vIER1cmluZyB1cGRhdGVzLCBhIGtlcHQtYWxpdmUgY29tcG9uZW50J3MgY2hpbGQgY29tcG9uZW50cyBtYXlcbiAgICAgICAgICAvLyBjaGFuZ2UsIHNvIGRpcmVjdGx5IHdhbGtpbmcgdGhlIHRyZWUgaGVyZSBtYXkgY2FsbCBhY3RpdmF0ZWQgaG9va3NcbiAgICAgICAgICAvLyBvbiBpbmNvcnJlY3QgY2hpbGRyZW4uIEluc3RlYWQgd2UgcHVzaCB0aGVtIGludG8gYSBxdWV1ZSB3aGljaCB3aWxsXG4gICAgICAgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSB3aG9sZSBwYXRjaCBwcm9jZXNzIGVuZGVkLlxuICAgICAgICAgIHF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgaWYgKCF2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIGhvb2tzVG9NZXJnZSA9IE9iamVjdC5rZXlzKGNvbXBvbmVudFZOb2RlSG9va3MpO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAoXG4gICAgQ3RvcixcbiAgICBkYXRhLFxuICAgIGNvbnRleHQsXG4gICAgY2hpbGRyZW4sXG4gICAgdGFnXG4gICkge1xuICAgIGlmIChpc1VuZGVmKEN0b3IpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgYmFzZUN0b3IgPSBjb250ZXh0LiRvcHRpb25zLl9iYXNlO1xuXG4gICAgLy8gcGxhaW4gb3B0aW9ucyBvYmplY3Q6IHR1cm4gaXQgaW50byBhIGNvbnN0cnVjdG9yXG4gICAgaWYgKGlzT2JqZWN0KEN0b3IpKSB7XG4gICAgICBDdG9yID0gYmFzZUN0b3IuZXh0ZW5kKEN0b3IpO1xuICAgIH1cblxuICAgIC8vIGlmIGF0IHRoaXMgc3RhZ2UgaXQncyBub3QgYSBjb25zdHJ1Y3RvciBvciBhbiBhc3luYyBjb21wb25lbnQgZmFjdG9yeSxcbiAgICAvLyByZWplY3QuXG4gICAgaWYgKHR5cGVvZiBDdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm4oKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIgKyAoU3RyaW5nKEN0b3IpKSksIGNvbnRleHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gYXN5bmMgY29tcG9uZW50XG4gICAgdmFyIGFzeW5jRmFjdG9yeTtcbiAgICBpZiAoaXNVbmRlZihDdG9yLmNpZCkpIHtcbiAgICAgIGFzeW5jRmFjdG9yeSA9IEN0b3I7XG4gICAgICBDdG9yID0gcmVzb2x2ZUFzeW5jQ29tcG9uZW50KGFzeW5jRmFjdG9yeSwgYmFzZUN0b3IpO1xuICAgICAgaWYgKEN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciBub2RlIGZvciBhc3luYyBjb21wb25lbnQsIHdoaWNoIGlzIHJlbmRlcmVkXG4gICAgICAgIC8vIGFzIGEgY29tbWVudCBub2RlIGJ1dCBwcmVzZXJ2ZXMgYWxsIHRoZSByYXcgaW5mb3JtYXRpb24gZm9yIHRoZSBub2RlLlxuICAgICAgICAvLyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciBhc3luYyBzZXJ2ZXItcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gICAgICAgIHJldHVybiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyKFxuICAgICAgICAgIGFzeW5jRmFjdG9yeSxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgdGFnXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcblxuICAgIC8vIHJlc29sdmUgY29uc3RydWN0b3Igb3B0aW9ucyBpbiBjYXNlIGdsb2JhbCBtaXhpbnMgYXJlIGFwcGxpZWQgYWZ0ZXJcbiAgICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IgY3JlYXRpb25cbiAgICByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3IpO1xuXG4gICAgLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGRhdGEgaW50byBwcm9wcyAmIGV2ZW50c1xuICAgIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgICAgdHJhbnNmb3JtTW9kZWwoQ3Rvci5vcHRpb25zLCBkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBleHRyYWN0IHByb3BzXG4gICAgdmFyIHByb3BzRGF0YSA9IGV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEoZGF0YSwgQ3RvciwgdGFnKTtcblxuICAgIC8vIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4gICAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuZnVuY3Rpb25hbCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGdW5jdGlvbmFsQ29tcG9uZW50KEN0b3IsIHByb3BzRGF0YSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pXG4gICAgfVxuXG4gICAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgICAvLyBjaGlsZCBjb21wb25lbnQgbGlzdGVuZXJzIGluc3RlYWQgb2YgRE9NIGxpc3RlbmVyc1xuICAgIHZhciBsaXN0ZW5lcnMgPSBkYXRhLm9uO1xuICAgIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gICAgLy8gc28gaXQgZ2V0cyBwcm9jZXNzZWQgZHVyaW5nIHBhcmVudCBjb21wb25lbnQgcGF0Y2guXG4gICAgZGF0YS5vbiA9IGRhdGEubmF0aXZlT247XG5cbiAgICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5hYnN0cmFjdCkpIHtcbiAgICAgIC8vIGFic3RyYWN0IGNvbXBvbmVudHMgZG8gbm90IGtlZXAgYW55dGhpbmdcbiAgICAgIC8vIG90aGVyIHRoYW4gcHJvcHMgJiBsaXN0ZW5lcnMgJiBzbG90XG5cbiAgICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICAgIHZhciBzbG90ID0gZGF0YS5zbG90O1xuICAgICAgZGF0YSA9IHt9O1xuICAgICAgaWYgKHNsb3QpIHtcbiAgICAgICAgZGF0YS5zbG90ID0gc2xvdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbnN0YWxsIGNvbXBvbmVudCBtYW5hZ2VtZW50IGhvb2tzIG9udG8gdGhlIHBsYWNlaG9sZGVyIG5vZGVcbiAgICBpbnN0YWxsQ29tcG9uZW50SG9va3MoZGF0YSk7XG5cbiAgICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciB2bm9kZVxuICAgIHZhciBuYW1lID0gQ3Rvci5vcHRpb25zLm5hbWUgfHwgdGFnO1xuICAgIHZhciB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgIChcInZ1ZS1jb21wb25lbnQtXCIgKyAoQ3Rvci5jaWQpICsgKG5hbWUgPyAoXCItXCIgKyBuYW1lKSA6ICcnKSksXG4gICAgICBkYXRhLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0LFxuICAgICAgeyBDdG9yOiBDdG9yLCBwcm9wc0RhdGE6IHByb3BzRGF0YSwgbGlzdGVuZXJzOiBsaXN0ZW5lcnMsIHRhZzogdGFnLCBjaGlsZHJlbjogY2hpbGRyZW4gfSxcbiAgICAgIGFzeW5jRmFjdG9yeVxuICAgICk7XG5cbiAgICByZXR1cm4gdm5vZGVcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUgKFxuICAgIHZub2RlLCAvLyB3ZSBrbm93IGl0J3MgTW91bnRlZENvbXBvbmVudFZOb2RlIGJ1dCBmbG93IGRvZXNuJ3RcbiAgICBwYXJlbnQgLy8gYWN0aXZlSW5zdGFuY2UgaW4gbGlmZWN5Y2xlIHN0YXRlXG4gICkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgX2lzQ29tcG9uZW50OiB0cnVlLFxuICAgICAgX3BhcmVudFZub2RlOiB2bm9kZSxcbiAgICAgIHBhcmVudDogcGFyZW50XG4gICAgfTtcbiAgICAvLyBjaGVjayBpbmxpbmUtdGVtcGxhdGUgcmVuZGVyIGZ1bmN0aW9uc1xuICAgIHZhciBpbmxpbmVUZW1wbGF0ZSA9IHZub2RlLmRhdGEuaW5saW5lVGVtcGxhdGU7XG4gICAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBpbmxpbmVUZW1wbGF0ZS5yZW5kZXI7XG4gICAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IGlubGluZVRlbXBsYXRlLnN0YXRpY1JlbmRlckZucztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB2bm9kZS5jb21wb25lbnRPcHRpb25zLkN0b3Iob3B0aW9ucylcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRIb29rcyAoZGF0YSkge1xuICAgIHZhciBob29rcyA9IGRhdGEuaG9vayB8fCAoZGF0YS5ob29rID0ge30pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3NUb01lcmdlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgICAgdmFyIGV4aXN0aW5nID0gaG9va3Nba2V5XTtcbiAgICAgIHZhciB0b01lcmdlID0gY29tcG9uZW50Vk5vZGVIb29rc1trZXldO1xuICAgICAgaWYgKGV4aXN0aW5nICE9PSB0b01lcmdlICYmICEoZXhpc3RpbmcgJiYgZXhpc3RpbmcuX21lcmdlZCkpIHtcbiAgICAgICAgaG9va3Nba2V5XSA9IGV4aXN0aW5nID8gbWVyZ2VIb29rJDEodG9NZXJnZSwgZXhpc3RpbmcpIDogdG9NZXJnZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZUhvb2skMSAoZjEsIGYyKSB7XG4gICAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAvLyBmbG93IGNvbXBsYWlucyBhYm91dCBleHRyYSBhcmdzIHdoaWNoIGlzIHdoeSB3ZSB1c2UgYW55XG4gICAgICBmMShhLCBiKTtcbiAgICAgIGYyKGEsIGIpO1xuICAgIH07XG4gICAgbWVyZ2VkLl9tZXJnZWQgPSB0cnVlO1xuICAgIHJldHVybiBtZXJnZWRcbiAgfVxuXG4gIC8vIHRyYW5zZm9ybSBjb21wb25lbnQgdi1tb2RlbCBpbmZvICh2YWx1ZSBhbmQgY2FsbGJhY2spIGludG9cbiAgLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybU1vZGVsIChvcHRpb25zLCBkYXRhKSB7XG4gICAgdmFyIHByb3AgPSAob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsLnByb3ApIHx8ICd2YWx1ZSc7XG4gICAgdmFyIGV2ZW50ID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0J1xuICAgIDsoZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KSlbcHJvcF0gPSBkYXRhLm1vZGVsLnZhbHVlO1xuICAgIHZhciBvbiA9IGRhdGEub24gfHwgKGRhdGEub24gPSB7fSk7XG4gICAgdmFyIGV4aXN0aW5nID0gb25bZXZlbnRdO1xuICAgIHZhciBjYWxsYmFjayA9IGRhdGEubW9kZWwuY2FsbGJhY2s7XG4gICAgaWYgKGlzRGVmKGV4aXN0aW5nKSkge1xuICAgICAgaWYgKFxuICAgICAgICBBcnJheS5pc0FycmF5KGV4aXN0aW5nKVxuICAgICAgICAgID8gZXhpc3RpbmcuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xXG4gICAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2tcbiAgICAgICkge1xuICAgICAgICBvbltldmVudF0gPSBbY2FsbGJhY2tdLmNvbmNhdChleGlzdGluZyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uW2V2ZW50XSA9IGNhbGxiYWNrO1xuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIHZhciBTSU1QTEVfTk9STUFMSVpFID0gMTtcbiAgdmFyIEFMV0FZU19OT1JNQUxJWkUgPSAyO1xuXG4gIC8vIHdyYXBwZXIgZnVuY3Rpb24gZm9yIHByb3ZpZGluZyBhIG1vcmUgZmxleGlibGUgaW50ZXJmYWNlXG4gIC8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50IChcbiAgICBjb250ZXh0LFxuICAgIHRhZyxcbiAgICBkYXRhLFxuICAgIGNoaWxkcmVuLFxuICAgIG5vcm1hbGl6YXRpb25UeXBlLFxuICAgIGFsd2F5c05vcm1hbGl6ZVxuICApIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgICAgbm9ybWFsaXphdGlvblR5cGUgPSBjaGlsZHJlbjtcbiAgICAgIGNoaWxkcmVuID0gZGF0YTtcbiAgICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChpc1RydWUoYWx3YXlzTm9ybWFsaXplKSkge1xuICAgICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpFO1xuICAgIH1cbiAgICByZXR1cm4gX2NyZWF0ZUVsZW1lbnQoY29udGV4dCwgdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUpXG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlRWxlbWVudCAoXG4gICAgY29udGV4dCxcbiAgICB0YWcsXG4gICAgZGF0YSxcbiAgICBjaGlsZHJlbixcbiAgICBub3JtYWxpemF0aW9uVHlwZVxuICApIHtcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoKGRhdGEpLl9fb2JfXykpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiQXZvaWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIgKyAoSlNPTi5zdHJpbmdpZnkoZGF0YSkpICsgXCJcXG5cIiArXG4gICAgICAgICdBbHdheXMgY3JlYXRlIGZyZXNoIHZub2RlIGRhdGEgb2JqZWN0cyBpbiBlYWNoIHJlbmRlciEnLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICAgIH1cbiAgICAvLyBvYmplY3Qgc3ludGF4IGluIHYtYmluZFxuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmlzKSkge1xuICAgICAgdGFnID0gZGF0YS5pcztcbiAgICB9XG4gICAgaWYgKCF0YWcpIHtcbiAgICAgIC8vIGluIGNhc2Ugb2YgY29tcG9uZW50IDppcyBzZXQgdG8gZmFsc3kgdmFsdWVcbiAgICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgICB9XG4gICAgLy8gd2FybiBhZ2FpbnN0IG5vbi1wcmltaXRpdmUga2V5XG4gICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEua2V5KSAmJiAhaXNQcmltaXRpdmUoZGF0YS5rZXkpXG4gICAgKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0F2b2lkIHVzaW5nIG5vbi1wcmltaXRpdmUgdmFsdWUgYXMga2V5LCAnICtcbiAgICAgICAgICAndXNlIHN0cmluZy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gc3VwcG9ydCBzaW5nbGUgZnVuY3Rpb24gY2hpbGRyZW4gYXMgZGVmYXVsdCBzY29wZWQgc2xvdFxuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgdHlwZW9mIGNoaWxkcmVuWzBdID09PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICAgIGRhdGEuc2NvcGVkU2xvdHMgPSB7IGRlZmF1bHQ6IGNoaWxkcmVuWzBdIH07XG4gICAgICBjaGlsZHJlbi5sZW5ndGggPSAwO1xuICAgIH1cbiAgICBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IEFMV0FZU19OT1JNQUxJWkUpIHtcbiAgICAgIGNoaWxkcmVuID0gbm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICAgIH0gZWxzZSBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IFNJTVBMRV9OT1JNQUxJWkUpIHtcbiAgICAgIGNoaWxkcmVuID0gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICAgIH1cbiAgICB2YXIgdm5vZGUsIG5zO1xuICAgIGlmICh0eXBlb2YgdGFnID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIEN0b3I7XG4gICAgICBucyA9IChjb250ZXh0LiR2bm9kZSAmJiBjb250ZXh0LiR2bm9kZS5ucykgfHwgY29uZmlnLmdldFRhZ05hbWVzcGFjZSh0YWcpO1xuICAgICAgaWYgKGNvbmZpZy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgICAgLy8gcGxhdGZvcm0gYnVpbHQtaW4gZWxlbWVudHNcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEubmF0aXZlT24pKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIChcIlRoZSAubmF0aXZlIG1vZGlmaWVyIGZvciB2LW9uIGlzIG9ubHkgdmFsaWQgb24gY29tcG9uZW50cyBidXQgaXQgd2FzIHVzZWQgb24gPFwiICsgdGFnICsgXCI+LlwiKSxcbiAgICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHZub2RlID0gbmV3IFZOb2RlKFxuICAgICAgICAgIGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICgoIWRhdGEgfHwgIWRhdGEucHJlKSAmJiBpc0RlZihDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMsICdjb21wb25lbnRzJywgdGFnKSkpIHtcbiAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgIHZub2RlID0gY3JlYXRlQ29tcG9uZW50KEN0b3IsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuLCB0YWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdW5rbm93biBvciB1bmxpc3RlZCBuYW1lc3BhY2VkIGVsZW1lbnRzXG4gICAgICAgIC8vIGNoZWNrIGF0IHJ1bnRpbWUgYmVjYXVzZSBpdCBtYXkgZ2V0IGFzc2lnbmVkIGEgbmFtZXNwYWNlIHdoZW4gaXRzXG4gICAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICAgIHZub2RlID0gbmV3IFZOb2RlKFxuICAgICAgICAgIHRhZywgZGF0YSwgY2hpbGRyZW4sXG4gICAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGlyZWN0IGNvbXBvbmVudCBvcHRpb25zIC8gY29uc3RydWN0b3JcbiAgICAgIHZub2RlID0gY3JlYXRlQ29tcG9uZW50KHRhZywgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgIHJldHVybiB2bm9kZVxuICAgIH0gZWxzZSBpZiAoaXNEZWYodm5vZGUpKSB7XG4gICAgICBpZiAoaXNEZWYobnMpKSB7IGFwcGx5TlModm5vZGUsIG5zKTsgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7IHJlZ2lzdGVyRGVlcEJpbmRpbmdzKGRhdGEpOyB9XG4gICAgICByZXR1cm4gdm5vZGVcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5TlMgKHZub2RlLCBucywgZm9yY2UpIHtcbiAgICB2bm9kZS5ucyA9IG5zO1xuICAgIGlmICh2bm9kZS50YWcgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgICAgLy8gdXNlIGRlZmF1bHQgbmFtZXNwYWNlIGluc2lkZSBmb3JlaWduT2JqZWN0XG4gICAgICBucyA9IHVuZGVmaW5lZDtcbiAgICAgIGZvcmNlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGlzRGVmKHZub2RlLmNoaWxkcmVuKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdm5vZGUuY2hpbGRyZW5baV07XG4gICAgICAgIGlmIChpc0RlZihjaGlsZC50YWcpICYmIChcbiAgICAgICAgICBpc1VuZGVmKGNoaWxkLm5zKSB8fCAoaXNUcnVlKGZvcmNlKSAmJiBjaGlsZC50YWcgIT09ICdzdmcnKSkpIHtcbiAgICAgICAgICBhcHBseU5TKGNoaWxkLCBucywgZm9yY2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gcmVmICM1MzE4XG4gIC8vIG5lY2Vzc2FyeSB0byBlbnN1cmUgcGFyZW50IHJlLXJlbmRlciB3aGVuIGRlZXAgYmluZGluZ3MgbGlrZSA6c3R5bGUgYW5kXG4gIC8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyRGVlcEJpbmRpbmdzIChkYXRhKSB7XG4gICAgaWYgKGlzT2JqZWN0KGRhdGEuc3R5bGUpKSB7XG4gICAgICB0cmF2ZXJzZShkYXRhLnN0eWxlKTtcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGRhdGEuY2xhc3MpKSB7XG4gICAgICB0cmF2ZXJzZShkYXRhLmNsYXNzKTtcbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBpbml0UmVuZGVyICh2bSkge1xuICAgIHZtLl92bm9kZSA9IG51bGw7IC8vIHRoZSByb290IG9mIHRoZSBjaGlsZCB0cmVlXG4gICAgdm0uX3N0YXRpY1RyZWVzID0gbnVsbDsgLy8gdi1vbmNlIGNhY2hlZCB0cmVlc1xuICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gICAgdmFyIHBhcmVudFZub2RlID0gdm0uJHZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGU7IC8vIHRoZSBwbGFjZWhvbGRlciBub2RlIGluIHBhcmVudCB0cmVlXG4gICAgdmFyIHJlbmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICAgIHZtLiRzbG90cyA9IHJlc29sdmVTbG90cyhvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiwgcmVuZGVyQ29udGV4dCk7XG4gICAgdm0uJHNjb3BlZFNsb3RzID0gZW1wdHlPYmplY3Q7XG4gICAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gICAgLy8gc28gdGhhdCB3ZSBnZXQgcHJvcGVyIHJlbmRlciBjb250ZXh0IGluc2lkZSBpdC5cbiAgICAvLyBhcmdzIG9yZGVyOiB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSwgYWx3YXlzTm9ybWFsaXplXG4gICAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgICB2bS5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KHZtLCBhLCBiLCBjLCBkLCBmYWxzZSk7IH07XG4gICAgLy8gbm9ybWFsaXphdGlvbiBpcyBhbHdheXMgYXBwbGllZCBmb3IgdGhlIHB1YmxpYyB2ZXJzaW9uLCB1c2VkIGluXG4gICAgLy8gdXNlci13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMuXG4gICAgdm0uJGNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgdHJ1ZSk7IH07XG5cbiAgICAvLyAkYXR0cnMgJiAkbGlzdGVuZXJzIGFyZSBleHBvc2VkIGZvciBlYXNpZXIgSE9DIGNyZWF0aW9uLlxuICAgIC8vIHRoZXkgbmVlZCB0byBiZSByZWFjdGl2ZSBzbyB0aGF0IEhPQ3MgdXNpbmcgdGhlbSBhcmUgYWx3YXlzIHVwZGF0ZWRcbiAgICB2YXIgcGFyZW50RGF0YSA9IHBhcmVudFZub2RlICYmIHBhcmVudFZub2RlLmRhdGE7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIHtcbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGF0dHJzJywgcGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybihcIiRhdHRycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IG51bGw7XG5cbiAgZnVuY3Rpb24gcmVuZGVyTWl4aW4gKFZ1ZSkge1xuICAgIC8vIGluc3RhbGwgcnVudGltZSBjb252ZW5pZW5jZSBoZWxwZXJzXG4gICAgaW5zdGFsbFJlbmRlckhlbHBlcnMoVnVlLnByb3RvdHlwZSk7XG5cbiAgICBWdWUucHJvdG90eXBlLiRuZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIG5leHRUaWNrKGZuLCB0aGlzKVxuICAgIH07XG5cbiAgICBWdWUucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgdmFyIHJlZiA9IHZtLiRvcHRpb25zO1xuICAgICAgdmFyIHJlbmRlciA9IHJlZi5yZW5kZXI7XG4gICAgICB2YXIgX3BhcmVudFZub2RlID0gcmVmLl9wYXJlbnRWbm9kZTtcblxuICAgICAgaWYgKF9wYXJlbnRWbm9kZSkge1xuICAgICAgICB2bS4kc2NvcGVkU2xvdHMgPSBub3JtYWxpemVTY29wZWRTbG90cyhcbiAgICAgICAgICBfcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cyxcbiAgICAgICAgICB2bS4kc2xvdHMsXG4gICAgICAgICAgdm0uJHNjb3BlZFNsb3RzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCBwYXJlbnQgdm5vZGUuIHRoaXMgYWxsb3dzIHJlbmRlciBmdW5jdGlvbnMgdG8gaGF2ZSBhY2Nlc3NcbiAgICAgIC8vIHRvIHRoZSBkYXRhIG9uIHRoZSBwbGFjZWhvbGRlciBub2RlLlxuICAgICAgdm0uJHZub2RlID0gX3BhcmVudFZub2RlO1xuICAgICAgLy8gcmVuZGVyIHNlbGZcbiAgICAgIHZhciB2bm9kZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBtYWludGFpbiBhIHN0YWNrIGJlY2F1c2UgYWxsIHJlbmRlciBmbnMgYXJlIGNhbGxlZFxuICAgICAgICAvLyBzZXBhcmF0ZWx5IGZyb20gb25lIGFub3RoZXIuIE5lc3RlZCBjb21wb25lbnQncyByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgICAgLy8gd2hlbiBwYXJlbnQgY29tcG9uZW50IGlzIHBhdGNoZWQuXG4gICAgICAgIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IHZtO1xuICAgICAgICB2bm9kZSA9IHJlbmRlci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJcIik7XG4gICAgICAgIC8vIHJldHVybiBlcnJvciByZW5kZXIgcmVzdWx0LFxuICAgICAgICAvLyBvciBwcmV2aW91cyB2bm9kZSB0byBwcmV2ZW50IHJlbmRlciBlcnJvciBjYXVzaW5nIGJsYW5rIGNvbXBvbmVudFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodm0uJG9wdGlvbnMucmVuZGVyRXJyb3IpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdm5vZGUgPSB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQsIGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlckVycm9yXCIpO1xuICAgICAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSAmJiB2bm9kZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdm5vZGUgPSB2bm9kZVswXTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBlbXB0eSB2bm9kZSBpbiBjYXNlIHRoZSByZW5kZXIgZnVuY3Rpb24gZXJyb3JlZCBvdXRcbiAgICAgIGlmICghKHZub2RlIGluc3RhbmNlb2YgVk5vZGUpKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAnTXVsdGlwbGUgcm9vdCBub2RlcyByZXR1cm5lZCBmcm9tIHJlbmRlciBmdW5jdGlvbi4gUmVuZGVyIGZ1bmN0aW9uICcgK1xuICAgICAgICAgICAgJ3Nob3VsZCByZXR1cm4gYSBzaW5nbGUgcm9vdCBub2RlLicsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdm5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgcGFyZW50XG4gICAgICB2bm9kZS5wYXJlbnQgPSBfcGFyZW50Vm5vZGU7XG4gICAgICByZXR1cm4gdm5vZGVcbiAgICB9O1xuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gZW5zdXJlQ3RvciAoY29tcCwgYmFzZSkge1xuICAgIGlmIChcbiAgICAgIGNvbXAuX19lc01vZHVsZSB8fFxuICAgICAgKGhhc1N5bWJvbCAmJiBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKVxuICAgICkge1xuICAgICAgY29tcCA9IGNvbXAuZGVmYXVsdDtcbiAgICB9XG4gICAgcmV0dXJuIGlzT2JqZWN0KGNvbXApXG4gICAgICA/IGJhc2UuZXh0ZW5kKGNvbXApXG4gICAgICA6IGNvbXBcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFzeW5jUGxhY2Vob2xkZXIgKFxuICAgIGZhY3RvcnksXG4gICAgZGF0YSxcbiAgICBjb250ZXh0LFxuICAgIGNoaWxkcmVuLFxuICAgIHRhZ1xuICApIHtcbiAgICB2YXIgbm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICBub2RlLmFzeW5jRmFjdG9yeSA9IGZhY3Rvcnk7XG4gICAgbm9kZS5hc3luY01ldGEgPSB7IGRhdGE6IGRhdGEsIGNvbnRleHQ6IGNvbnRleHQsIGNoaWxkcmVuOiBjaGlsZHJlbiwgdGFnOiB0YWcgfTtcbiAgICByZXR1cm4gbm9kZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZUFzeW5jQ29tcG9uZW50IChcbiAgICBmYWN0b3J5LFxuICAgIGJhc2VDdG9yXG4gICkge1xuICAgIGlmIChpc1RydWUoZmFjdG9yeS5lcnJvcikgJiYgaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeS5lcnJvckNvbXBcbiAgICB9XG5cbiAgICBpZiAoaXNEZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgIHJldHVybiBmYWN0b3J5LnJlc29sdmVkXG4gICAgfVxuXG4gICAgdmFyIG93bmVyID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlO1xuICAgIGlmIChvd25lciAmJiBpc0RlZihmYWN0b3J5Lm93bmVycykgJiYgZmFjdG9yeS5vd25lcnMuaW5kZXhPZihvd25lcikgPT09IC0xKSB7XG4gICAgICAvLyBhbHJlYWR5IHBlbmRpbmdcbiAgICAgIGZhY3Rvcnkub3duZXJzLnB1c2gob3duZXIpO1xuICAgIH1cblxuICAgIGlmIChpc1RydWUoZmFjdG9yeS5sb2FkaW5nKSAmJiBpc0RlZihmYWN0b3J5LmxvYWRpbmdDb21wKSkge1xuICAgICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ0NvbXBcbiAgICB9XG5cbiAgICBpZiAob3duZXIgJiYgIWlzRGVmKGZhY3Rvcnkub3duZXJzKSkge1xuICAgICAgdmFyIG93bmVycyA9IGZhY3Rvcnkub3duZXJzID0gW293bmVyXTtcbiAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgIHZhciB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgICAgdmFyIHRpbWVyVGltZW91dCA9IG51bGxcblxuICAgICAgOyhvd25lcikuJG9uKCdob29rOmRlc3Ryb3llZCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZShvd25lcnMsIG93bmVyKTsgfSk7XG5cbiAgICAgIHZhciBmb3JjZVJlbmRlciA9IGZ1bmN0aW9uIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvd25lcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgKG93bmVyc1tpXSkuJGZvcmNlVXBkYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgaWYgKHRpbWVyTG9hZGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyTG9hZGluZyk7XG4gICAgICAgICAgICB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGltZXJUaW1lb3V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJUaW1lb3V0KTtcbiAgICAgICAgICAgIHRpbWVyVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB2YXIgcmVzb2x2ZSA9IG9uY2UoZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAvLyBjYWNoZSByZXNvbHZlZFxuICAgICAgICBmYWN0b3J5LnJlc29sdmVkID0gZW5zdXJlQ3RvcihyZXMsIGJhc2VDdG9yKTtcbiAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrcyBvbmx5IGlmIHRoaXMgaXMgbm90IGEgc3luY2hyb25vdXMgcmVzb2x2ZVxuICAgICAgICAvLyAoYXN5bmMgcmVzb2x2ZXMgYXJlIHNoaW1tZWQgYXMgc3luY2hyb25vdXMgZHVyaW5nIFNTUilcbiAgICAgICAgaWYgKCFzeW5jKSB7XG4gICAgICAgICAgZm9yY2VSZW5kZXIodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcmVqZWN0ID0gb25jZShmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJGYWlsZWQgdG8gcmVzb2x2ZSBhc3luYyBjb21wb25lbnQ6IFwiICsgKFN0cmluZyhmYWN0b3J5KSkgK1xuICAgICAgICAgIChyZWFzb24gPyAoXCJcXG5SZWFzb246IFwiICsgcmVhc29uKSA6ICcnKVxuICAgICAgICApO1xuICAgICAgICBpZiAoaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgICAgICAgZmFjdG9yeS5lcnJvciA9IHRydWU7XG4gICAgICAgICAgZm9yY2VSZW5kZXIodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcmVzID0gZmFjdG9yeShyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICBpZiAoaXNPYmplY3QocmVzKSkge1xuICAgICAgICBpZiAoaXNQcm9taXNlKHJlcykpIHtcbiAgICAgICAgICAvLyAoKSA9PiBQcm9taXNlXG4gICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzUHJvbWlzZShyZXMuY29tcG9uZW50KSkge1xuICAgICAgICAgIHJlcy5jb21wb25lbnQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgICAgaWYgKGlzRGVmKHJlcy5lcnJvcikpIHtcbiAgICAgICAgICAgIGZhY3RvcnkuZXJyb3JDb21wID0gZW5zdXJlQ3RvcihyZXMuZXJyb3IsIGJhc2VDdG9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNEZWYocmVzLmxvYWRpbmcpKSB7XG4gICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmdDb21wID0gZW5zdXJlQ3RvcihyZXMubG9hZGluZywgYmFzZUN0b3IpO1xuICAgICAgICAgICAgaWYgKHJlcy5kZWxheSA9PT0gMCkge1xuICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSAmJiBpc1VuZGVmKGZhY3RvcnkuZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgZm9yY2VSZW5kZXIoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSwgcmVzLmRlbGF5IHx8IDIwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzRGVmKHJlcy50aW1lb3V0KSkge1xuICAgICAgICAgICAgdGltZXJUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHRpbWVyVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgICAgXCJ0aW1lb3V0IChcIiArIChyZXMudGltZW91dCkgKyBcIm1zKVwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgcmVzLnRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAvLyByZXR1cm4gaW4gY2FzZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5XG4gICAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nXG4gICAgICAgID8gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICAgICAgICA6IGZhY3RvcnkucmVzb2x2ZWRcbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBpc0FzeW5jUGxhY2Vob2xkZXIgKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5pc0NvbW1lbnQgJiYgbm9kZS5hc3luY0ZhY3RvcnlcbiAgfVxuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGdldEZpcnN0Q29tcG9uZW50Q2hpbGQgKGNoaWxkcmVuKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gY2hpbGRyZW5baV07XG4gICAgICAgIGlmIChpc0RlZihjKSAmJiAoaXNEZWYoYy5jb21wb25lbnRPcHRpb25zKSB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYykpKSB7XG4gICAgICAgICAgcmV0dXJuIGNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGluaXRFdmVudHMgKHZtKSB7XG4gICAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdm0uX2hhc0hvb2tFdmVudCA9IGZhbHNlO1xuICAgIC8vIGluaXQgcGFyZW50IGF0dGFjaGVkIGV2ZW50c1xuICAgIHZhciBsaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICAgIGlmIChsaXN0ZW5lcnMpIHtcbiAgICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdGFyZ2V0O1xuXG4gIGZ1bmN0aW9uIGFkZCAoZXZlbnQsIGZuKSB7XG4gICAgdGFyZ2V0LiRvbihldmVudCwgZm4pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlJDEgKGV2ZW50LCBmbikge1xuICAgIHRhcmdldC4kb2ZmKGV2ZW50LCBmbik7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIF90YXJnZXQgPSB0YXJnZXQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyICgpIHtcbiAgICAgIHZhciByZXMgPSBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKHJlcyAhPT0gbnVsbCkge1xuICAgICAgICBfdGFyZ2V0LiRvZmYoZXZlbnQsIG9uY2VIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnMgKFxuICAgIHZtLFxuICAgIGxpc3RlbmVycyxcbiAgICBvbGRMaXN0ZW5lcnNcbiAgKSB7XG4gICAgdGFyZ2V0ID0gdm07XG4gICAgdXBkYXRlTGlzdGVuZXJzKGxpc3RlbmVycywgb2xkTGlzdGVuZXJzIHx8IHt9LCBhZGQsIHJlbW92ZSQxLCBjcmVhdGVPbmNlSGFuZGxlciwgdm0pO1xuICAgIHRhcmdldCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV2ZW50c01peGluIChWdWUpIHtcbiAgICB2YXIgaG9va1JFID0gL15ob29rOi87XG4gICAgVnVlLnByb3RvdHlwZS4kb24gPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgdm0uJG9uKGV2ZW50W2ldLCBmbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICh2bS5fZXZlbnRzW2V2ZW50XSB8fCAodm0uX2V2ZW50c1tldmVudF0gPSBbXSkpLnB1c2goZm4pO1xuICAgICAgICAvLyBvcHRpbWl6ZSBob29rOmV2ZW50IGNvc3QgYnkgdXNpbmcgYSBib29sZWFuIGZsYWcgbWFya2VkIGF0IHJlZ2lzdHJhdGlvblxuICAgICAgICAvLyBpbnN0ZWFkIG9mIGEgaGFzaCBsb29rdXBcbiAgICAgICAgaWYgKGhvb2tSRS50ZXN0KGV2ZW50KSkge1xuICAgICAgICAgIHZtLl9oYXNIb29rRXZlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdm1cbiAgICB9O1xuXG4gICAgVnVlLnByb3RvdHlwZS4kb25jZSA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBvbiAoKSB7XG4gICAgICAgIHZtLiRvZmYoZXZlbnQsIG9uKTtcbiAgICAgICAgZm4uYXBwbHkodm0sIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBvbi5mbiA9IGZuO1xuICAgICAgdm0uJG9uKGV2ZW50LCBvbik7XG4gICAgICByZXR1cm4gdm1cbiAgICB9O1xuXG4gICAgVnVlLnByb3RvdHlwZS4kb2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgIC8vIGFsbFxuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICByZXR1cm4gdm1cbiAgICAgIH1cbiAgICAgIC8vIGFycmF5IG9mIGV2ZW50c1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAodmFyIGkkMSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGkkMSA8IGw7IGkkMSsrKSB7XG4gICAgICAgICAgdm0uJG9mZihldmVudFtpJDFdLCBmbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZtXG4gICAgICB9XG4gICAgICAvLyBzcGVjaWZpYyBldmVudFxuICAgICAgdmFyIGNicyA9IHZtLl9ldmVudHNbZXZlbnRdO1xuICAgICAgaWYgKCFjYnMpIHtcbiAgICAgICAgcmV0dXJuIHZtXG4gICAgICB9XG4gICAgICBpZiAoIWZuKSB7XG4gICAgICAgIHZtLl9ldmVudHNbZXZlbnRdID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIHZtXG4gICAgICB9XG4gICAgICAvLyBzcGVjaWZpYyBoYW5kbGVyXG4gICAgICB2YXIgY2I7XG4gICAgICB2YXIgaSA9IGNicy5sZW5ndGg7XG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGNiID0gY2JzW2ldO1xuICAgICAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICAgIGNicy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZtXG4gICAgfTtcblxuICAgIFZ1ZS5wcm90b3R5cGUuJGVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICB7XG4gICAgICAgIHZhciBsb3dlckNhc2VFdmVudCA9IGV2ZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChsb3dlckNhc2VFdmVudCAhPT0gZXZlbnQgJiYgdm0uX2V2ZW50c1tsb3dlckNhc2VFdmVudF0pIHtcbiAgICAgICAgICB0aXAoXG4gICAgICAgICAgICBcIkV2ZW50IFxcXCJcIiArIGxvd2VyQ2FzZUV2ZW50ICsgXCJcXFwiIGlzIGVtaXR0ZWQgaW4gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIiBidXQgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgeW91IGNhbm5vdCB1c2UgXCIgK1xuICAgICAgICAgICAgXCJ2LW9uIHRvIGxpc3RlbiB0byBjYW1lbENhc2UgZXZlbnRzIHdoZW4gdXNpbmcgaW4tRE9NIHRlbXBsYXRlcy4gXCIgK1xuICAgICAgICAgICAgXCJZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIgKyAoaHlwaGVuYXRlKGV2ZW50KSkgKyBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIgKyBldmVudCArIFwiXFxcIi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICAgIGlmIChjYnMpIHtcbiAgICAgICAgY2JzID0gY2JzLmxlbmd0aCA+IDEgPyB0b0FycmF5KGNicykgOiBjYnM7XG4gICAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgICAgICB2YXIgaW5mbyA9IFwiZXZlbnQgaGFuZGxlciBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCJcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2JzW2ldLCB2bSwgYXJncywgdm0sIGluZm8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdm1cbiAgICB9O1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcbiAgdmFyIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHNldEFjdGl2ZUluc3RhbmNlKHZtKSB7XG4gICAgdmFyIHByZXZBY3RpdmVJbnN0YW5jZSA9IGFjdGl2ZUluc3RhbmNlO1xuICAgIGFjdGl2ZUluc3RhbmNlID0gdm07XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFjdGl2ZUluc3RhbmNlID0gcHJldkFjdGl2ZUluc3RhbmNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRMaWZlY3ljbGUgKHZtKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcblxuICAgIC8vIGxvY2F0ZSBmaXJzdCBub24tYWJzdHJhY3QgcGFyZW50XG4gICAgdmFyIHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgIW9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHdoaWxlIChwYXJlbnQuJG9wdGlvbnMuYWJzdHJhY3QgJiYgcGFyZW50LiRwYXJlbnQpIHtcbiAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICBwYXJlbnQuJGNoaWxkcmVuLnB1c2godm0pO1xuICAgIH1cblxuICAgIHZtLiRwYXJlbnQgPSBwYXJlbnQ7XG4gICAgdm0uJHJvb3QgPSBwYXJlbnQgPyBwYXJlbnQuJHJvb3QgOiB2bTtcblxuICAgIHZtLiRjaGlsZHJlbiA9IFtdO1xuICAgIHZtLiRyZWZzID0ge307XG5cbiAgICB2bS5fd2F0Y2hlciA9IG51bGw7XG4gICAgdm0uX2luYWN0aXZlID0gbnVsbDtcbiAgICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgICB2bS5faXNNb3VudGVkID0gZmFsc2U7XG4gICAgdm0uX2lzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpZmVjeWNsZU1peGluIChWdWUpIHtcbiAgICBWdWUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgIHZhciBwcmV2RWwgPSB2bS4kZWw7XG4gICAgICB2YXIgcHJldlZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgdmFyIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSA9IHNldEFjdGl2ZUluc3RhbmNlKHZtKTtcbiAgICAgIHZtLl92bm9kZSA9IHZub2RlO1xuICAgICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gaXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgICAvLyBiYXNlZCBvbiB0aGUgcmVuZGVyaW5nIGJhY2tlbmQgdXNlZC5cbiAgICAgIGlmICghcHJldlZub2RlKSB7XG4gICAgICAgIC8vIGluaXRpYWwgcmVuZGVyXG4gICAgICAgIHZtLiRlbCA9IHZtLl9fcGF0Y2hfXyh2bS4kZWwsIHZub2RlLCBoeWRyYXRpbmcsIGZhbHNlIC8qIHJlbW92ZU9ubHkgKi8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlc1xuICAgICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18ocHJldlZub2RlLCB2bm9kZSk7XG4gICAgICB9XG4gICAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAgIC8vIHVwZGF0ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxuICAgICAgaWYgKHByZXZFbCkge1xuICAgICAgICBwcmV2RWwuX192dWVfXyA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodm0uJGVsKSB7XG4gICAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgICB9XG4gICAgICAvLyBpZiBwYXJlbnQgaXMgYW4gSE9DLCB1cGRhdGUgaXRzICRlbCBhcyB3ZWxsXG4gICAgICBpZiAodm0uJHZub2RlICYmIHZtLiRwYXJlbnQgJiYgdm0uJHZub2RlID09PSB2bS4kcGFyZW50Ll92bm9kZSkge1xuICAgICAgICB2bS4kcGFyZW50LiRlbCA9IHZtLiRlbDtcbiAgICAgIH1cbiAgICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcbiAgICAgIC8vIHVwZGF0ZWQgaW4gYSBwYXJlbnQncyB1cGRhdGVkIGhvb2suXG4gICAgfTtcblxuICAgIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgIGlmICh2bS5fd2F0Y2hlcikge1xuICAgICAgICB2bS5fd2F0Y2hlci51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgVnVlLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICBpZiAodm0uX2lzQmVpbmdEZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZURlc3Ryb3knKTtcbiAgICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIC8vIHJlbW92ZSBzZWxmIGZyb20gcGFyZW50XG4gICAgICB2YXIgcGFyZW50ID0gdm0uJHBhcmVudDtcbiAgICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgICAgcmVtb3ZlKHBhcmVudC4kY2hpbGRyZW4sIHZtKTtcbiAgICAgIH1cbiAgICAgIC8vIHRlYXJkb3duIHdhdGNoZXJzXG4gICAgICBpZiAodm0uX3dhdGNoZXIpIHtcbiAgICAgICAgdm0uX3dhdGNoZXIudGVhcmRvd24oKTtcbiAgICAgIH1cbiAgICAgIHZhciBpID0gdm0uX3dhdGNoZXJzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgdm0uX3dhdGNoZXJzW2ldLnRlYXJkb3duKCk7XG4gICAgICB9XG4gICAgICAvLyByZW1vdmUgcmVmZXJlbmNlIGZyb20gZGF0YSBvYlxuICAgICAgLy8gZnJvemVuIG9iamVjdCBtYXkgbm90IGhhdmUgb2JzZXJ2ZXIuXG4gICAgICBpZiAodm0uX2RhdGEuX19vYl9fKSB7XG4gICAgICAgIHZtLl9kYXRhLl9fb2JfXy52bUNvdW50LS07XG4gICAgICB9XG4gICAgICAvLyBjYWxsIHRoZSBsYXN0IGhvb2suLi5cbiAgICAgIHZtLl9pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAvLyBpbnZva2UgZGVzdHJveSBob29rcyBvbiBjdXJyZW50IHJlbmRlcmVkIHRyZWVcbiAgICAgIHZtLl9fcGF0Y2hfXyh2bS5fdm5vZGUsIG51bGwpO1xuICAgICAgLy8gZmlyZSBkZXN0cm95ZWQgaG9va1xuICAgICAgY2FsbEhvb2sodm0sICdkZXN0cm95ZWQnKTtcbiAgICAgIC8vIHR1cm4gb2ZmIGFsbCBpbnN0YW5jZSBsaXN0ZW5lcnMuXG4gICAgICB2bS4kb2ZmKCk7XG4gICAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICAgIGlmICh2bS4kZWwpIHtcbiAgICAgICAgdm0uJGVsLl9fdnVlX18gPSBudWxsO1xuICAgICAgfVxuICAgICAgLy8gcmVsZWFzZSBjaXJjdWxhciByZWZlcmVuY2UgKCM2NzU5KVxuICAgICAgaWYgKHZtLiR2bm9kZSkge1xuICAgICAgICB2bS4kdm5vZGUucGFyZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbW91bnRDb21wb25lbnQgKFxuICAgIHZtLFxuICAgIGVsLFxuICAgIGh5ZHJhdGluZ1xuICApIHtcbiAgICB2bS4kZWwgPSBlbDtcbiAgICBpZiAoIXZtLiRvcHRpb25zLnJlbmRlcikge1xuICAgICAgdm0uJG9wdGlvbnMucmVuZGVyID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgICAgIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICgodm0uJG9wdGlvbnMudGVtcGxhdGUgJiYgdm0uJG9wdGlvbnMudGVtcGxhdGUuY2hhckF0KDApICE9PSAnIycpIHx8XG4gICAgICAgICAgdm0uJG9wdGlvbnMuZWwgfHwgZWwpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICAgJ2NvbXBpbGVyIGlzIG5vdCBhdmFpbGFibGUuIEVpdGhlciBwcmUtY29tcGlsZSB0aGUgdGVtcGxhdGVzIGludG8gJyArXG4gICAgICAgICAgICAncmVuZGVyIGZ1bmN0aW9ucywgb3IgdXNlIHRoZSBjb21waWxlci1pbmNsdWRlZCBidWlsZC4nLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAnRmFpbGVkIHRvIG1vdW50IGNvbXBvbmVudDogdGVtcGxhdGUgb3IgcmVuZGVyIGZ1bmN0aW9uIG5vdCBkZWZpbmVkLicsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdiZWZvcmVNb3VudCcpO1xuXG4gICAgdmFyIHVwZGF0ZUNvbXBvbmVudDtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5hbWUgPSB2bS5fbmFtZTtcbiAgICAgICAgdmFyIGlkID0gdm0uX3VpZDtcbiAgICAgICAgdmFyIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArIGlkO1xuICAgICAgICB2YXIgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIgKyBpZDtcblxuICAgICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgICAgdmFyIHZub2RlID0gdm0uX3JlbmRlcigpO1xuICAgICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHJlbmRlclwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG5cbiAgICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgICAgIHZtLl91cGRhdGUodm5vZGUsIGh5ZHJhdGluZyk7XG4gICAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyBuYW1lICsgXCIgcGF0Y2hcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2bS5fdXBkYXRlKHZtLl9yZW5kZXIoKSwgaHlkcmF0aW5nKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gd2Ugc2V0IHRoaXMgdG8gdm0uX3dhdGNoZXIgaW5zaWRlIHRoZSB3YXRjaGVyJ3MgY29uc3RydWN0b3JcbiAgICAvLyBzaW5jZSB0aGUgd2F0Y2hlcidzIGluaXRpYWwgcGF0Y2ggbWF5IGNhbGwgJGZvcmNlVXBkYXRlIChlLmcuIGluc2lkZSBjaGlsZFxuICAgIC8vIGNvbXBvbmVudCdzIG1vdW50ZWQgaG9vayksIHdoaWNoIHJlbGllcyBvbiB2bS5fd2F0Y2hlciBiZWluZyBhbHJlYWR5IGRlZmluZWRcbiAgICBuZXcgV2F0Y2hlcih2bSwgdXBkYXRlQ29tcG9uZW50LCBub29wLCB7XG4gICAgICBiZWZvcmU6IGZ1bmN0aW9uIGJlZm9yZSAoKSB7XG4gICAgICAgIGlmICh2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZVVwZGF0ZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgdHJ1ZSAvKiBpc1JlbmRlcldhdGNoZXIgKi8pO1xuICAgIGh5ZHJhdGluZyA9IGZhbHNlO1xuXG4gICAgLy8gbWFudWFsbHkgbW91bnRlZCBpbnN0YW5jZSwgY2FsbCBtb3VudGVkIG9uIHNlbGZcbiAgICAvLyBtb3VudGVkIGlzIGNhbGxlZCBmb3IgcmVuZGVyLWNyZWF0ZWQgY2hpbGQgY29tcG9uZW50cyBpbiBpdHMgaW5zZXJ0ZWQgaG9va1xuICAgIGlmICh2bS4kdm5vZGUgPT0gbnVsbCkge1xuICAgICAgdm0uX2lzTW91bnRlZCA9IHRydWU7XG4gICAgICBjYWxsSG9vayh2bSwgJ21vdW50ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDaGlsZENvbXBvbmVudCAoXG4gICAgdm0sXG4gICAgcHJvcHNEYXRhLFxuICAgIGxpc3RlbmVycyxcbiAgICBwYXJlbnRWbm9kZSxcbiAgICByZW5kZXJDaGlsZHJlblxuICApIHtcbiAgICB7XG4gICAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGRldGVybWluZSB3aGV0aGVyIGNvbXBvbmVudCBoYXMgc2xvdCBjaGlsZHJlblxuICAgIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgb3ZlcndyaXRpbmcgJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLlxuXG4gICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGR5bmFtaWMgc2NvcGVkU2xvdHMgKGhhbmQtd3JpdHRlbiBvciBjb21waWxlZCBidXQgd2l0aFxuICAgIC8vIGR5bmFtaWMgc2xvdCBuYW1lcykuIFN0YXRpYyBzY29wZWQgc2xvdHMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZSBoYXMgdGhlXG4gICAgLy8gXCIkc3RhYmxlXCIgbWFya2VyLlxuICAgIHZhciBuZXdTY29wZWRTbG90cyA9IHBhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHM7XG4gICAgdmFyIG9sZFNjb3BlZFNsb3RzID0gdm0uJHNjb3BlZFNsb3RzO1xuICAgIHZhciBoYXNEeW5hbWljU2NvcGVkU2xvdCA9ICEhKFxuICAgICAgKG5ld1Njb3BlZFNsb3RzICYmICFuZXdTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgICAgKG9sZFNjb3BlZFNsb3RzICE9PSBlbXB0eU9iamVjdCAmJiAhb2xkU2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAgIChuZXdTY29wZWRTbG90cyAmJiB2bS4kc2NvcGVkU2xvdHMuJGtleSAhPT0gbmV3U2NvcGVkU2xvdHMuJGtleSlcbiAgICApO1xuXG4gICAgLy8gQW55IHN0YXRpYyBzbG90IGNoaWxkcmVuIGZyb20gdGhlIHBhcmVudCBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyBwYXJlbnQnc1xuICAgIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAgIC8vIHVwZGF0ZSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLlxuICAgIHZhciBuZWVkc0ZvcmNlVXBkYXRlID0gISEoXG4gICAgICByZW5kZXJDaGlsZHJlbiB8fCAgICAgICAgICAgICAgIC8vIGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gfHwgIC8vIGhhcyBvbGQgc3RhdGljIHNsb3RzXG4gICAgICBoYXNEeW5hbWljU2NvcGVkU2xvdFxuICAgICk7XG5cbiAgICB2bS4kb3B0aW9ucy5fcGFyZW50Vm5vZGUgPSBwYXJlbnRWbm9kZTtcbiAgICB2bS4kdm5vZGUgPSBwYXJlbnRWbm9kZTsgLy8gdXBkYXRlIHZtJ3MgcGxhY2Vob2xkZXIgbm9kZSB3aXRob3V0IHJlLXJlbmRlclxuXG4gICAgaWYgKHZtLl92bm9kZSkgeyAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgICAgdm0uX3Zub2RlLnBhcmVudCA9IHBhcmVudFZub2RlO1xuICAgIH1cbiAgICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gPSByZW5kZXJDaGlsZHJlbjtcblxuICAgIC8vIHVwZGF0ZSAkYXR0cnMgYW5kICRsaXN0ZW5lcnMgaGFzaFxuICAgIC8vIHRoZXNlIGFyZSBhbHNvIHJlYWN0aXZlIHNvIHRoZXkgbWF5IHRyaWdnZXIgY2hpbGQgdXBkYXRlIGlmIHRoZSBjaGlsZFxuICAgIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gICAgdm0uJGF0dHJzID0gcGFyZW50Vm5vZGUuZGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdDtcbiAgICB2bS4kbGlzdGVuZXJzID0gbGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0O1xuXG4gICAgLy8gdXBkYXRlIHByb3BzXG4gICAgaWYgKHByb3BzRGF0YSAmJiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICAgIHZhciBwcm9wS2V5cyA9IHZtLiRvcHRpb25zLl9wcm9wS2V5cyB8fCBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IHByb3BLZXlzW2ldO1xuICAgICAgICB2YXIgcHJvcE9wdGlvbnMgPSB2bS4kb3B0aW9ucy5wcm9wczsgLy8gd3RmIGZsb3c/XG4gICAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgICB9XG4gICAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gICAgICAvLyBrZWVwIGEgY29weSBvZiByYXcgcHJvcHNEYXRhXG4gICAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGxpc3RlbmVyc1xuICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgICB2YXIgb2xkTGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgICB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpO1xuXG4gICAgLy8gcmVzb2x2ZSBzbG90cyArIGZvcmNlIHVwZGF0ZSBpZiBoYXMgY2hpbGRyZW5cbiAgICBpZiAobmVlZHNGb3JjZVVwZGF0ZSkge1xuICAgICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICAgIHZtLiRmb3JjZVVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzSW5JbmFjdGl2ZVRyZWUgKHZtKSB7XG4gICAgd2hpbGUgKHZtICYmICh2bSA9IHZtLiRwYXJlbnQpKSB7XG4gICAgICBpZiAodm0uX2luYWN0aXZlKSB7IHJldHVybiB0cnVlIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50ICh2bSwgZGlyZWN0KSB7XG4gICAgaWYgKGRpcmVjdCkge1xuICAgICAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gICAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2bS5fZGlyZWN0SW5hY3RpdmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAodm0uX2luYWN0aXZlIHx8IHZtLl9pbmFjdGl2ZSA9PT0gbnVsbCkge1xuICAgICAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZtLiRjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XG4gICAgICB9XG4gICAgICBjYWxsSG9vayh2bSwgJ2FjdGl2YXRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCAodm0sIGRpcmVjdCkge1xuICAgIGlmIChkaXJlY3QpIHtcbiAgICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdm0uX2luYWN0aXZlKSB7XG4gICAgICB2bS5faW5hY3RpdmUgPSB0cnVlO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XG4gICAgICB9XG4gICAgICBjYWxsSG9vayh2bSwgJ2RlYWN0aXZhdGVkJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2FsbEhvb2sgKHZtLCBob29rKSB7XG4gICAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGxpZmVjeWNsZSBob29rc1xuICAgIHB1c2hUYXJnZXQoKTtcbiAgICB2YXIgaGFuZGxlcnMgPSB2bS4kb3B0aW9uc1tob29rXTtcbiAgICB2YXIgaW5mbyA9IGhvb2sgKyBcIiBob29rXCI7XG4gICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhoYW5kbGVyc1tpXSwgdm0sIG51bGwsIHZtLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZtLl9oYXNIb29rRXZlbnQpIHtcbiAgICAgIHZtLiRlbWl0KCdob29rOicgKyBob29rKTtcbiAgICB9XG4gICAgcG9wVGFyZ2V0KCk7XG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgTUFYX1VQREFURV9DT1VOVCA9IDEwMDtcblxuICB2YXIgcXVldWUgPSBbXTtcbiAgdmFyIGFjdGl2YXRlZENoaWxkcmVuID0gW107XG4gIHZhciBoYXMgPSB7fTtcbiAgdmFyIGNpcmN1bGFyID0ge307XG4gIHZhciB3YWl0aW5nID0gZmFsc2U7XG4gIHZhciBmbHVzaGluZyA9IGZhbHNlO1xuICB2YXIgaW5kZXggPSAwO1xuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgc2NoZWR1bGVyJ3Mgc3RhdGUuXG4gICAqL1xuICBmdW5jdGlvbiByZXNldFNjaGVkdWxlclN0YXRlICgpIHtcbiAgICBpbmRleCA9IHF1ZXVlLmxlbmd0aCA9IGFjdGl2YXRlZENoaWxkcmVuLmxlbmd0aCA9IDA7XG4gICAgaGFzID0ge307XG4gICAge1xuICAgICAgY2lyY3VsYXIgPSB7fTtcbiAgICB9XG4gICAgd2FpdGluZyA9IGZsdXNoaW5nID0gZmFsc2U7XG4gIH1cblxuICAvLyBBc3luYyBlZGdlIGNhc2UgIzY1NjYgcmVxdWlyZXMgc2F2aW5nIHRoZSB0aW1lc3RhbXAgd2hlbiBldmVudCBsaXN0ZW5lcnMgYXJlXG4gIC8vIGF0dGFjaGVkLiBIb3dldmVyLCBjYWxsaW5nIHBlcmZvcm1hbmNlLm5vdygpIGhhcyBhIHBlcmYgb3ZlcmhlYWQgZXNwZWNpYWxseVxuICAvLyBpZiB0aGUgcGFnZSBoYXMgdGhvdXNhbmRzIG9mIGV2ZW50IGxpc3RlbmVycy4gSW5zdGVhZCwgd2UgdGFrZSBhIHRpbWVzdGFtcFxuICAvLyBldmVyeSB0aW1lIHRoZSBzY2hlZHVsZXIgZmx1c2hlcyBhbmQgdXNlIHRoYXQgZm9yIGFsbCBldmVudCBsaXN0ZW5lcnNcbiAgLy8gYXR0YWNoZWQgZHVyaW5nIHRoYXQgZmx1c2guXG4gIHZhciBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSAwO1xuXG4gIC8vIEFzeW5jIGVkZ2UgY2FzZSBmaXggcmVxdWlyZXMgc3RvcmluZyBhbiBldmVudCBsaXN0ZW5lcidzIGF0dGFjaCB0aW1lc3RhbXAuXG4gIHZhciBnZXROb3cgPSBEYXRlLm5vdztcblxuICAvLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxuICAvLyB0aW1lc3RhbXAgY2FuIGVpdGhlciBiZSBoaS1yZXMgKHJlbGF0aXZlIHRvIHBhZ2UgbG9hZCkgb3IgbG93LXJlc1xuICAvLyAocmVsYXRpdmUgdG8gVU5JWCBlcG9jaCksIHNvIGluIG9yZGVyIHRvIGNvbXBhcmUgdGltZSB3ZSBoYXZlIHRvIHVzZSB0aGVcbiAgLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxuICAvLyBBbGwgSUUgdmVyc2lvbnMgdXNlIGxvdy1yZXMgZXZlbnQgdGltZXN0YW1wcywgYW5kIGhhdmUgcHJvYmxlbWF0aWMgY2xvY2tcbiAgLy8gaW1wbGVtZW50YXRpb25zICgjOTYzMilcbiAgaWYgKGluQnJvd3NlciAmJiAhaXNJRSkge1xuICAgIHZhciBwZXJmb3JtYW5jZSA9IHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgICBpZiAoXG4gICAgICBwZXJmb3JtYW5jZSAmJlxuICAgICAgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgZ2V0Tm93KCkgPiBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKS50aW1lU3RhbXBcbiAgICApIHtcbiAgICAgIC8vIGlmIHRoZSBldmVudCB0aW1lc3RhbXAsIGFsdGhvdWdoIGV2YWx1YXRlZCBBRlRFUiB0aGUgRGF0ZS5ub3coKSwgaXNcbiAgICAgIC8vIHNtYWxsZXIgdGhhbiBpdCwgaXQgbWVhbnMgdGhlIGV2ZW50IGlzIHVzaW5nIGEgaGktcmVzIHRpbWVzdGFtcCxcbiAgICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgaGktcmVzIHZlcnNpb24gZm9yIGV2ZW50IGxpc3RlbmVyIHRpbWVzdGFtcHMgYXNcbiAgICAgIC8vIHdlbGwuXG4gICAgICBnZXROb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTsgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggYm90aCBxdWV1ZXMgYW5kIHJ1biB0aGUgd2F0Y2hlcnMuXG4gICAqL1xuICBmdW5jdGlvbiBmbHVzaFNjaGVkdWxlclF1ZXVlICgpIHtcbiAgICBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSBnZXROb3coKTtcbiAgICBmbHVzaGluZyA9IHRydWU7XG4gICAgdmFyIHdhdGNoZXIsIGlkO1xuXG4gICAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQ6XG4gICAgLy8gMS4gQ29tcG9uZW50cyBhcmUgdXBkYXRlZCBmcm9tIHBhcmVudCB0byBjaGlsZC4gKGJlY2F1c2UgcGFyZW50IGlzIGFsd2F5c1xuICAgIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcbiAgICAvLyAyLiBBIGNvbXBvbmVudCdzIHVzZXIgd2F0Y2hlcnMgYXJlIHJ1biBiZWZvcmUgaXRzIHJlbmRlciB3YXRjaGVyIChiZWNhdXNlXG4gICAgLy8gICAgdXNlciB3YXRjaGVycyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIHJlbmRlciB3YXRjaGVyKVxuICAgIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29tcG9uZW50J3Mgd2F0Y2hlciBydW4sXG4gICAgLy8gICAgaXRzIHdhdGNoZXJzIGNhbiBiZSBza2lwcGVkLlxuICAgIHF1ZXVlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcblxuICAgIC8vIGRvIG5vdCBjYWNoZSBsZW5ndGggYmVjYXVzZSBtb3JlIHdhdGNoZXJzIG1pZ2h0IGJlIHB1c2hlZFxuICAgIC8vIGFzIHdlIHJ1biBleGlzdGluZyB3YXRjaGVyc1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHF1ZXVlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgd2F0Y2hlciA9IHF1ZXVlW2luZGV4XTtcbiAgICAgIGlmICh3YXRjaGVyLmJlZm9yZSkge1xuICAgICAgICB3YXRjaGVyLmJlZm9yZSgpO1xuICAgICAgfVxuICAgICAgaWQgPSB3YXRjaGVyLmlkO1xuICAgICAgaGFzW2lkXSA9IG51bGw7XG4gICAgICB3YXRjaGVyLnJ1bigpO1xuICAgICAgLy8gaW4gZGV2IGJ1aWxkLCBjaGVjayBhbmQgc3RvcCBjaXJjdWxhciB1cGRhdGVzLlxuICAgICAgaWYgKGhhc1tpZF0gIT0gbnVsbCkge1xuICAgICAgICBjaXJjdWxhcltpZF0gPSAoY2lyY3VsYXJbaWRdIHx8IDApICsgMTtcbiAgICAgICAgaWYgKGNpcmN1bGFyW2lkXSA+IE1BWF9VUERBVEVfQ09VTlQpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcCAnICsgKFxuICAgICAgICAgICAgICB3YXRjaGVyLnVzZXJcbiAgICAgICAgICAgICAgICA/IChcImluIHdhdGNoZXIgd2l0aCBleHByZXNzaW9uIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpXG4gICAgICAgICAgICAgICAgOiBcImluIGEgY29tcG9uZW50IHJlbmRlciBmdW5jdGlvbi5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdhdGNoZXIudm1cbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBrZWVwIGNvcGllcyBvZiBwb3N0IHF1ZXVlcyBiZWZvcmUgcmVzZXR0aW5nIHN0YXRlXG4gICAgdmFyIGFjdGl2YXRlZFF1ZXVlID0gYWN0aXZhdGVkQ2hpbGRyZW4uc2xpY2UoKTtcbiAgICB2YXIgdXBkYXRlZFF1ZXVlID0gcXVldWUuc2xpY2UoKTtcblxuICAgIHJlc2V0U2NoZWR1bGVyU3RhdGUoKTtcblxuICAgIC8vIGNhbGwgY29tcG9uZW50IHVwZGF0ZWQgYW5kIGFjdGl2YXRlZCBob29rc1xuICAgIGNhbGxBY3RpdmF0ZWRIb29rcyhhY3RpdmF0ZWRRdWV1ZSk7XG4gICAgY2FsbFVwZGF0ZWRIb29rcyh1cGRhdGVkUXVldWUpO1xuXG4gICAgLy8gZGV2dG9vbCBob29rXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGRldnRvb2xzICYmIGNvbmZpZy5kZXZ0b29scykge1xuICAgICAgZGV2dG9vbHMuZW1pdCgnZmx1c2gnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjYWxsVXBkYXRlZEhvb2tzIChxdWV1ZSkge1xuICAgIHZhciBpID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHZhciB3YXRjaGVyID0gcXVldWVbaV07XG4gICAgICB2YXIgdm0gPSB3YXRjaGVyLnZtO1xuICAgICAgaWYgKHZtLl93YXRjaGVyID09PSB3YXRjaGVyICYmIHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICBjYWxsSG9vayh2bSwgJ3VwZGF0ZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUXVldWUgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCB0aGF0IHdhcyBhY3RpdmF0ZWQgZHVyaW5nIHBhdGNoLlxuICAgKiBUaGUgcXVldWUgd2lsbCBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIGVudGlyZSB0cmVlIGhhcyBiZWVuIHBhdGNoZWQuXG4gICAqL1xuICBmdW5jdGlvbiBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudCAodm0pIHtcbiAgICAvLyBzZXR0aW5nIF9pbmFjdGl2ZSB0byBmYWxzZSBoZXJlIHNvIHRoYXQgYSByZW5kZXIgZnVuY3Rpb24gY2FuXG4gICAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgaW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICBhY3RpdmF0ZWRDaGlsZHJlbi5wdXNoKHZtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGxBY3RpdmF0ZWRIb29rcyAocXVldWUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChxdWV1ZVtpXSwgdHJ1ZSAvKiB0cnVlICovKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVzaCBhIHdhdGNoZXIgaW50byB0aGUgd2F0Y2hlciBxdWV1ZS5cbiAgICogSm9icyB3aXRoIGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXG4gICAqIHB1c2hlZCB3aGVuIHRoZSBxdWV1ZSBpcyBiZWluZyBmbHVzaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gcXVldWVXYXRjaGVyICh3YXRjaGVyKSB7XG4gICAgdmFyIGlkID0gd2F0Y2hlci5pZDtcbiAgICBpZiAoaGFzW2lkXSA9PSBudWxsKSB7XG4gICAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICAgIGlmICghZmx1c2hpbmcpIHtcbiAgICAgICAgcXVldWUucHVzaCh3YXRjaGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIGFscmVhZHkgZmx1c2hpbmcsIHNwbGljZSB0aGUgd2F0Y2hlciBiYXNlZCBvbiBpdHMgaWRcbiAgICAgICAgLy8gaWYgYWxyZWFkeSBwYXN0IGl0cyBpZCwgaXQgd2lsbCBiZSBydW4gbmV4dCBpbW1lZGlhdGVseS5cbiAgICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoaSA+IGluZGV4ICYmIHF1ZXVlW2ldLmlkID4gd2F0Y2hlci5pZCkge1xuICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgICBxdWV1ZS5zcGxpY2UoaSArIDEsIDAsIHdhdGNoZXIpO1xuICAgICAgfVxuICAgICAgLy8gcXVldWUgdGhlIGZsdXNoXG4gICAgICBpZiAoIXdhaXRpbmcpIHtcbiAgICAgICAgd2FpdGluZyA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFjb25maWcuYXN5bmMpIHtcbiAgICAgICAgICBmbHVzaFNjaGVkdWxlclF1ZXVlKCk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgbmV4dFRpY2soZmx1c2hTY2hlZHVsZXJRdWV1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cblxuXG4gIHZhciB1aWQkMiA9IDA7XG5cbiAgLyoqXG4gICAqIEEgd2F0Y2hlciBwYXJzZXMgYW4gZXhwcmVzc2lvbiwgY29sbGVjdHMgZGVwZW5kZW5jaWVzLFxuICAgKiBhbmQgZmlyZXMgY2FsbGJhY2sgd2hlbiB0aGUgZXhwcmVzc2lvbiB2YWx1ZSBjaGFuZ2VzLlxuICAgKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAgICovXG4gIHZhciBXYXRjaGVyID0gZnVuY3Rpb24gV2F0Y2hlciAoXG4gICAgdm0sXG4gICAgZXhwT3JGbixcbiAgICBjYixcbiAgICBvcHRpb25zLFxuICAgIGlzUmVuZGVyV2F0Y2hlclxuICApIHtcbiAgICB0aGlzLnZtID0gdm07XG4gICAgaWYgKGlzUmVuZGVyV2F0Y2hlcikge1xuICAgICAgdm0uX3dhdGNoZXIgPSB0aGlzO1xuICAgIH1cbiAgICB2bS5fd2F0Y2hlcnMucHVzaCh0aGlzKTtcbiAgICAvLyBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZGVlcCA9ICEhb3B0aW9ucy5kZWVwO1xuICAgICAgdGhpcy51c2VyID0gISFvcHRpb25zLnVzZXI7XG4gICAgICB0aGlzLmxhenkgPSAhIW9wdGlvbnMubGF6eTtcbiAgICAgIHRoaXMuc3luYyA9ICEhb3B0aW9ucy5zeW5jO1xuICAgICAgdGhpcy5iZWZvcmUgPSBvcHRpb25zLmJlZm9yZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWVwID0gdGhpcy51c2VyID0gdGhpcy5sYXp5ID0gdGhpcy5zeW5jID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2IgPSBjYjtcbiAgICB0aGlzLmlkID0gKyt1aWQkMjsgLy8gdWlkIGZvciBiYXRjaGluZ1xuICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICAgIHRoaXMuZGVwcyA9IFtdO1xuICAgIHRoaXMubmV3RGVwcyA9IFtdO1xuICAgIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgICB0aGlzLm5ld0RlcElkcyA9IG5ldyBfU2V0KCk7XG4gICAgdGhpcy5leHByZXNzaW9uID0gZXhwT3JGbi50b1N0cmluZygpO1xuICAgIC8vIHBhcnNlIGV4cHJlc3Npb24gZm9yIGdldHRlclxuICAgIGlmICh0eXBlb2YgZXhwT3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5nZXR0ZXIgPSBleHBPckZuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldHRlciA9IHBhcnNlUGF0aChleHBPckZuKTtcbiAgICAgIGlmICghdGhpcy5nZXR0ZXIpIHtcbiAgICAgICAgdGhpcy5nZXR0ZXIgPSBub29wO1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIFwiRmFpbGVkIHdhdGNoaW5nIHBhdGg6IFxcXCJcIiArIGV4cE9yRm4gKyBcIlxcXCIgXCIgK1xuICAgICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXG4gICAgICAgICAgJ0ZvciBmdWxsIGNvbnRyb2wsIHVzZSBhIGZ1bmN0aW9uIGluc3RlYWQuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gdGhpcy5sYXp5XG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiB0aGlzLmdldCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZSB0aGUgZ2V0dGVyLCBhbmQgcmUtY29sbGVjdCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBXYXRjaGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKCkge1xuICAgIHB1c2hUYXJnZXQodGhpcyk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhciB2bSA9IHRoaXMudm07XG4gICAgdHJ5IHtcbiAgICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImdldHRlciBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFwidG91Y2hcIiBldmVyeSBwcm9wZXJ0eSBzbyB0aGV5IGFyZSBhbGwgdHJhY2tlZCBhc1xuICAgICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgICBpZiAodGhpcy5kZWVwKSB7XG4gICAgICAgIHRyYXZlcnNlKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHBvcFRhcmdldCgpO1xuICAgICAgdGhpcy5jbGVhbnVwRGVwcygpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGEgZGVwZW5kZW5jeSB0byB0aGlzIGRpcmVjdGl2ZS5cbiAgICovXG4gIFdhdGNoZXIucHJvdG90eXBlLmFkZERlcCA9IGZ1bmN0aW9uIGFkZERlcCAoZGVwKSB7XG4gICAgdmFyIGlkID0gZGVwLmlkO1xuICAgIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICAgIHRoaXMubmV3RGVwcy5wdXNoKGRlcCk7XG4gICAgICBpZiAoIXRoaXMuZGVwSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgZGVwLmFkZFN1Yih0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENsZWFuIHVwIGZvciBkZXBlbmRlbmN5IGNvbGxlY3Rpb24uXG4gICAqL1xuICBXYXRjaGVyLnByb3RvdHlwZS5jbGVhbnVwRGVwcyA9IGZ1bmN0aW9uIGNsZWFudXBEZXBzICgpIHtcbiAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdmFyIGRlcCA9IHRoaXMuZGVwc1tpXTtcbiAgICAgIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGRlcC5pZCkpIHtcbiAgICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHRtcCA9IHRoaXMuZGVwSWRzO1xuICAgIHRoaXMuZGVwSWRzID0gdGhpcy5uZXdEZXBJZHM7XG4gICAgdGhpcy5uZXdEZXBJZHMgPSB0bXA7XG4gICAgdGhpcy5uZXdEZXBJZHMuY2xlYXIoKTtcbiAgICB0bXAgPSB0aGlzLmRlcHM7XG4gICAgdGhpcy5kZXBzID0gdGhpcy5uZXdEZXBzO1xuICAgIHRoaXMubmV3RGVwcyA9IHRtcDtcbiAgICB0aGlzLm5ld0RlcHMubGVuZ3RoID0gMDtcbiAgfTtcblxuICAvKipcbiAgICogU3Vic2NyaWJlciBpbnRlcmZhY2UuXG4gICAqIFdpbGwgYmUgY2FsbGVkIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXMuXG4gICAqL1xuICBXYXRjaGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMubGF6eSkge1xuICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN5bmMpIHtcbiAgICAgIHRoaXMucnVuKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXVlV2F0Y2hlcih0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICAgKiBXaWxsIGJlIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyLlxuICAgKi9cbiAgV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gcnVuICgpIHtcbiAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gICAgICBpZiAoXG4gICAgICAgIHZhbHVlICE9PSB0aGlzLnZhbHVlIHx8XG4gICAgICAgIC8vIERlZXAgd2F0Y2hlcnMgYW5kIHdhdGNoZXJzIG9uIE9iamVjdC9BcnJheXMgc2hvdWxkIGZpcmUgZXZlblxuICAgICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAgIC8vIGhhdmUgbXV0YXRlZC5cbiAgICAgICAgaXNPYmplY3QodmFsdWUpIHx8XG4gICAgICAgIHRoaXMuZGVlcFxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBuZXcgdmFsdWVcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY2IuY2FsbCh0aGlzLnZtLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHRoaXMudm0sIChcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlci5cbiAgICogVGhpcyBvbmx5IGdldHMgY2FsbGVkIGZvciBsYXp5IHdhdGNoZXJzLlxuICAgKi9cbiAgV2F0Y2hlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZSAoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBEZXBlbmQgb24gYWxsIGRlcHMgY29sbGVjdGVkIGJ5IHRoaXMgd2F0Y2hlci5cbiAgICovXG4gIFdhdGNoZXIucHJvdG90eXBlLmRlcGVuZCA9IGZ1bmN0aW9uIGRlcGVuZCAoKSB7XG4gICAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMuZGVwc1tpXS5kZXBlbmQoKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBzZWxmIGZyb20gYWxsIGRlcGVuZGVuY2llcycgc3Vic2NyaWJlciBsaXN0LlxuICAgKi9cbiAgV2F0Y2hlci5wcm90b3R5cGUudGVhcmRvd24gPSBmdW5jdGlvbiB0ZWFyZG93biAoKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHZtJ3Mgd2F0Y2hlciBsaXN0XG4gICAgICAvLyB0aGlzIGlzIGEgc29tZXdoYXQgZXhwZW5zaXZlIG9wZXJhdGlvbiBzbyB3ZSBza2lwIGl0XG4gICAgICAvLyBpZiB0aGUgdm0gaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAgaWYgKCF0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICAgIHJlbW92ZSh0aGlzLnZtLl93YXRjaGVycywgdGhpcyk7XG4gICAgICB9XG4gICAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIHRoaXMuZGVwc1tpXS5yZW1vdmVTdWIodGhpcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICAvKiAgKi9cblxuICB2YXIgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogbm9vcCxcbiAgICBzZXQ6IG5vb3BcbiAgfTtcblxuICBmdW5jdGlvbiBwcm94eSAodGFyZ2V0LCBzb3VyY2VLZXksIGtleSkge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBmdW5jdGlvbiBwcm94eUdldHRlciAoKSB7XG4gICAgICByZXR1cm4gdGhpc1tzb3VyY2VLZXldW2tleV1cbiAgICB9O1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlciAodmFsKSB7XG4gICAgICB0aGlzW3NvdXJjZUtleV1ba2V5XSA9IHZhbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRTdGF0ZSAodm0pIHtcbiAgICB2bS5fd2F0Y2hlcnMgPSBbXTtcbiAgICB2YXIgb3B0cyA9IHZtLiRvcHRpb25zO1xuICAgIGlmIChvcHRzLnByb3BzKSB7IGluaXRQcm9wcyh2bSwgb3B0cy5wcm9wcyk7IH1cbiAgICBpZiAob3B0cy5tZXRob2RzKSB7IGluaXRNZXRob2RzKHZtLCBvcHRzLm1ldGhvZHMpOyB9XG4gICAgaWYgKG9wdHMuZGF0YSkge1xuICAgICAgaW5pdERhdGEodm0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYnNlcnZlKHZtLl9kYXRhID0ge30sIHRydWUgLyogYXNSb290RGF0YSAqLyk7XG4gICAgfVxuICAgIGlmIChvcHRzLmNvbXB1dGVkKSB7IGluaXRDb21wdXRlZCh2bSwgb3B0cy5jb21wdXRlZCk7IH1cbiAgICBpZiAob3B0cy53YXRjaCAmJiBvcHRzLndhdGNoICE9PSBuYXRpdmVXYXRjaCkge1xuICAgICAgaW5pdFdhdGNoKHZtLCBvcHRzLndhdGNoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0UHJvcHMgKHZtLCBwcm9wc09wdGlvbnMpIHtcbiAgICB2YXIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcyA9IHt9O1xuICAgIC8vIGNhY2hlIHByb3Aga2V5cyBzbyB0aGF0IGZ1dHVyZSBwcm9wcyB1cGRhdGVzIGNhbiBpdGVyYXRlIHVzaW5nIEFycmF5XG4gICAgLy8gaW5zdGVhZCBvZiBkeW5hbWljIG9iamVjdCBrZXkgZW51bWVyYXRpb24uXG4gICAgdmFyIGtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgPSBbXTtcbiAgICB2YXIgaXNSb290ID0gIXZtLiRwYXJlbnQ7XG4gICAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gICAgaWYgKCFpc1Jvb3QpIHtcbiAgICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgfVxuICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBrZXkgKSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BzT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAge1xuICAgICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICBpZiAoaXNSZXNlcnZlZEF0dHJpYnV0ZShoeXBoZW5hdGVkS2V5KSB8fFxuICAgICAgICAgICAgY29uZmlnLmlzUmVzZXJ2ZWRBdHRyKGh5cGhlbmF0ZWRLZXkpKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIChcIlxcXCJcIiArIGh5cGhlbmF0ZWRLZXkgKyBcIlxcXCIgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIGNvbXBvbmVudCBwcm9wLlwiKSxcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBkZWZpbmVSZWFjdGl2ZSQkMShwcm9wcywga2V5LCB2YWx1ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaXNSb290ICYmICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYSBwcm9wIGRpcmVjdGx5IHNpbmNlIHRoZSB2YWx1ZSB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgICAgXCJvdmVyd3JpdHRlbiB3aGVuZXZlciB0aGUgcGFyZW50IGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICAgIFwiSW5zdGVhZCwgdXNlIGEgZGF0YSBvciBjb21wdXRlZCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgcHJvcCdzIFwiICtcbiAgICAgICAgICAgICAgXCJ2YWx1ZS4gUHJvcCBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgICAgdm1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIHN0YXRpYyBwcm9wcyBhcmUgYWxyZWFkeSBwcm94aWVkIG9uIHRoZSBjb21wb25lbnQncyBwcm90b3R5cGVcbiAgICAgIC8vIGR1cmluZyBWdWUuZXh0ZW5kKCkuIFdlIG9ubHkgbmVlZCB0byBwcm94eSBwcm9wcyBkZWZpbmVkIGF0XG4gICAgICAvLyBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSBsb29wKCBrZXkgKTtcbiAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0RGF0YSAodm0pIHtcbiAgICB2YXIgZGF0YSA9IHZtLiRvcHRpb25zLmRhdGE7XG4gICAgZGF0YSA9IHZtLl9kYXRhID0gdHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbidcbiAgICAgID8gZ2V0RGF0YShkYXRhLCB2bSlcbiAgICAgIDogZGF0YSB8fCB7fTtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSB7fTtcbiAgICAgIHdhcm4oXG4gICAgICAgICdkYXRhIGZ1bmN0aW9ucyBzaG91bGQgcmV0dXJuIGFuIG9iamVjdDpcXG4nICtcbiAgICAgICAgJ2h0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL2NvbXBvbmVudHMuaHRtbCNkYXRhLU11c3QtQmUtYS1GdW5jdGlvbicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gICAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHtcbiAgICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgKFwiTWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBkYXRhIHByb3BlcnR5LlwiKSxcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzICYmIGhhc093bihwcm9wcywga2V5KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIFwiVGhlIGRhdGEgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVjbGFyZWQgYXMgYSBwcm9wLiBcIiArXG4gICAgICAgICAgXCJVc2UgcHJvcCBkZWZhdWx0IHZhbHVlIGluc3RlYWQuXCIsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgICBwcm94eSh2bSwgXCJfZGF0YVwiLCBrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBvYnNlcnZlIGRhdGFcbiAgICBvYnNlcnZlKGRhdGEsIHRydWUgLyogYXNSb290RGF0YSAqLyk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXREYXRhIChkYXRhLCB2bSkge1xuICAgIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBkYXRhIGdldHRlcnNcbiAgICBwdXNoVGFyZ2V0KCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBkYXRhLmNhbGwodm0sIHZtKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcImRhdGEoKVwiKTtcbiAgICAgIHJldHVybiB7fVxuICAgIH0gZmluYWxseSB7XG4gICAgICBwb3BUYXJnZXQoKTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyA9IHsgbGF6eTogdHJ1ZSB9O1xuXG4gIGZ1bmN0aW9uIGluaXRDb21wdXRlZCAodm0sIGNvbXB1dGVkKSB7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdmFyIHdhdGNoZXJzID0gdm0uX2NvbXB1dGVkV2F0Y2hlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIC8vIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGp1c3QgZ2V0dGVycyBkdXJpbmcgU1NSXG4gICAgdmFyIGlzU1NSID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcblxuICAgIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgICAgdmFyIHVzZXJEZWYgPSBjb21wdXRlZFtrZXldO1xuICAgICAgdmFyIGdldHRlciA9IHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nID8gdXNlckRlZiA6IHVzZXJEZWYuZ2V0O1xuICAgICAgaWYgKGdldHRlciA9PSBudWxsKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiR2V0dGVyIGlzIG1pc3NpbmcgZm9yIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIi5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1NTUikge1xuICAgICAgICAvLyBjcmVhdGUgaW50ZXJuYWwgd2F0Y2hlciBmb3IgdGhlIGNvbXB1dGVkIHByb3BlcnR5LlxuICAgICAgICB3YXRjaGVyc1trZXldID0gbmV3IFdhdGNoZXIoXG4gICAgICAgICAgdm0sXG4gICAgICAgICAgZ2V0dGVyIHx8IG5vb3AsXG4gICAgICAgICAgbm9vcCxcbiAgICAgICAgICBjb21wdXRlZFdhdGNoZXJPcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbXBvbmVudC1kZWZpbmVkIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGVcbiAgICAgIC8vIGNvbXBvbmVudCBwcm90b3R5cGUuIFdlIG9ubHkgbmVlZCB0byBkZWZpbmUgY29tcHV0ZWQgcHJvcGVydGllcyBkZWZpbmVkXG4gICAgICAvLyBhdCBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICAgIGRlZmluZUNvbXB1dGVkKHZtLCBrZXksIHVzZXJEZWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleSBpbiB2bS4kZGF0YSkge1xuICAgICAgICAgIHdhcm4oKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZGF0YS5cIiksIHZtKTtcbiAgICAgICAgfSBlbHNlIGlmICh2bS4kb3B0aW9ucy5wcm9wcyAmJiBrZXkgaW4gdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgICB3YXJuKChcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgcHJvcC5cIiksIHZtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmluZUNvbXB1dGVkIChcbiAgICB0YXJnZXQsXG4gICAga2V5LFxuICAgIHVzZXJEZWZcbiAgKSB7XG4gICAgdmFyIHNob3VsZENhY2hlID0gIWlzU2VydmVyUmVuZGVyaW5nKCk7XG4gICAgaWYgKHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gc2hvdWxkQ2FjaGVcbiAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmKTtcbiAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBub29wO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gdXNlckRlZi5nZXRcbiAgICAgICAgPyBzaG91bGRDYWNoZSAmJiB1c2VyRGVmLmNhY2hlICE9PSBmYWxzZVxuICAgICAgICAgID8gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIoa2V5KVxuICAgICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmLmdldClcbiAgICAgICAgOiBub29wO1xuICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IHVzZXJEZWYuc2V0IHx8IG5vb3A7XG4gICAgfVxuICAgIGlmIChzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID09PSBub29wKSB7XG4gICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIChcIkNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiB3YXMgYXNzaWduZWQgdG8gYnV0IGl0IGhhcyBubyBzZXR0ZXIuXCIpLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXB1dGVkR2V0dGVyIChrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgICAgdmFyIHdhdGNoZXIgPSB0aGlzLl9jb21wdXRlZFdhdGNoZXJzICYmIHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnNba2V5XTtcbiAgICAgIGlmICh3YXRjaGVyKSB7XG4gICAgICAgIGlmICh3YXRjaGVyLmRpcnR5KSB7XG4gICAgICAgICAgd2F0Y2hlci5ldmFsdWF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgICAgd2F0Y2hlci5kZXBlbmQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUdldHRlckludm9rZXIoZm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgdGhpcylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0TWV0aG9kcyAodm0sIG1ldGhvZHMpIHtcbiAgICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykge1xuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIG1ldGhvZHNba2V5XSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICBcIk1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaGFzIHR5cGUgXFxcIlwiICsgKHR5cGVvZiBtZXRob2RzW2tleV0pICsgXCJcXFwiIGluIHRoZSBjb21wb25lbnQgZGVmaW5pdGlvbi4gXCIgK1xuICAgICAgICAgICAgXCJEaWQgeW91IHJlZmVyZW5jZSB0aGUgZnVuY3Rpb24gY29ycmVjdGx5P1wiLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgKFwiTWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBwcm9wLlwiKSxcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGtleSBpbiB2bSkgJiYgaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiTWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBWdWUgaW5zdGFuY2UgbWV0aG9kLiBcIiArXG4gICAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2bVtrZXldID0gdHlwZW9mIG1ldGhvZHNba2V5XSAhPT0gJ2Z1bmN0aW9uJyA/IG5vb3AgOiBiaW5kKG1ldGhvZHNba2V5XSwgdm0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRXYXRjaCAodm0sIHdhdGNoKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHdhdGNoKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IHdhdGNoW2tleV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVyKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXJbaV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVdhdGNoZXIgKFxuICAgIHZtLFxuICAgIGV4cE9yRm4sXG4gICAgaGFuZGxlcixcbiAgICBvcHRpb25zXG4gICkge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgICBvcHRpb25zID0gaGFuZGxlcjtcbiAgICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgICB9XG4gICAgcmV0dXJuIHZtLiR3YXRjaChleHBPckZuLCBoYW5kbGVyLCBvcHRpb25zKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdGVNaXhpbiAoVnVlKSB7XG4gICAgLy8gZmxvdyBzb21laG93IGhhcyBwcm9ibGVtcyB3aXRoIGRpcmVjdGx5IGRlY2xhcmVkIGRlZmluaXRpb24gb2JqZWN0XG4gICAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gICAgLy8gdGhlIG9iamVjdCBoZXJlLlxuICAgIHZhciBkYXRhRGVmID0ge307XG4gICAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhIH07XG4gICAgdmFyIHByb3BzRGVmID0ge307XG4gICAgcHJvcHNEZWYuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fcHJvcHMgfTtcbiAgICB7XG4gICAgICBkYXRhRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnQXZvaWQgcmVwbGFjaW5nIGluc3RhbmNlIHJvb3QgJGRhdGEuICcgK1xuICAgICAgICAgICdVc2UgbmVzdGVkIGRhdGEgcHJvcGVydGllcyBpbnN0ZWFkLicsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIHByb3BzRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybihcIiRwcm9wcyBpcyByZWFkb25seS5cIiwgdGhpcyk7XG4gICAgICB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRkYXRhJywgZGF0YURlZik7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcHJvcHMnLCBwcm9wc0RlZik7XG5cbiAgICBWdWUucHJvdG90eXBlLiRzZXQgPSBzZXQ7XG4gICAgVnVlLnByb3RvdHlwZS4kZGVsZXRlID0gZGVsO1xuXG4gICAgVnVlLnByb3RvdHlwZS4kd2F0Y2ggPSBmdW5jdGlvbiAoXG4gICAgICBleHBPckZuLFxuICAgICAgY2IsXG4gICAgICBvcHRpb25zXG4gICAgKSB7XG4gICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoY2IpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucylcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgb3B0aW9ucy51c2VyID0gdHJ1ZTtcbiAgICAgIHZhciB3YXRjaGVyID0gbmV3IFdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLmltbWVkaWF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNiLmNhbGwodm0sIHdhdGNoZXIudmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCB2bSwgKFwiY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVud2F0Y2hGbiAoKSB7XG4gICAgICAgIHdhdGNoZXIudGVhcmRvd24oKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIHVpZCQzID0gMDtcblxuICBmdW5jdGlvbiBpbml0TWl4aW4gKFZ1ZSkge1xuICAgIFZ1ZS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgIC8vIGEgdWlkXG4gICAgICB2bS5fdWlkID0gdWlkJDMrKztcblxuICAgICAgdmFyIHN0YXJ0VGFnLCBlbmRUYWc7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgICBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIgKyAodm0uX3VpZCk7XG4gICAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgKHZtLl91aWQpO1xuICAgICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgIH1cblxuICAgICAgLy8gYSBmbGFnIHRvIGF2b2lkIHRoaXMgYmVpbmcgb2JzZXJ2ZWRcbiAgICAgIHZtLl9pc1Z1ZSA9IHRydWU7XG4gICAgICAvLyBtZXJnZSBvcHRpb25zXG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgICAvLyBvcHRpbWl6ZSBpbnRlcm5hbCBjb21wb25lbnQgaW5zdGFudGlhdGlvblxuICAgICAgICAvLyBzaW5jZSBkeW5hbWljIG9wdGlvbnMgbWVyZ2luZyBpcyBwcmV0dHkgc2xvdywgYW5kIG5vbmUgb2YgdGhlXG4gICAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgICBpbml0SW50ZXJuYWxDb21wb25lbnQodm0sIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICAgICAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyh2bS5jb25zdHJ1Y3RvciksXG4gICAgICAgICAgb3B0aW9ucyB8fCB7fSxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIHtcbiAgICAgICAgaW5pdFByb3h5KHZtKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9zZSByZWFsIHNlbGZcbiAgICAgIHZtLl9zZWxmID0gdm07XG4gICAgICBpbml0TGlmZWN5Y2xlKHZtKTtcbiAgICAgIGluaXRFdmVudHModm0pO1xuICAgICAgaW5pdFJlbmRlcih2bSk7XG4gICAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZUNyZWF0ZScpO1xuICAgICAgaW5pdEluamVjdGlvbnModm0pOyAvLyByZXNvbHZlIGluamVjdGlvbnMgYmVmb3JlIGRhdGEvcHJvcHNcbiAgICAgIGluaXRTdGF0ZSh2bSk7XG4gICAgICBpbml0UHJvdmlkZSh2bSk7IC8vIHJlc29sdmUgcHJvdmlkZSBhZnRlciBkYXRhL3Byb3BzXG4gICAgICBjYWxsSG9vayh2bSwgJ2NyZWF0ZWQnKTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgdm0uX25hbWUgPSBmb3JtYXRDb21wb25lbnROYW1lKHZtLCBmYWxzZSk7XG4gICAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyAodm0uX25hbWUpICsgXCIgaW5pdFwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2bS4kb3B0aW9ucy5lbCkge1xuICAgICAgICB2bS4kbW91bnQodm0uJG9wdGlvbnMuZWwpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbml0SW50ZXJuYWxDb21wb25lbnQgKHZtLCBvcHRpb25zKSB7XG4gICAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucyk7XG4gICAgLy8gZG9pbmcgdGhpcyBiZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4gZHluYW1pYyBlbnVtZXJhdGlvbi5cbiAgICB2YXIgcGFyZW50Vm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTtcbiAgICBvcHRzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIG9wdHMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG5cbiAgICB2YXIgdm5vZGVDb21wb25lbnRPcHRpb25zID0gcGFyZW50Vm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBvcHRzLnByb3BzRGF0YSA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGE7XG4gICAgb3B0cy5fcGFyZW50TGlzdGVuZXJzID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmxpc3RlbmVycztcbiAgICBvcHRzLl9yZW5kZXJDaGlsZHJlbiA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5jaGlsZHJlbjtcbiAgICBvcHRzLl9jb21wb25lbnRUYWcgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMudGFnO1xuXG4gICAgaWYgKG9wdGlvbnMucmVuZGVyKSB7XG4gICAgICBvcHRzLnJlbmRlciA9IG9wdGlvbnMucmVuZGVyO1xuICAgICAgb3B0cy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZucztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zIChDdG9yKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gICAgaWYgKEN0b3Iuc3VwZXIpIHtcbiAgICAgIHZhciBzdXBlck9wdGlvbnMgPSByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3Iuc3VwZXIpO1xuICAgICAgdmFyIGNhY2hlZFN1cGVyT3B0aW9ucyA9IEN0b3Iuc3VwZXJPcHRpb25zO1xuICAgICAgaWYgKHN1cGVyT3B0aW9ucyAhPT0gY2FjaGVkU3VwZXJPcHRpb25zKSB7XG4gICAgICAgIC8vIHN1cGVyIG9wdGlvbiBjaGFuZ2VkLFxuICAgICAgICAvLyBuZWVkIHRvIHJlc29sdmUgbmV3IG9wdGlvbnMuXG4gICAgICAgIEN0b3Iuc3VwZXJPcHRpb25zID0gc3VwZXJPcHRpb25zO1xuICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGxhdGUtbW9kaWZpZWQvYXR0YWNoZWQgb3B0aW9ucyAoIzQ5NzYpXG4gICAgICAgIHZhciBtb2RpZmllZE9wdGlvbnMgPSByZXNvbHZlTW9kaWZpZWRPcHRpb25zKEN0b3IpO1xuICAgICAgICAvLyB1cGRhdGUgYmFzZSBleHRlbmQgb3B0aW9uc1xuICAgICAgICBpZiAobW9kaWZpZWRPcHRpb25zKSB7XG4gICAgICAgICAgZXh0ZW5kKEN0b3IuZXh0ZW5kT3B0aW9ucywgbW9kaWZpZWRPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zID0gQ3Rvci5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHN1cGVyT3B0aW9ucywgQ3Rvci5leHRlbmRPcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICAgIG9wdGlvbnMuY29tcG9uZW50c1tvcHRpb25zLm5hbWVdID0gQ3RvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyAoQ3Rvcikge1xuICAgIHZhciBtb2RpZmllZDtcbiAgICB2YXIgbGF0ZXN0ID0gQ3Rvci5vcHRpb25zO1xuICAgIHZhciBzZWFsZWQgPSBDdG9yLnNlYWxlZE9wdGlvbnM7XG4gICAgZm9yICh2YXIga2V5IGluIGxhdGVzdCkge1xuICAgICAgaWYgKGxhdGVzdFtrZXldICE9PSBzZWFsZWRba2V5XSkge1xuICAgICAgICBpZiAoIW1vZGlmaWVkKSB7IG1vZGlmaWVkID0ge307IH1cbiAgICAgICAgbW9kaWZpZWRba2V5XSA9IGxhdGVzdFtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kaWZpZWRcbiAgfVxuXG4gIGZ1bmN0aW9uIFZ1ZSAob3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBWdWUpXG4gICAgKSB7XG4gICAgICB3YXJuKCdWdWUgaXMgYSBjb25zdHJ1Y3RvciBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkJyk7XG4gICAgfVxuICAgIHRoaXMuX2luaXQob3B0aW9ucyk7XG4gIH1cblxuICBpbml0TWl4aW4oVnVlKTtcbiAgc3RhdGVNaXhpbihWdWUpO1xuICBldmVudHNNaXhpbihWdWUpO1xuICBsaWZlY3ljbGVNaXhpbihWdWUpO1xuICByZW5kZXJNaXhpbihWdWUpO1xuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGluaXRVc2UgKFZ1ZSkge1xuICAgIFZ1ZS51c2UgPSBmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgICB2YXIgaW5zdGFsbGVkUGx1Z2lucyA9ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zIHx8ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zID0gW10pKTtcbiAgICAgIGlmIChpbnN0YWxsZWRQbHVnaW5zLmluZGV4T2YocGx1Z2luKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICB9XG5cbiAgICAgIC8vIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4gICAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgICBpZiAodHlwZW9mIHBsdWdpbi5pbnN0YWxsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBsdWdpbi5pbnN0YWxsLmFwcGx5KHBsdWdpbiwgYXJncyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcGx1Z2luLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH07XG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBpbml0TWl4aW4kMSAoVnVlKSB7XG4gICAgVnVlLm1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBtaXhpbik7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH07XG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBpbml0RXh0ZW5kIChWdWUpIHtcbiAgICAvKipcbiAgICAgKiBFYWNoIGluc3RhbmNlIGNvbnN0cnVjdG9yLCBpbmNsdWRpbmcgVnVlLCBoYXMgYSB1bmlxdWVcbiAgICAgKiBjaWQuIFRoaXMgZW5hYmxlcyB1cyB0byBjcmVhdGUgd3JhcHBlZCBcImNoaWxkXG4gICAgICogY29uc3RydWN0b3JzXCIgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UgYW5kIGNhY2hlIHRoZW0uXG4gICAgICovXG4gICAgVnVlLmNpZCA9IDA7XG4gICAgdmFyIGNpZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBpbmhlcml0YW5jZVxuICAgICAqL1xuICAgIFZ1ZS5leHRlbmQgPSBmdW5jdGlvbiAoZXh0ZW5kT3B0aW9ucykge1xuICAgICAgZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnMgfHwge307XG4gICAgICB2YXIgU3VwZXIgPSB0aGlzO1xuICAgICAgdmFyIFN1cGVySWQgPSBTdXBlci5jaWQ7XG4gICAgICB2YXIgY2FjaGVkQ3RvcnMgPSBleHRlbmRPcHRpb25zLl9DdG9yIHx8IChleHRlbmRPcHRpb25zLl9DdG9yID0ge30pO1xuICAgICAgaWYgKGNhY2hlZEN0b3JzW1N1cGVySWRdKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRDdG9yc1tTdXBlcklkXVxuICAgICAgfVxuXG4gICAgICB2YXIgbmFtZSA9IGV4dGVuZE9wdGlvbnMubmFtZSB8fCBTdXBlci5vcHRpb25zLm5hbWU7XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUobmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBTdWIgPSBmdW5jdGlvbiBWdWVDb21wb25lbnQgKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5faW5pdChvcHRpb25zKTtcbiAgICAgIH07XG4gICAgICBTdWIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICAgICAgU3ViLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN1YjtcbiAgICAgIFN1Yi5jaWQgPSBjaWQrKztcbiAgICAgIFN1Yi5vcHRpb25zID0gbWVyZ2VPcHRpb25zKFxuICAgICAgICBTdXBlci5vcHRpb25zLFxuICAgICAgICBleHRlbmRPcHRpb25zXG4gICAgICApO1xuICAgICAgU3ViWydzdXBlciddID0gU3VwZXI7XG5cbiAgICAgIC8vIEZvciBwcm9wcyBhbmQgY29tcHV0ZWQgcHJvcGVydGllcywgd2UgZGVmaW5lIHRoZSBwcm94eSBnZXR0ZXJzIG9uXG4gICAgICAvLyB0aGUgVnVlIGluc3RhbmNlcyBhdCBleHRlbnNpb24gdGltZSwgb24gdGhlIGV4dGVuZGVkIHByb3RvdHlwZS4gVGhpc1xuICAgICAgLy8gYXZvaWRzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxscyBmb3IgZWFjaCBpbnN0YW5jZSBjcmVhdGVkLlxuICAgICAgaWYgKFN1Yi5vcHRpb25zLnByb3BzKSB7XG4gICAgICAgIGluaXRQcm9wcyQxKFN1Yik7XG4gICAgICB9XG4gICAgICBpZiAoU3ViLm9wdGlvbnMuY29tcHV0ZWQpIHtcbiAgICAgICAgaW5pdENvbXB1dGVkJDEoU3ViKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWxsb3cgZnVydGhlciBleHRlbnNpb24vbWl4aW4vcGx1Z2luIHVzYWdlXG4gICAgICBTdWIuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kO1xuICAgICAgU3ViLm1peGluID0gU3VwZXIubWl4aW47XG4gICAgICBTdWIudXNlID0gU3VwZXIudXNlO1xuXG4gICAgICAvLyBjcmVhdGUgYXNzZXQgcmVnaXN0ZXJzLCBzbyBleHRlbmRlZCBjbGFzc2VzXG4gICAgICAvLyBjYW4gaGF2ZSB0aGVpciBwcml2YXRlIGFzc2V0cyB0b28uXG4gICAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIFN1Ylt0eXBlXSA9IFN1cGVyW3R5cGVdO1xuICAgICAgfSk7XG4gICAgICAvLyBlbmFibGUgcmVjdXJzaXZlIHNlbGYtbG9va3VwXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBTdWIub3B0aW9ucy5jb21wb25lbnRzW25hbWVdID0gU3ViO1xuICAgICAgfVxuXG4gICAgICAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBlciBvcHRpb25zIGF0IGV4dGVuc2lvbiB0aW1lLlxuICAgICAgLy8gbGF0ZXIgYXQgaW5zdGFudGlhdGlvbiB3ZSBjYW4gY2hlY2sgaWYgU3VwZXIncyBvcHRpb25zIGhhdmVcbiAgICAgIC8vIGJlZW4gdXBkYXRlZC5cbiAgICAgIFN1Yi5zdXBlck9wdGlvbnMgPSBTdXBlci5vcHRpb25zO1xuICAgICAgU3ViLmV4dGVuZE9wdGlvbnMgPSBleHRlbmRPcHRpb25zO1xuICAgICAgU3ViLnNlYWxlZE9wdGlvbnMgPSBleHRlbmQoe30sIFN1Yi5vcHRpb25zKTtcblxuICAgICAgLy8gY2FjaGUgY29uc3RydWN0b3JcbiAgICAgIGNhY2hlZEN0b3JzW1N1cGVySWRdID0gU3ViO1xuICAgICAgcmV0dXJuIFN1YlxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbml0UHJvcHMkMSAoQ29tcCkge1xuICAgIHZhciBwcm9wcyA9IENvbXAub3B0aW9ucy5wcm9wcztcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHByb3h5KENvbXAucHJvdG90eXBlLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRDb21wdXRlZCQxIChDb21wKSB7XG4gICAgdmFyIGNvbXB1dGVkID0gQ29tcC5vcHRpb25zLmNvbXB1dGVkO1xuICAgIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgICAgZGVmaW5lQ29tcHV0ZWQoQ29tcC5wcm90b3R5cGUsIGtleSwgY29tcHV0ZWRba2V5XSk7XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gaW5pdEFzc2V0UmVnaXN0ZXJzIChWdWUpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYXNzZXQgcmVnaXN0cmF0aW9uIG1ldGhvZHMuXG4gICAgICovXG4gICAgQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgVnVlW3R5cGVdID0gZnVuY3Rpb24gKFxuICAgICAgICBpZCxcbiAgICAgICAgZGVmaW5pdGlvblxuICAgICAgKSB7XG4gICAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbdHlwZSArICdzJ11baWRdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUoaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbXBvbmVudCcgJiYgaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgZGVmaW5pdGlvbi5uYW1lID0gZGVmaW5pdGlvbi5uYW1lIHx8IGlkO1xuICAgICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlID09PSAnZGlyZWN0aXZlJyAmJiB0eXBlb2YgZGVmaW5pdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtpZF0gPSBkZWZpbml0aW9uO1xuICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKiAgKi9cblxuXG5cbiAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSAob3B0cykge1xuICAgIHJldHVybiBvcHRzICYmIChvcHRzLkN0b3Iub3B0aW9ucy5uYW1lIHx8IG9wdHMudGFnKVxuICB9XG5cbiAgZnVuY3Rpb24gbWF0Y2hlcyAocGF0dGVybiwgbmFtZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi5pbmRleE9mKG5hbWUpID4gLTFcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHBhdHRlcm4uc3BsaXQoJywnKS5pbmRleE9mKG5hbWUpID4gLTFcbiAgICB9IGVsc2UgaWYgKGlzUmVnRXhwKHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpXG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBwcnVuZUNhY2hlIChrZWVwQWxpdmVJbnN0YW5jZSwgZmlsdGVyKSB7XG4gICAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGU7XG4gICAgdmFyIGtleXMgPSBrZWVwQWxpdmVJbnN0YW5jZS5rZXlzO1xuICAgIHZhciBfdm5vZGUgPSBrZWVwQWxpdmVJbnN0YW5jZS5fdm5vZGU7XG4gICAgZm9yICh2YXIga2V5IGluIGNhY2hlKSB7XG4gICAgICB2YXIgY2FjaGVkTm9kZSA9IGNhY2hlW2tleV07XG4gICAgICBpZiAoY2FjaGVkTm9kZSkge1xuICAgICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY2FjaGVkTm9kZS5jb21wb25lbnRPcHRpb25zKTtcbiAgICAgICAgaWYgKG5hbWUgJiYgIWZpbHRlcihuYW1lKSkge1xuICAgICAgICAgIHBydW5lQ2FjaGVFbnRyeShjYWNoZSwga2V5LCBrZXlzLCBfdm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJ1bmVDYWNoZUVudHJ5IChcbiAgICBjYWNoZSxcbiAgICBrZXksXG4gICAga2V5cyxcbiAgICBjdXJyZW50XG4gICkge1xuICAgIHZhciBjYWNoZWQkJDEgPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWQkJDEgJiYgKCFjdXJyZW50IHx8IGNhY2hlZCQkMS50YWcgIT09IGN1cnJlbnQudGFnKSkge1xuICAgICAgY2FjaGVkJCQxLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gICAgfVxuICAgIGNhY2hlW2tleV0gPSBudWxsO1xuICAgIHJlbW92ZShrZXlzLCBrZXkpO1xuICB9XG5cbiAgdmFyIHBhdHRlcm5UeXBlcyA9IFtTdHJpbmcsIFJlZ0V4cCwgQXJyYXldO1xuXG4gIHZhciBLZWVwQWxpdmUgPSB7XG4gICAgbmFtZTogJ2tlZXAtYWxpdmUnLFxuICAgIGFic3RyYWN0OiB0cnVlLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgIGluY2x1ZGU6IHBhdHRlcm5UeXBlcyxcbiAgICAgIGV4Y2x1ZGU6IHBhdHRlcm5UeXBlcyxcbiAgICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxuICAgIH0sXG5cbiAgICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkICgpIHtcbiAgICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgdGhpcy5rZXlzID0gW107XG4gICAgfSxcblxuICAgIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNhY2hlKSB7XG4gICAgICAgIHBydW5lQ2FjaGVFbnRyeSh0aGlzLmNhY2hlLCBrZXksIHRoaXMua2V5cyk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQgKCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJHdhdGNoKCdpbmNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBwcnVuZUNhY2hlKHRoaXMkMSwgZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIG1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuJHdhdGNoKCdleGNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBwcnVuZUNhY2hlKHRoaXMkMSwgZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuICFtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyICgpIHtcbiAgICAgIHZhciBzbG90ID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICAgIHZhciB2bm9kZSA9IGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoc2xvdCk7XG4gICAgICB2YXIgY29tcG9uZW50T3B0aW9ucyA9IHZub2RlICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICBpZiAoY29tcG9uZW50T3B0aW9ucykge1xuICAgICAgICAvLyBjaGVjayBwYXR0ZXJuXG4gICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnRPcHRpb25zKTtcbiAgICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICAgIHZhciBpbmNsdWRlID0gcmVmLmluY2x1ZGU7XG4gICAgICAgIHZhciBleGNsdWRlID0gcmVmLmV4Y2x1ZGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBub3QgaW5jbHVkZWRcbiAgICAgICAgICAoaW5jbHVkZSAmJiAoIW5hbWUgfHwgIW1hdGNoZXMoaW5jbHVkZSwgbmFtZSkpKSB8fFxuICAgICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgICAgKGV4Y2x1ZGUgJiYgbmFtZSAmJiBtYXRjaGVzKGV4Y2x1ZGUsIG5hbWUpKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdm5vZGVcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZWYkMSA9IHRoaXM7XG4gICAgICAgIHZhciBjYWNoZSA9IHJlZiQxLmNhY2hlO1xuICAgICAgICB2YXIga2V5cyA9IHJlZiQxLmtleXM7XG4gICAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXkgPT0gbnVsbFxuICAgICAgICAgIC8vIHNhbWUgY29uc3RydWN0b3IgbWF5IGdldCByZWdpc3RlcmVkIGFzIGRpZmZlcmVudCBsb2NhbCBjb21wb25lbnRzXG4gICAgICAgICAgLy8gc28gY2lkIGFsb25lIGlzIG5vdCBlbm91Z2ggKCMzMjY5KVxuICAgICAgICAgID8gY29tcG9uZW50T3B0aW9ucy5DdG9yLmNpZCArIChjb21wb25lbnRPcHRpb25zLnRhZyA/IChcIjo6XCIgKyAoY29tcG9uZW50T3B0aW9ucy50YWcpKSA6ICcnKVxuICAgICAgICAgIDogdm5vZGUua2V5O1xuICAgICAgICBpZiAoY2FjaGVba2V5XSkge1xuICAgICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY2FjaGVba2V5XS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgICAgcmVtb3ZlKGtleXMsIGtleSk7XG4gICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FjaGVba2V5XSA9IHZub2RlO1xuICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICAgIGlmICh0aGlzLm1heCAmJiBrZXlzLmxlbmd0aCA+IHBhcnNlSW50KHRoaXMubWF4KSkge1xuICAgICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXlzWzBdLCBrZXlzLCB0aGlzLl92bm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdm5vZGUuZGF0YS5rZWVwQWxpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZub2RlIHx8IChzbG90ICYmIHNsb3RbMF0pXG4gICAgfVxuICB9O1xuXG4gIHZhciBidWlsdEluQ29tcG9uZW50cyA9IHtcbiAgICBLZWVwQWxpdmU6IEtlZXBBbGl2ZVxuICB9O1xuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGluaXRHbG9iYWxBUEkgKFZ1ZSkge1xuICAgIC8vIGNvbmZpZ1xuICAgIHZhciBjb25maWdEZWYgPSB7fTtcbiAgICBjb25maWdEZWYuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlnOyB9O1xuICAgIHtcbiAgICAgIGNvbmZpZ0RlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0RvIG5vdCByZXBsYWNlIHRoZSBWdWUuY29uZmlnIG9iamVjdCwgc2V0IGluZGl2aWR1YWwgZmllbGRzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZSwgJ2NvbmZpZycsIGNvbmZpZ0RlZik7XG5cbiAgICAvLyBleHBvc2VkIHV0aWwgbWV0aG9kcy5cbiAgICAvLyBOT1RFOiB0aGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcHVibGljIEFQSSAtIGF2b2lkIHJlbHlpbmcgb25cbiAgICAvLyB0aGVtIHVubGVzcyB5b3UgYXJlIGF3YXJlIG9mIHRoZSByaXNrLlxuICAgIFZ1ZS51dGlsID0ge1xuICAgICAgd2Fybjogd2FybixcbiAgICAgIGV4dGVuZDogZXh0ZW5kLFxuICAgICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnMsXG4gICAgICBkZWZpbmVSZWFjdGl2ZTogZGVmaW5lUmVhY3RpdmUkJDFcbiAgICB9O1xuXG4gICAgVnVlLnNldCA9IHNldDtcbiAgICBWdWUuZGVsZXRlID0gZGVsO1xuICAgIFZ1ZS5uZXh0VGljayA9IG5leHRUaWNrO1xuXG4gICAgLy8gMi42IGV4cGxpY2l0IG9ic2VydmFibGUgQVBJXG4gICAgVnVlLm9ic2VydmFibGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICBvYnNlcnZlKG9iaik7XG4gICAgICByZXR1cm4gb2JqXG4gICAgfTtcblxuICAgIFZ1ZS5vcHRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBWdWUub3B0aW9uc1t0eXBlICsgJ3MnXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfSk7XG5cbiAgICAvLyB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFwiYmFzZVwiIGNvbnN0cnVjdG9yIHRvIGV4dGVuZCBhbGwgcGxhaW4tb2JqZWN0XG4gICAgLy8gY29tcG9uZW50cyB3aXRoIGluIFdlZXgncyBtdWx0aS1pbnN0YW5jZSBzY2VuYXJpb3MuXG4gICAgVnVlLm9wdGlvbnMuX2Jhc2UgPSBWdWU7XG5cbiAgICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNvbXBvbmVudHMpO1xuXG4gICAgaW5pdFVzZShWdWUpO1xuICAgIGluaXRNaXhpbiQxKFZ1ZSk7XG4gICAgaW5pdEV4dGVuZChWdWUpO1xuICAgIGluaXRBc3NldFJlZ2lzdGVycyhWdWUpO1xuICB9XG5cbiAgaW5pdEdsb2JhbEFQSShWdWUpO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGlzU2VydmVyJywge1xuICAgIGdldDogaXNTZXJ2ZXJSZW5kZXJpbmdcbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckc3NyQ29udGV4dCcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHRcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGV4cG9zZSBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCBmb3Igc3NyIHJ1bnRpbWUgaGVscGVyIGluc3RhbGxhdGlvblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnRnVuY3Rpb25hbFJlbmRlckNvbnRleHQnLCB7XG4gICAgdmFsdWU6IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XG4gIH0pO1xuXG4gIFZ1ZS52ZXJzaW9uID0gJzIuNi4xMSc7XG5cbiAgLyogICovXG5cbiAgLy8gdGhlc2UgYXJlIHJlc2VydmVkIGZvciB3ZWIgYmVjYXVzZSB0aGV5IGFyZSBkaXJlY3RseSBjb21waWxlZCBhd2F5XG4gIC8vIGR1cmluZyB0ZW1wbGF0ZSBjb21waWxhdGlvblxuICB2YXIgaXNSZXNlcnZlZEF0dHIgPSBtYWtlTWFwKCdzdHlsZSxjbGFzcycpO1xuXG4gIC8vIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgYmUgdXNpbmcgcHJvcHMgZm9yIGJpbmRpbmdcbiAgdmFyIGFjY2VwdFZhbHVlID0gbWFrZU1hcCgnaW5wdXQsdGV4dGFyZWEsb3B0aW9uLHNlbGVjdCxwcm9ncmVzcycpO1xuICB2YXIgbXVzdFVzZVByb3AgPSBmdW5jdGlvbiAodGFnLCB0eXBlLCBhdHRyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIChhdHRyID09PSAndmFsdWUnICYmIGFjY2VwdFZhbHVlKHRhZykpICYmIHR5cGUgIT09ICdidXR0b24nIHx8XG4gICAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0YWcgPT09ICdvcHRpb24nKSB8fFxuICAgICAgKGF0dHIgPT09ICdjaGVja2VkJyAmJiB0YWcgPT09ICdpbnB1dCcpIHx8XG4gICAgICAoYXR0ciA9PT0gJ211dGVkJyAmJiB0YWcgPT09ICd2aWRlbycpXG4gICAgKVxuICB9O1xuXG4gIHZhciBpc0VudW1lcmF0ZWRBdHRyID0gbWFrZU1hcCgnY29udGVudGVkaXRhYmxlLGRyYWdnYWJsZSxzcGVsbGNoZWNrJyk7XG5cbiAgdmFyIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSA9IG1ha2VNYXAoJ2V2ZW50cyxjYXJldCx0eXBpbmcscGxhaW50ZXh0LW9ubHknKTtcblxuICB2YXIgY29udmVydEVudW1lcmF0ZWRWYWx1ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpIHx8IHZhbHVlID09PSAnZmFsc2UnXG4gICAgICA/ICdmYWxzZSdcbiAgICAgIC8vIGFsbG93IGFyYml0cmFyeSBzdHJpbmcgdmFsdWUgZm9yIGNvbnRlbnRlZGl0YWJsZVxuICAgICAgOiBrZXkgPT09ICdjb250ZW50ZWRpdGFibGUnICYmIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZVxuICAgICAgICA6ICd0cnVlJ1xuICB9O1xuXG4gIHZhciBpc0Jvb2xlYW5BdHRyID0gbWFrZU1hcChcbiAgICAnYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSwnICtcbiAgICAnZGVmYXVsdCxkZWZhdWx0Y2hlY2tlZCxkZWZhdWx0bXV0ZWQsZGVmYXVsdHNlbGVjdGVkLGRlZmVyLGRpc2FibGVkLCcgK1xuICAgICdlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLCcgK1xuICAgICdtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LCcgK1xuICAgICdyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3Msc2VsZWN0ZWQsc29ydGFibGUsdHJhbnNsYXRlLCcgK1xuICAgICd0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlJ1xuICApO1xuXG4gIHZhciB4bGlua05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnO1xuXG4gIHZhciBpc1hsaW5rID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZS5jaGFyQXQoNSkgPT09ICc6JyAmJiBuYW1lLnNsaWNlKDAsIDUpID09PSAneGxpbmsnXG4gIH07XG5cbiAgdmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIGlzWGxpbmsobmFtZSkgPyBuYW1lLnNsaWNlKDYsIG5hbWUubGVuZ3RoKSA6ICcnXG4gIH07XG5cbiAgdmFyIGlzRmFsc3lBdHRyVmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gZmFsc2VcbiAgfTtcblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBnZW5DbGFzc0ZvclZub2RlICh2bm9kZSkge1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICAgIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgICB3aGlsZSAoaXNEZWYoY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgIGlmIChjaGlsZE5vZGUgJiYgY2hpbGROb2RlLmRhdGEpIHtcbiAgICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGNoaWxkTm9kZS5kYXRhLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKGlzRGVmKHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudCkpIHtcbiAgICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZGF0YSkge1xuICAgICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoZGF0YSwgcGFyZW50Tm9kZS5kYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlckNsYXNzKGRhdGEuc3RhdGljQ2xhc3MsIGRhdGEuY2xhc3MpXG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZUNsYXNzRGF0YSAoY2hpbGQsIHBhcmVudCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0aWNDbGFzczogY29uY2F0KGNoaWxkLnN0YXRpY0NsYXNzLCBwYXJlbnQuc3RhdGljQ2xhc3MpLFxuICAgICAgY2xhc3M6IGlzRGVmKGNoaWxkLmNsYXNzKVxuICAgICAgICA/IFtjaGlsZC5jbGFzcywgcGFyZW50LmNsYXNzXVxuICAgICAgICA6IHBhcmVudC5jbGFzc1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckNsYXNzIChcbiAgICBzdGF0aWNDbGFzcyxcbiAgICBkeW5hbWljQ2xhc3NcbiAgKSB7XG4gICAgaWYgKGlzRGVmKHN0YXRpY0NsYXNzKSB8fCBpc0RlZihkeW5hbWljQ2xhc3MpKSB7XG4gICAgICByZXR1cm4gY29uY2F0KHN0YXRpY0NsYXNzLCBzdHJpbmdpZnlDbGFzcyhkeW5hbWljQ2xhc3MpKVxuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgZnVuY3Rpb24gY29uY2F0IChhLCBiKSB7XG4gICAgcmV0dXJuIGEgPyBiID8gKGEgKyAnICcgKyBiKSA6IGEgOiAoYiB8fCAnJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0cmluZ2lmeUNsYXNzICh2YWx1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeUFycmF5KHZhbHVlKVxuICAgIH1cbiAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5T2JqZWN0KHZhbHVlKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmdpZnlBcnJheSAodmFsdWUpIHtcbiAgICB2YXIgcmVzID0gJyc7XG4gICAgdmFyIHN0cmluZ2lmaWVkO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoaXNEZWYoc3RyaW5naWZpZWQgPSBzdHJpbmdpZnlDbGFzcyh2YWx1ZVtpXSkpICYmIHN0cmluZ2lmaWVkICE9PSAnJykge1xuICAgICAgICBpZiAocmVzKSB7IHJlcyArPSAnICc7IH1cbiAgICAgICAgcmVzICs9IHN0cmluZ2lmaWVkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmdpZnlPYmplY3QgKHZhbHVlKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlW2tleV0pIHtcbiAgICAgICAgaWYgKHJlcykgeyByZXMgKz0gJyAnOyB9XG4gICAgICAgIHJlcyArPSBrZXk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfVxuXG4gIC8qICAqL1xuXG4gIHZhciBuYW1lc3BhY2VNYXAgPSB7XG4gICAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICAgIG1hdGg6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJ1xuICB9O1xuXG4gIHZhciBpc0hUTUxUYWcgPSBtYWtlTWFwKFxuICAgICdodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSwnICtcbiAgICAnYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGdyb3VwLG5hdixzZWN0aW9uLCcgK1xuICAgICdkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCwnICtcbiAgICAnYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LCcgK1xuICAgICdzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbywnICtcbiAgICAnZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsJyArXG4gICAgJ2NhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLCcgK1xuICAgICdidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsb3B0aW9uLCcgK1xuICAgICdvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLCcgK1xuICAgICdkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksJyArXG4gICAgJ2NvbnRlbnQsZWxlbWVudCxzaGFkb3csdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3QnXG4gICk7XG5cbiAgLy8gdGhpcyBtYXAgaXMgaW50ZW50aW9uYWxseSBzZWxlY3RpdmUsIG9ubHkgY292ZXJpbmcgU1ZHIGVsZW1lbnRzIHRoYXQgbWF5XG4gIC8vIGNvbnRhaW4gY2hpbGQgZWxlbWVudHMuXG4gIHZhciBpc1NWRyA9IG1ha2VNYXAoXG4gICAgJ3N2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSwnICtcbiAgICAnZm9yZWlnbk9iamVjdCxnLGdseXBoLGltYWdlLGxpbmUsbWFya2VyLG1hc2ssbWlzc2luZy1nbHlwaCxwYXRoLHBhdHRlcm4sJyArXG4gICAgJ3BvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXcnLFxuICAgIHRydWVcbiAgKTtcblxuICB2YXIgaXNQcmVUYWcgPSBmdW5jdGlvbiAodGFnKSB7IHJldHVybiB0YWcgPT09ICdwcmUnOyB9O1xuXG4gIHZhciBpc1Jlc2VydmVkVGFnID0gZnVuY3Rpb24gKHRhZykge1xuICAgIHJldHVybiBpc0hUTUxUYWcodGFnKSB8fCBpc1NWRyh0YWcpXG4gIH07XG5cbiAgZnVuY3Rpb24gZ2V0VGFnTmFtZXNwYWNlICh0YWcpIHtcbiAgICBpZiAoaXNTVkcodGFnKSkge1xuICAgICAgcmV0dXJuICdzdmcnXG4gICAgfVxuICAgIC8vIGJhc2ljIHN1cHBvcnQgZm9yIE1hdGhNTFxuICAgIC8vIG5vdGUgaXQgZG9lc24ndCBzdXBwb3J0IG90aGVyIE1hdGhNTCBlbGVtZW50cyBiZWluZyBjb21wb25lbnQgcm9vdHNcbiAgICBpZiAodGFnID09PSAnbWF0aCcpIHtcbiAgICAgIHJldHVybiAnbWF0aCdcbiAgICB9XG4gIH1cblxuICB2YXIgdW5rbm93bkVsZW1lbnRDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQgKHRhZykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghaW5Ccm93c2VyKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgdGFnID0gdGFnLnRvTG93ZXJDYXNlKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5rbm93bkVsZW1lbnRDYWNoZVt0YWddXG4gICAgfVxuICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICBpZiAodGFnLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODIxMDM2NC8xMDcwMjQ0XG4gICAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IChcbiAgICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnQgfHxcbiAgICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MRWxlbWVudFxuICAgICAgKSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAvSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KGVsLnRvU3RyaW5nKCkpKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpc1RleHRJbnB1dFR5cGUgPSBtYWtlTWFwKCd0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybCcpO1xuXG4gIC8qICAqL1xuXG4gIC8qKlxuICAgKiBRdWVyeSBhbiBlbGVtZW50IHNlbGVjdG9yIGlmIGl0J3Mgbm90IGFuIGVsZW1lbnQgYWxyZWFkeS5cbiAgICovXG4gIGZ1bmN0aW9uIHF1ZXJ5IChlbCkge1xuICAgIGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKTtcbiAgICAgIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGVjdGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbFxuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQkMSAodGFnTmFtZSwgdm5vZGUpIHtcbiAgICB2YXIgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgICBpZiAodGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICAgIHJldHVybiBlbG1cbiAgICB9XG4gICAgLy8gZmFsc2Ugb3IgbnVsbCB3aWxsIHJlbW92ZSB0aGUgYXR0cmlidXRlIGJ1dCB1bmRlZmluZWQgd2lsbCBub3RcbiAgICBpZiAodm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLmF0dHJzICYmIHZub2RlLmRhdGEuYXR0cnMubXVsdGlwbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZWxtLnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnbXVsdGlwbGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsbVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TIChuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZU1hcFtuYW1lc3BhY2VdLCB0YWdOYW1lKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUgKHRleHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQgKHRleHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0ZXh0KVxuICB9XG5cbiAgZnVuY3Rpb24gaW5zZXJ0QmVmb3JlIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVDaGlsZCAobm9kZSwgY2hpbGQpIHtcbiAgICBub2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGVuZENoaWxkIChub2RlLCBjaGlsZCkge1xuICAgIG5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyZW50Tm9kZSAobm9kZSkge1xuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGVcbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHRTaWJsaW5nIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmdcbiAgfVxuXG4gIGZ1bmN0aW9uIHRhZ05hbWUgKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50YWdOYW1lXG4gIH1cblxuICBmdW5jdGlvbiBzZXRUZXh0Q29udGVudCAobm9kZSwgdGV4dCkge1xuICAgIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0U3R5bGVTY29wZSAobm9kZSwgc2NvcGVJZCkge1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKHNjb3BlSWQsICcnKTtcbiAgfVxuXG4gIHZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQkMSxcbiAgICBjcmVhdGVFbGVtZW50TlM6IGNyZWF0ZUVsZW1lbnROUyxcbiAgICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gICAgY3JlYXRlQ29tbWVudDogY3JlYXRlQ29tbWVudCxcbiAgICBpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcbiAgICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gICAgYXBwZW5kQ2hpbGQ6IGFwcGVuZENoaWxkLFxuICAgIHBhcmVudE5vZGU6IHBhcmVudE5vZGUsXG4gICAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICAgIHRhZ05hbWU6IHRhZ05hbWUsXG4gICAgc2V0VGV4dENvbnRlbnQ6IHNldFRleHRDb250ZW50LFxuICAgIHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbiAgfSk7XG5cbiAgLyogICovXG5cbiAgdmFyIHJlZiA9IHtcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSAoXywgdm5vZGUpIHtcbiAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICB9LFxuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICAgIGlmIChvbGRWbm9kZS5kYXRhLnJlZiAhPT0gdm5vZGUuZGF0YS5yZWYpIHtcbiAgICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95ICh2bm9kZSkge1xuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUsIHRydWUpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiByZWdpc3RlclJlZiAodm5vZGUsIGlzUmVtb3ZhbCkge1xuICAgIHZhciBrZXkgPSB2bm9kZS5kYXRhLnJlZjtcbiAgICBpZiAoIWlzRGVmKGtleSkpIHsgcmV0dXJuIH1cblxuICAgIHZhciB2bSA9IHZub2RlLmNvbnRleHQ7XG4gICAgdmFyIHJlZiA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmVsbTtcbiAgICB2YXIgcmVmcyA9IHZtLiRyZWZzO1xuICAgIGlmIChpc1JlbW92YWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgICAgcmVtb3ZlKHJlZnNba2V5XSwgcmVmKTtcbiAgICAgIH0gZWxzZSBpZiAocmVmc1trZXldID09PSByZWYpIHtcbiAgICAgICAgcmVmc1trZXldID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodm5vZGUuZGF0YS5yZWZJbkZvcikge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVmc1trZXldKSkge1xuICAgICAgICAgIHJlZnNba2V5XSA9IFtyZWZdO1xuICAgICAgICB9IGVsc2UgaWYgKHJlZnNba2V5XS5pbmRleE9mKHJlZikgPCAwKSB7XG4gICAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgICAgcmVmc1trZXldLnB1c2gocmVmKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVmc1trZXldID0gcmVmO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWaXJ0dWFsIERPTSBwYXRjaGluZyBhbGdvcml0aG0gYmFzZWQgb24gU25hYmJkb20gYnlcbiAgICogU2ltb24gRnJpaXMgVmluZHVtIChAcGFsZGVwaW5kKVxuICAgKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL3BhbGRlcGluZC9zbmFiYmRvbS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gICAqXG4gICAqIG1vZGlmaWVkIGJ5IEV2YW4gWW91IChAeXl4OTkwODAzKVxuICAgKlxuICAgKiBOb3QgdHlwZS1jaGVja2luZyB0aGlzIGJlY2F1c2UgdGhpcyBmaWxlIGlzIHBlcmYtY3JpdGljYWwgYW5kIHRoZSBjb3N0XG4gICAqIG9mIG1ha2luZyBmbG93IHVuZGVyc3RhbmQgaXQgaXMgbm90IHdvcnRoIGl0LlxuICAgKi9cblxuICB2YXIgZW1wdHlOb2RlID0gbmV3IFZOb2RlKCcnLCB7fSwgW10pO1xuXG4gIHZhciBob29rcyA9IFsnY3JlYXRlJywgJ2FjdGl2YXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveSddO1xuXG4gIGZ1bmN0aW9uIHNhbWVWbm9kZSAoYSwgYikge1xuICAgIHJldHVybiAoXG4gICAgICBhLmtleSA9PT0gYi5rZXkgJiYgKFxuICAgICAgICAoXG4gICAgICAgICAgYS50YWcgPT09IGIudGFnICYmXG4gICAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgICAgaXNEZWYoYS5kYXRhKSA9PT0gaXNEZWYoYi5kYXRhKSAmJlxuICAgICAgICAgIHNhbWVJbnB1dFR5cGUoYSwgYilcbiAgICAgICAgKSB8fCAoXG4gICAgICAgICAgaXNUcnVlKGEuaXNBc3luY1BsYWNlaG9sZGVyKSAmJlxuICAgICAgICAgIGEuYXN5bmNGYWN0b3J5ID09PSBiLmFzeW5jRmFjdG9yeSAmJlxuICAgICAgICAgIGlzVW5kZWYoYi5hc3luY0ZhY3RvcnkuZXJyb3IpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBmdW5jdGlvbiBzYW1lSW5wdXRUeXBlIChhLCBiKSB7XG4gICAgaWYgKGEudGFnICE9PSAnaW5wdXQnKSB7IHJldHVybiB0cnVlIH1cbiAgICB2YXIgaTtcbiAgICB2YXIgdHlwZUEgPSBpc0RlZihpID0gYS5kYXRhKSAmJiBpc0RlZihpID0gaS5hdHRycykgJiYgaS50eXBlO1xuICAgIHZhciB0eXBlQiA9IGlzRGVmKGkgPSBiLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gICAgcmV0dXJuIHR5cGVBID09PSB0eXBlQiB8fCBpc1RleHRJbnB1dFR5cGUodHlwZUEpICYmIGlzVGV4dElucHV0VHlwZSh0eXBlQilcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUtleVRvT2xkSWR4IChjaGlsZHJlbiwgYmVnaW5JZHgsIGVuZElkeCkge1xuICAgIHZhciBpLCBrZXk7XG4gICAgdmFyIG1hcCA9IHt9O1xuICAgIGZvciAoaSA9IGJlZ2luSWR4OyBpIDw9IGVuZElkeDsgKytpKSB7XG4gICAgICBrZXkgPSBjaGlsZHJlbltpXS5rZXk7XG4gICAgICBpZiAoaXNEZWYoa2V5KSkgeyBtYXBba2V5XSA9IGk7IH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcFxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGF0Y2hGdW5jdGlvbiAoYmFja2VuZCkge1xuICAgIHZhciBpLCBqO1xuICAgIHZhciBjYnMgPSB7fTtcblxuICAgIHZhciBtb2R1bGVzID0gYmFja2VuZC5tb2R1bGVzO1xuICAgIHZhciBub2RlT3BzID0gYmFja2VuZC5ub2RlT3BzO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjYnNbaG9va3NbaV1dID0gW107XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbW9kdWxlcy5sZW5ndGg7ICsraikge1xuICAgICAgICBpZiAoaXNEZWYobW9kdWxlc1tqXVtob29rc1tpXV0pKSB7XG4gICAgICAgICAgY2JzW2hvb2tzW2ldXS5wdXNoKG1vZHVsZXNbal1baG9va3NbaV1dKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVtcHR5Tm9kZUF0IChlbG0pIHtcbiAgICAgIHJldHVybiBuZXcgVk5vZGUobm9kZU9wcy50YWdOYW1lKGVsbSkudG9Mb3dlckNhc2UoKSwge30sIFtdLCB1bmRlZmluZWQsIGVsbSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVSbUNiIChjaGlsZEVsbSwgbGlzdGVuZXJzKSB7XG4gICAgICBmdW5jdGlvbiByZW1vdmUkJDEgKCkge1xuICAgICAgICBpZiAoLS1yZW1vdmUkJDEubGlzdGVuZXJzID09PSAwKSB7XG4gICAgICAgICAgcmVtb3ZlTm9kZShjaGlsZEVsbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlbW92ZSQkMS5saXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gICAgICByZXR1cm4gcmVtb3ZlJCQxXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlTm9kZSAoZWwpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBub2RlT3BzLnBhcmVudE5vZGUoZWwpO1xuICAgICAgLy8gZWxlbWVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBkdWUgdG8gdi1odG1sIC8gdi10ZXh0XG4gICAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgICBub2RlT3BzLnJlbW92ZUNoaWxkKHBhcmVudCwgZWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQkJDEgKHZub2RlLCBpblZQcmUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICFpblZQcmUgJiZcbiAgICAgICAgIXZub2RlLm5zICYmXG4gICAgICAgICEoXG4gICAgICAgICAgY29uZmlnLmlnbm9yZWRFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgICBjb25maWcuaWdub3JlZEVsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKGlnbm9yZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKGlnbm9yZSlcbiAgICAgICAgICAgICAgPyBpZ25vcmUudGVzdCh2bm9kZS50YWcpXG4gICAgICAgICAgICAgIDogaWdub3JlID09PSB2bm9kZS50YWdcbiAgICAgICAgICB9KVxuICAgICAgICApICYmXG4gICAgICAgIGNvbmZpZy5pc1Vua25vd25FbGVtZW50KHZub2RlLnRhZylcbiAgICAgIClcbiAgICB9XG5cbiAgICB2YXIgY3JlYXRpbmdFbG1JblZQcmUgPSAwO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRWxtIChcbiAgICAgIHZub2RlLFxuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAgICAgcGFyZW50RWxtLFxuICAgICAgcmVmRWxtLFxuICAgICAgbmVzdGVkLFxuICAgICAgb3duZXJBcnJheSxcbiAgICAgIGluZGV4XG4gICAgKSB7XG4gICAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgICAvLyBUaGlzIHZub2RlIHdhcyB1c2VkIGluIGEgcHJldmlvdXMgcmVuZGVyIVxuICAgICAgICAvLyBub3cgaXQncyB1c2VkIGFzIGEgbmV3IG5vZGUsIG92ZXJ3cml0aW5nIGl0cyBlbG0gd291bGQgY2F1c2VcbiAgICAgICAgLy8gcG90ZW50aWFsIHBhdGNoIGVycm9ycyBkb3duIHRoZSByb2FkIHdoZW4gaXQncyB1c2VkIGFzIGFuIGluc2VydGlvblxuICAgICAgICAvLyByZWZlcmVuY2Ugbm9kZS4gSW5zdGVhZCwgd2UgY2xvbmUgdGhlIG5vZGUgb24tZGVtYW5kIGJlZm9yZSBjcmVhdGluZ1xuICAgICAgICAvLyBhc3NvY2lhdGVkIERPTSBlbGVtZW50IGZvciBpdC5cbiAgICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgICAgfVxuXG4gICAgICB2bm9kZS5pc1Jvb3RJbnNlcnQgPSAhbmVzdGVkOyAvLyBmb3IgdHJhbnNpdGlvbiBlbnRlciBjaGVja1xuICAgICAgaWYgKGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgdmFyIHRhZyA9IHZub2RlLnRhZztcbiAgICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnByZSkge1xuICAgICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzVW5rbm93bkVsZW1lbnQkJDEodm5vZGUsIGNyZWF0aW5nRWxtSW5WUHJlKSkge1xuICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgJ1Vua25vd24gY3VzdG9tIGVsZW1lbnQ6IDwnICsgdGFnICsgJz4gLSBkaWQgeW91ICcgK1xuICAgICAgICAgICAgICAncmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBjb3JyZWN0bHk/IEZvciByZWN1cnNpdmUgY29tcG9uZW50cywgJyArXG4gICAgICAgICAgICAgICdtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGUgXCJuYW1lXCIgb3B0aW9uLicsXG4gICAgICAgICAgICAgIHZub2RlLmNvbnRleHRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdm5vZGUuZWxtID0gdm5vZGUubnNcbiAgICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4gICAgICAgICAgOiBub2RlT3BzLmNyZWF0ZUVsZW1lbnQodGFnLCB2bm9kZSk7XG4gICAgICAgIHNldFNjb3BlKHZub2RlKTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAge1xuICAgICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnByZSkge1xuICAgICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNUcnVlKHZub2RlLmlzQ29tbWVudCkpIHtcbiAgICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVDb21tZW50KHZub2RlLnRleHQpO1xuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpO1xuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50ICh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgICAgdmFyIGkgPSB2bm9kZS5kYXRhO1xuICAgICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICAgIHZhciBpc1JlYWN0aXZhdGVkID0gaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGkua2VlcEFsaXZlO1xuICAgICAgICBpZiAoaXNEZWYoaSA9IGkuaG9vaykgJiYgaXNEZWYoaSA9IGkuaW5pdCkpIHtcbiAgICAgICAgICBpKHZub2RlLCBmYWxzZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFmdGVyIGNhbGxpbmcgdGhlIGluaXQgaG9vaywgaWYgdGhlIHZub2RlIGlzIGEgY2hpbGQgY29tcG9uZW50XG4gICAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5kIG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgICAvLyBjb21wb25lbnQgYWxzbyBoYXMgc2V0IHRoZSBwbGFjZWhvbGRlciB2bm9kZSdzIGVsbS5cbiAgICAgICAgLy8gaW4gdGhhdCBjYXNlIHdlIGNhbiBqdXN0IHJldHVybiB0aGUgZWxlbWVudCBhbmQgYmUgZG9uZS5cbiAgICAgICAgaWYgKGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICAgIGluaXRDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgICAgIGlmIChpc1RydWUoaXNSZWFjdGl2YXRlZCkpIHtcbiAgICAgICAgICAgIHJlYWN0aXZhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdENvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgICAgaWYgKGlzRGVmKHZub2RlLmRhdGEucGVuZGluZ0luc2VydCkpIHtcbiAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2guYXBwbHkoaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpO1xuICAgICAgICB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQgPSBudWxsO1xuICAgICAgfVxuICAgICAgdm5vZGUuZWxtID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuJGVsO1xuICAgICAgaWYgKGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZW1wdHkgY29tcG9uZW50IHJvb3QuXG4gICAgICAgIC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1NSlcbiAgICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBpbnNlcnQgaG9va1xuICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICAgIHZhciBpO1xuICAgICAgLy8gaGFjayBmb3IgIzQzMzk6IGEgcmVhY3RpdmF0ZWQgY29tcG9uZW50IHdpdGggaW5uZXIgdHJhbnNpdGlvblxuICAgICAgLy8gZG9lcyBub3QgdHJpZ2dlciBiZWNhdXNlIHRoZSBpbm5lciBub2RlJ3MgY3JlYXRlZCBob29rcyBhcmUgbm90IGNhbGxlZFxuICAgICAgLy8gYWdhaW4uIEl0J3Mgbm90IGlkZWFsIHRvIGludm9sdmUgbW9kdWxlLXNwZWNpZmljIGxvZ2ljIGluIGhlcmUgYnV0XG4gICAgICAvLyB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIGl0LlxuICAgICAgdmFyIGlubmVyTm9kZSA9IHZub2RlO1xuICAgICAgd2hpbGUgKGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICBpbm5lck5vZGUgPSBpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgICBpZiAoaXNEZWYoaSA9IGlubmVyTm9kZS5kYXRhKSAmJiBpc0RlZihpID0gaS50cmFuc2l0aW9uKSkge1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuYWN0aXZhdGUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGNicy5hY3RpdmF0ZVtpXShlbXB0eU5vZGUsIGlubmVyTm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKGlubmVyTm9kZSk7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gdW5saWtlIGEgbmV3bHkgY3JlYXRlZCBjb21wb25lbnQsXG4gICAgICAvLyBhIHJlYWN0aXZhdGVkIGtlZXAtYWxpdmUgY29tcG9uZW50IGRvZXNuJ3QgaW5zZXJ0IGl0c2VsZlxuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc2VydCAocGFyZW50LCBlbG0sIHJlZiQkMSkge1xuICAgICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgICAgaWYgKGlzRGVmKHJlZiQkMSkpIHtcbiAgICAgICAgICBpZiAobm9kZU9wcy5wYXJlbnROb2RlKHJlZiQkMSkgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50LCBlbG0sIHJlZiQkMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQocGFyZW50LCBlbG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRyZW4gKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAge1xuICAgICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGNyZWF0ZUVsbShjaGlsZHJlbltpXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5lbG0sIG51bGwsIHRydWUsIGNoaWxkcmVuLCBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1ByaW1pdGl2ZSh2bm9kZS50ZXh0KSkge1xuICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHZub2RlLmVsbSwgbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcodm5vZGUudGV4dCkpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1BhdGNoYWJsZSAodm5vZGUpIHtcbiAgICAgIHdoaWxlICh2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICB2bm9kZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0RlZih2bm9kZS50YWcpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52b2tlQ3JlYXRlSG9va3MgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICBjYnMuY3JlYXRlW2kkMV0oZW1wdHlOb2RlLCB2bm9kZSk7XG4gICAgICB9XG4gICAgICBpID0gdm5vZGUuZGF0YS5ob29rOyAvLyBSZXVzZSB2YXJpYWJsZVxuICAgICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICAgIGlmIChpc0RlZihpLmNyZWF0ZSkpIHsgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7IH1cbiAgICAgICAgaWYgKGlzRGVmKGkuaW5zZXJ0KSkgeyBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7IH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgc2NvcGUgaWQgYXR0cmlidXRlIGZvciBzY29wZWQgQ1NTLlxuICAgIC8vIHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYSBzcGVjaWFsIGNhc2UgdG8gYXZvaWQgdGhlIG92ZXJoZWFkXG4gICAgLy8gb2YgZ29pbmcgdGhyb3VnaCB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBwYXRjaGluZyBwcm9jZXNzLlxuICAgIGZ1bmN0aW9uIHNldFNjb3BlICh2bm9kZSkge1xuICAgICAgdmFyIGk7XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmZuU2NvcGVJZCkpIHtcbiAgICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYW5jZXN0b3IgPSB2bm9kZTtcbiAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgaWYgKGlzRGVmKGkgPSBhbmNlc3Rvci5jb250ZXh0KSAmJiBpc0RlZihpID0gaS4kb3B0aW9ucy5fc2NvcGVJZCkpIHtcbiAgICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gZm9yIHNsb3QgY29udGVudCB0aGV5IHNob3VsZCBhbHNvIGdldCB0aGUgc2NvcGVJZCBmcm9tIHRoZSBob3N0IGluc3RhbmNlLlxuICAgICAgaWYgKGlzRGVmKGkgPSBhY3RpdmVJbnN0YW5jZSkgJiZcbiAgICAgICAgaSAhPT0gdm5vZGUuY29udGV4dCAmJlxuICAgICAgICBpICE9PSB2bm9kZS5mbkNvbnRleHQgJiZcbiAgICAgICAgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpXG4gICAgICApIHtcbiAgICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVm5vZGVzIChwYXJlbnRFbG0sIHJlZkVsbSwgdm5vZGVzLCBzdGFydElkeCwgZW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgICAgY3JlYXRlRWxtKHZub2Rlc1tzdGFydElkeF0sIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0sIGZhbHNlLCB2bm9kZXMsIHN0YXJ0SWR4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZva2VEZXN0cm95SG9vayAodm5vZGUpIHtcbiAgICAgIHZhciBpLCBqO1xuICAgICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5kZXN0cm95KSkgeyBpKHZub2RlKTsgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmRlc3Ryb3kubGVuZ3RoOyArK2kpIHsgY2JzLmRlc3Ryb3lbaV0odm5vZGUpOyB9XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayh2bm9kZS5jaGlsZHJlbltqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVWbm9kZXMgKHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCkge1xuICAgICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgICB2YXIgY2ggPSB2bm9kZXNbc3RhcnRJZHhdO1xuICAgICAgICBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgICAgaWYgKGlzRGVmKGNoLnRhZykpIHtcbiAgICAgICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soY2gpO1xuICAgICAgICAgICAgaW52b2tlRGVzdHJveUhvb2soY2gpO1xuICAgICAgICAgIH0gZWxzZSB7IC8vIFRleHQgbm9kZVxuICAgICAgICAgICAgcmVtb3ZlTm9kZShjaC5lbG0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2sgKHZub2RlLCBybSkge1xuICAgICAgaWYgKGlzRGVmKHJtKSB8fCBpc0RlZih2bm9kZS5kYXRhKSkge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IGNicy5yZW1vdmUubGVuZ3RoICsgMTtcbiAgICAgICAgaWYgKGlzRGVmKHJtKSkge1xuICAgICAgICAgIC8vIHdlIGhhdmUgYSByZWN1cnNpdmVseSBwYXNzZWQgZG93biBybSBjYWxsYmFja1xuICAgICAgICAgIC8vIGluY3JlYXNlIHRoZSBsaXN0ZW5lcnMgY291bnRcbiAgICAgICAgICBybS5saXN0ZW5lcnMgKz0gbGlzdGVuZXJzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRpcmVjdGx5IHJlbW92aW5nXG4gICAgICAgICAgcm0gPSBjcmVhdGVSbUNiKHZub2RlLmVsbSwgbGlzdGVuZXJzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWN1cnNpdmVseSBpbnZva2UgaG9va3Mgb24gY2hpbGQgY29tcG9uZW50IHJvb3Qgbm9kZVxuICAgICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpc0RlZihpID0gaS5fdm5vZGUpICYmIGlzRGVmKGkuZGF0YSkpIHtcbiAgICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGksIHJtKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnJlbW92ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGNicy5yZW1vdmVbaV0odm5vZGUsIHJtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkucmVtb3ZlKSkge1xuICAgICAgICAgIGkodm5vZGUsIHJtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBybSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVOb2RlKHZub2RlLmVsbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4gKHBhcmVudEVsbSwgb2xkQ2gsIG5ld0NoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpIHtcbiAgICAgIHZhciBvbGRTdGFydElkeCA9IDA7XG4gICAgICB2YXIgbmV3U3RhcnRJZHggPSAwO1xuICAgICAgdmFyIG9sZEVuZElkeCA9IG9sZENoLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgb2xkU3RhcnRWbm9kZSA9IG9sZENoWzBdO1xuICAgICAgdmFyIG9sZEVuZFZub2RlID0gb2xkQ2hbb2xkRW5kSWR4XTtcbiAgICAgIHZhciBuZXdFbmRJZHggPSBuZXdDaC5sZW5ndGggLSAxO1xuICAgICAgdmFyIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFswXTtcbiAgICAgIHZhciBuZXdFbmRWbm9kZSA9IG5ld0NoW25ld0VuZElkeF07XG4gICAgICB2YXIgb2xkS2V5VG9JZHgsIGlkeEluT2xkLCB2bm9kZVRvTW92ZSwgcmVmRWxtO1xuXG4gICAgICAvLyByZW1vdmVPbmx5IGlzIGEgc3BlY2lhbCBmbGFnIHVzZWQgb25seSBieSA8dHJhbnNpdGlvbi1ncm91cD5cbiAgICAgIC8vIHRvIGVuc3VyZSByZW1vdmVkIGVsZW1lbnRzIHN0YXkgaW4gY29ycmVjdCByZWxhdGl2ZSBwb3NpdGlvbnNcbiAgICAgIC8vIGR1cmluZyBsZWF2aW5nIHRyYW5zaXRpb25zXG4gICAgICB2YXIgY2FuTW92ZSA9ICFyZW1vdmVPbmx5O1xuXG4gICAgICB7XG4gICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhuZXdDaCk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChvbGRTdGFydElkeCA8PSBvbGRFbmRJZHggJiYgbmV3U3RhcnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICAgIGlmIChpc1VuZGVmKG9sZFN0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdOyAvLyBWbm9kZSBoYXMgYmVlbiBtb3ZlZCBsZWZ0XG4gICAgICAgIH0gZWxzZSBpZiAoaXNVbmRlZihvbGRFbmRWbm9kZSkpIHtcbiAgICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld0VuZElkeCk7XG4gICAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlKSkgeyAvLyBWbm9kZSBtb3ZlZCByaWdodFxuICAgICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld0VuZElkeCk7XG4gICAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBub2RlT3BzLm5leHRTaWJsaW5nKG9sZEVuZFZub2RlLmVsbSkpO1xuICAgICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgICBuZXdFbmRWbm9kZSA9IG5ld0NoWy0tbmV3RW5kSWR4XTtcbiAgICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIGxlZnRcbiAgICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZEVuZFZub2RlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNVbmRlZihvbGRLZXlUb0lkeCkpIHsgb2xkS2V5VG9JZHggPSBjcmVhdGVLZXlUb09sZElkeChvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7IH1cbiAgICAgICAgICBpZHhJbk9sZCA9IGlzRGVmKG5ld1N0YXJ0Vm5vZGUua2V5KVxuICAgICAgICAgICAgPyBvbGRLZXlUb0lkeFtuZXdTdGFydFZub2RlLmtleV1cbiAgICAgICAgICAgIDogZmluZElkeEluT2xkKG5ld1N0YXJ0Vm5vZGUsIG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICAgICAgICBpZiAoaXNVbmRlZihpZHhJbk9sZCkpIHsgLy8gTmV3IGVsZW1lbnRcbiAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2bm9kZVRvTW92ZSA9IG9sZENoW2lkeEluT2xkXTtcbiAgICAgICAgICAgIGlmIChzYW1lVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICAgIHBhdGNoVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICAgICAgb2xkQ2hbaWR4SW5PbGRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgdm5vZGVUb01vdmUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBzYW1lIGtleSBidXQgZGlmZmVyZW50IGVsZW1lbnQuIHRyZWF0IGFzIG5ldyBlbGVtZW50XG4gICAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvbGRTdGFydElkeCA+IG9sZEVuZElkeCkge1xuICAgICAgICByZWZFbG0gPSBpc1VuZGVmKG5ld0NoW25ld0VuZElkeCArIDFdKSA/IG51bGwgOiBuZXdDaFtuZXdFbmRJZHggKyAxXS5lbG07XG4gICAgICAgIGFkZFZub2RlcyhwYXJlbnRFbG0sIHJlZkVsbSwgbmV3Q2gsIG5ld1N0YXJ0SWR4LCBuZXdFbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2UgaWYgKG5ld1N0YXJ0SWR4ID4gbmV3RW5kSWR4KSB7XG4gICAgICAgIHJlbW92ZVZub2RlcyhvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tEdXBsaWNhdGVLZXlzIChjaGlsZHJlbikge1xuICAgICAgdmFyIHNlZW5LZXlzID0ge307XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB2bm9kZSA9IGNoaWxkcmVuW2ldO1xuICAgICAgICB2YXIga2V5ID0gdm5vZGUua2V5O1xuICAgICAgICBpZiAoaXNEZWYoa2V5KSkge1xuICAgICAgICAgIGlmIChzZWVuS2V5c1trZXldKSB7XG4gICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAoXCJEdXBsaWNhdGUga2V5cyBkZXRlY3RlZDogJ1wiICsga2V5ICsgXCInLiBUaGlzIG1heSBjYXVzZSBhbiB1cGRhdGUgZXJyb3IuXCIpLFxuICAgICAgICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWVuS2V5c1trZXldID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kSWR4SW5PbGQgKG5vZGUsIG9sZENoLCBzdGFydCwgZW5kKSB7XG4gICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICB2YXIgYyA9IG9sZENoW2ldO1xuICAgICAgICBpZiAoaXNEZWYoYykgJiYgc2FtZVZub2RlKG5vZGUsIGMpKSB7IHJldHVybiBpIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXRjaFZub2RlIChcbiAgICAgIG9sZFZub2RlLFxuICAgICAgdm5vZGUsXG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgICBvd25lckFycmF5LFxuICAgICAgaW5kZXgsXG4gICAgICByZW1vdmVPbmx5XG4gICAgKSB7XG4gICAgICBpZiAob2xkVm5vZGUgPT09IHZub2RlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgICAvLyBjbG9uZSByZXVzZWQgdm5vZGVcbiAgICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxtID0gdm5vZGUuZWxtID0gb2xkVm5vZGUuZWxtO1xuXG4gICAgICBpZiAoaXNUcnVlKG9sZFZub2RlLmlzQXN5bmNQbGFjZWhvbGRlcikpIHtcbiAgICAgICAgaWYgKGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICBoeWRyYXRlKG9sZFZub2RlLmVsbSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gcmV1c2UgZWxlbWVudCBmb3Igc3RhdGljIHRyZWVzLlxuICAgICAgLy8gbm90ZSB3ZSBvbmx5IGRvIHRoaXMgaWYgdGhlIHZub2RlIGlzIGNsb25lZCAtXG4gICAgICAvLyBpZiB0aGUgbmV3IG5vZGUgaXMgbm90IGNsb25lZCBpdCBtZWFucyB0aGUgcmVuZGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW5cbiAgICAgIC8vIHJlc2V0IGJ5IHRoZSBob3QtcmVsb2FkLWFwaSBhbmQgd2UgbmVlZCB0byBkbyBhIHByb3BlciByZS1yZW5kZXIuXG4gICAgICBpZiAoaXNUcnVlKHZub2RlLmlzU3RhdGljKSAmJlxuICAgICAgICBpc1RydWUob2xkVm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICAgIHZub2RlLmtleSA9PT0gb2xkVm5vZGUua2V5ICYmXG4gICAgICAgIChpc1RydWUodm5vZGUuaXNDbG9uZWQpIHx8IGlzVHJ1ZSh2bm9kZS5pc09uY2UpKVxuICAgICAgKSB7XG4gICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB2YXIgaTtcbiAgICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wcmVwYXRjaCkpIHtcbiAgICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb2xkQ2ggPSBvbGRWbm9kZS5jaGlsZHJlbjtcbiAgICAgIHZhciBjaCA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnVwZGF0ZS5sZW5ndGg7ICsraSkgeyBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7IH1cbiAgICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnVwZGF0ZSkpIHsgaShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgICB9XG4gICAgICBpZiAoaXNVbmRlZih2bm9kZS50ZXh0KSkge1xuICAgICAgICBpZiAoaXNEZWYob2xkQ2gpICYmIGlzRGVmKGNoKSkge1xuICAgICAgICAgIGlmIChvbGRDaCAhPT0gY2gpIHsgdXBkYXRlQ2hpbGRyZW4oZWxtLCBvbGRDaCwgY2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSk7IH1cbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMoY2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNEZWYob2xkVm5vZGUudGV4dCkpIHsgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sICcnKTsgfVxuICAgICAgICAgIGFkZFZub2RlcyhlbG0sIG51bGwsIGNoLCAwLCBjaC5sZW5ndGggLSAxLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZENoKSkge1xuICAgICAgICAgIHJlbW92ZVZub2RlcyhvbGRDaCwgMCwgb2xkQ2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGV4dCkpIHtcbiAgICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9sZFZub2RlLnRleHQgIT09IHZub2RlLnRleHQpIHtcbiAgICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sIHZub2RlLnRleHQpO1xuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wb3N0cGF0Y2gpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sgKHZub2RlLCBxdWV1ZSwgaW5pdGlhbCkge1xuICAgICAgLy8gZGVsYXkgaW5zZXJ0IGhvb2tzIGZvciBjb21wb25lbnQgcm9vdCBub2RlcywgaW52b2tlIHRoZW0gYWZ0ZXIgdGhlXG4gICAgICAvLyBlbGVtZW50IGlzIHJlYWxseSBpbnNlcnRlZFxuICAgICAgaWYgKGlzVHJ1ZShpbml0aWFsKSAmJiBpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICAgIHZub2RlLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQgPSBxdWV1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBxdWV1ZVtpXS5kYXRhLmhvb2suaW5zZXJ0KHF1ZXVlW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBoeWRyYXRpb25CYWlsZWQgPSBmYWxzZTtcbiAgICAvLyBsaXN0IG9mIG1vZHVsZXMgdGhhdCBjYW4gc2tpcCBjcmVhdGUgaG9vayBkdXJpbmcgaHlkcmF0aW9uIGJlY2F1c2UgdGhleVxuICAgIC8vIGFyZSBhbHJlYWR5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQgb3IgaGFzIG5vIG5lZWQgZm9yIGluaXRpYWxpemF0aW9uXG4gICAgLy8gTm90ZTogc3R5bGUgaXMgZXhjbHVkZWQgYmVjYXVzZSBpdCByZWxpZXMgb24gaW5pdGlhbCBjbG9uZSBmb3IgZnV0dXJlXG4gICAgLy8gZGVlcCB1cGRhdGVzICgjNzA2MykuXG4gICAgdmFyIGlzUmVuZGVyZWRNb2R1bGUgPSBtYWtlTWFwKCdhdHRycyxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXknKTtcblxuICAgIC8vIE5vdGU6IHRoaXMgaXMgYSBicm93c2VyLW9ubHkgZnVuY3Rpb24gc28gd2UgY2FuIGFzc3VtZSBlbG1zIGFyZSBET00gbm9kZXMuXG4gICAgZnVuY3Rpb24gaHlkcmF0ZSAoZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpIHtcbiAgICAgIHZhciBpO1xuICAgICAgdmFyIHRhZyA9IHZub2RlLnRhZztcbiAgICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgaW5WUHJlID0gaW5WUHJlIHx8IChkYXRhICYmIGRhdGEucHJlKTtcbiAgICAgIHZub2RlLmVsbSA9IGVsbTtcblxuICAgICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpICYmIGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeSkpIHtcbiAgICAgICAgdm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIC8vIGFzc2VydCBub2RlIG1hdGNoXG4gICAgICB7XG4gICAgICAgIGlmICghYXNzZXJ0Tm9kZU1hdGNoKGVsbSwgdm5vZGUsIGluVlByZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkgeyBpKHZub2RlLCB0cnVlIC8qIGh5ZHJhdGluZyAqLyk7IH1cbiAgICAgICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkpIHtcbiAgICAgICAgICAvLyBjaGlsZCBjb21wb25lbnQuIGl0IHNob3VsZCBoYXZlIGh5ZHJhdGVkIGl0cyBvd24gdHJlZS5cbiAgICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICAgIGlmIChpc0RlZihjaGlsZHJlbikpIHtcbiAgICAgICAgICAvLyBlbXB0eSBlbGVtZW50LCBhbGxvdyBjbGllbnQgdG8gcGljayB1cCBhbmQgcG9wdWxhdGUgY2hpbGRyZW5cbiAgICAgICAgICBpZiAoIWVsbS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdi1odG1sIGFuZCBkb21Qcm9wczogaW5uZXJIVE1MXG4gICAgICAgICAgICBpZiAoaXNEZWYoaSA9IGRhdGEpICYmIGlzRGVmKGkgPSBpLmRvbVByb3BzKSAmJiBpc0RlZihpID0gaS5pbm5lckhUTUwpKSB7XG4gICAgICAgICAgICAgIGlmIChpICE9PSBlbG0uaW5uZXJIVE1MKSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgaHlkcmF0aW9uQmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzZXJ2ZXIgaW5uZXJIVE1MOiAnLCBpKTtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignY2xpZW50IGlubmVySFRNTDogJywgZWxtLmlubmVySFRNTCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBpdGVyYXRlIGFuZCBjb21wYXJlIGNoaWxkcmVuIGxpc3RzXG4gICAgICAgICAgICAgIHZhciBjaGlsZHJlbk1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdmFyIGNoaWxkTm9kZSA9IGVsbS5maXJzdENoaWxkO1xuICAgICAgICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZE5vZGUgfHwgIWh5ZHJhdGUoY2hpbGROb2RlLCBjaGlsZHJlbltpJDFdLCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkpIHtcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBpZiBjaGlsZE5vZGUgaXMgbm90IG51bGwsIGl0IG1lYW5zIHRoZSBhY3R1YWwgY2hpbGROb2RlcyBsaXN0IGlzXG4gICAgICAgICAgICAgIC8vIGxvbmdlciB0aGFuIHRoZSB2aXJ0dWFsIGNoaWxkcmVuIGxpc3QuXG4gICAgICAgICAgICAgIGlmICghY2hpbGRyZW5NYXRjaCB8fCBjaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ01pc21hdGNoaW5nIGNoaWxkTm9kZXMgdnMuIFZOb2RlczogJywgZWxtLmNoaWxkTm9kZXMsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgdmFyIGZ1bGxJbnZva2UgPSBmYWxzZTtcbiAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFpc1JlbmRlcmVkTW9kdWxlKGtleSkpIHtcbiAgICAgICAgICAgICAgZnVsbEludm9rZSA9IHRydWU7XG4gICAgICAgICAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZ1bGxJbnZva2UgJiYgZGF0YVsnY2xhc3MnXSkge1xuICAgICAgICAgICAgLy8gZW5zdXJlIGNvbGxlY3RpbmcgZGVwcyBmb3IgZGVlcCBjbGFzcyBiaW5kaW5ncyBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgICAgICAgIHRyYXZlcnNlKGRhdGFbJ2NsYXNzJ10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlbG0uZGF0YSAhPT0gdm5vZGUudGV4dCkge1xuICAgICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzc2VydE5vZGVNYXRjaCAobm9kZSwgdm5vZGUsIGluVlByZSkge1xuICAgICAgaWYgKGlzRGVmKHZub2RlLnRhZykpIHtcbiAgICAgICAgcmV0dXJuIHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHwgKFxuICAgICAgICAgICFpc1Vua25vd25FbGVtZW50JCQxKHZub2RlLCBpblZQcmUpICYmXG4gICAgICAgICAgdm5vZGUudGFnLnRvTG93ZXJDYXNlKCkgPT09IChub2RlLnRhZ05hbWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSAodm5vZGUuaXNDb21tZW50ID8gOCA6IDMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoIChvbGRWbm9kZSwgdm5vZGUsIGh5ZHJhdGluZywgcmVtb3ZlT25seSkge1xuICAgICAgaWYgKGlzVW5kZWYodm5vZGUpKSB7XG4gICAgICAgIGlmIChpc0RlZihvbGRWbm9kZSkpIHsgaW52b2tlRGVzdHJveUhvb2sob2xkVm5vZGUpOyB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB2YXIgaXNJbml0aWFsUGF0Y2ggPSBmYWxzZTtcbiAgICAgIHZhciBpbnNlcnRlZFZub2RlUXVldWUgPSBbXTtcblxuICAgICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAgIC8vIGVtcHR5IG1vdW50IChsaWtlbHkgYXMgY29tcG9uZW50KSwgY3JlYXRlIG5ldyByb290IGVsZW1lbnRcbiAgICAgICAgaXNJbml0aWFsUGF0Y2ggPSB0cnVlO1xuICAgICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXNSZWFsRWxlbWVudCA9IGlzRGVmKG9sZFZub2RlLm5vZGVUeXBlKTtcbiAgICAgICAgaWYgKCFpc1JlYWxFbGVtZW50ICYmIHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgICAgLy8gcGF0Y2ggZXhpc3Rpbmcgcm9vdCBub2RlXG4gICAgICAgICAgcGF0Y2hWbm9kZShvbGRWbm9kZSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbnVsbCwgbnVsbCwgcmVtb3ZlT25seSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzUmVhbEVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIG1vdW50aW5nIHRvIGEgcmVhbCBlbGVtZW50XG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJlZCBjb250ZW50IGFuZCBpZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgICAgLy8gYSBzdWNjZXNzZnVsIGh5ZHJhdGlvbi5cbiAgICAgICAgICAgIGlmIChvbGRWbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBvbGRWbm9kZS5oYXNBdHRyaWJ1dGUoU1NSX0FUVFIpKSB7XG4gICAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICAgIGh5ZHJhdGluZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNUcnVlKGh5ZHJhdGluZykpIHtcbiAgICAgICAgICAgICAgaWYgKGh5ZHJhdGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpKSB7XG4gICAgICAgICAgICAgICAgaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGVcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICAgJ1RoZSBjbGllbnQtc2lkZSByZW5kZXJlZCB2aXJ0dWFsIERPTSB0cmVlIGlzIG5vdCBtYXRjaGluZyAnICtcbiAgICAgICAgICAgICAgICAgICdzZXJ2ZXItcmVuZGVyZWQgY29udGVudC4gVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IGluY29ycmVjdCAnICtcbiAgICAgICAgICAgICAgICAgICdIVE1MIG1hcmt1cCwgZm9yIGV4YW1wbGUgbmVzdGluZyBibG9jay1sZXZlbCBlbGVtZW50cyBpbnNpZGUgJyArXG4gICAgICAgICAgICAgICAgICAnPHA+LCBvciBtaXNzaW5nIDx0Ym9keT4uIEJhaWxpbmcgaHlkcmF0aW9uIGFuZCBwZXJmb3JtaW5nICcgK1xuICAgICAgICAgICAgICAgICAgJ2Z1bGwgY2xpZW50LXNpZGUgcmVuZGVyLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlaXRoZXIgbm90IHNlcnZlci1yZW5kZXJlZCwgb3IgaHlkcmF0aW9uIGZhaWxlZC5cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBub2RlIGFuZCByZXBsYWNlIGl0XG4gICAgICAgICAgICBvbGRWbm9kZSA9IGVtcHR5Tm9kZUF0KG9sZFZub2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyByZXBsYWNpbmcgZXhpc3RpbmcgZWxlbWVudFxuICAgICAgICAgIHZhciBvbGRFbG0gPSBvbGRWbm9kZS5lbG07XG4gICAgICAgICAgdmFyIHBhcmVudEVsbSA9IG5vZGVPcHMucGFyZW50Tm9kZShvbGRFbG0pO1xuXG4gICAgICAgICAgLy8gY3JlYXRlIG5ldyBub2RlXG4gICAgICAgICAgY3JlYXRlRWxtKFxuICAgICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgICAgICAgICAvLyBleHRyZW1lbHkgcmFyZSBlZGdlIGNhc2U6IGRvIG5vdCBpbnNlcnQgaWYgb2xkIGVsZW1lbnQgaXMgaW4gYVxuICAgICAgICAgICAgLy8gbGVhdmluZyB0cmFuc2l0aW9uLiBPbmx5IGhhcHBlbnMgd2hlbiBjb21iaW5pbmcgdHJhbnNpdGlvbiArXG4gICAgICAgICAgICAvLyBrZWVwLWFsaXZlICsgSE9Dcy4gKCM0NTkwKVxuICAgICAgICAgICAgb2xkRWxtLl9sZWF2ZUNiID8gbnVsbCA6IHBhcmVudEVsbSxcbiAgICAgICAgICAgIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRWxtKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyB1cGRhdGUgcGFyZW50IHBsYWNlaG9sZGVyIG5vZGUgZWxlbWVudCwgcmVjdXJzaXZlbHlcbiAgICAgICAgICBpZiAoaXNEZWYodm5vZGUucGFyZW50KSkge1xuICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGUucGFyZW50O1xuICAgICAgICAgICAgdmFyIHBhdGNoYWJsZSA9IGlzUGF0Y2hhYmxlKHZub2RlKTtcbiAgICAgICAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgY2JzLmRlc3Ryb3lbaV0oYW5jZXN0b3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcbiAgICAgICAgICAgICAgaWYgKHBhdGNoYWJsZSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgYW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAjNjUxM1xuICAgICAgICAgICAgICAgIC8vIGludm9rZSBpbnNlcnQgaG9va3MgdGhhdCBtYXkgaGF2ZSBiZWVuIG1lcmdlZCBieSBjcmVhdGUgaG9va3MuXG4gICAgICAgICAgICAgICAgLy8gZS5nLiBmb3IgZGlyZWN0aXZlcyB0aGF0IHVzZXMgdGhlIFwiaW5zZXJ0ZWRcIiBob29rLlxuICAgICAgICAgICAgICAgIHZhciBpbnNlcnQgPSBhbmNlc3Rvci5kYXRhLmhvb2suaW5zZXJ0O1xuICAgICAgICAgICAgICAgIGlmIChpbnNlcnQubWVyZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAvLyBzdGFydCBhdCBpbmRleCAxIHRvIGF2b2lkIHJlLWludm9raW5nIGNvbXBvbmVudCBtb3VudGVkIGhvb2tcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkkMiA9IDE7IGkkMiA8IGluc2VydC5mbnMubGVuZ3RoOyBpJDIrKykge1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnQuZm5zW2kkMl0oKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJSZWYoYW5jZXN0b3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGRlc3Ryb3kgb2xkIG5vZGVcbiAgICAgICAgICBpZiAoaXNEZWYocGFyZW50RWxtKSkge1xuICAgICAgICAgICAgcmVtb3ZlVm5vZGVzKFtvbGRWbm9kZV0sIDAsIDApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGFnKSkge1xuICAgICAgICAgICAgaW52b2tlRGVzdHJveUhvb2sob2xkVm5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIGlzSW5pdGlhbFBhdGNoKTtcbiAgICAgIHJldHVybiB2bm9kZS5lbG1cbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgZGlyZWN0aXZlcyA9IHtcbiAgICBjcmVhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gICAgdXBkYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIHVuYmluZERpcmVjdGl2ZXMgKHZub2RlKSB7XG4gICAgICB1cGRhdGVEaXJlY3RpdmVzKHZub2RlLCBlbXB0eU5vZGUpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiB1cGRhdGVEaXJlY3RpdmVzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICBpZiAob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzIHx8IHZub2RlLmRhdGEuZGlyZWN0aXZlcykge1xuICAgICAgX3VwZGF0ZShvbGRWbm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF91cGRhdGUgKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBpc0NyZWF0ZSA9IG9sZFZub2RlID09PSBlbXB0eU5vZGU7XG4gICAgdmFyIGlzRGVzdHJveSA9IHZub2RlID09PSBlbXB0eU5vZGU7XG4gICAgdmFyIG9sZERpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzJDEob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzLCBvbGRWbm9kZS5jb250ZXh0KTtcbiAgICB2YXIgbmV3RGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSh2bm9kZS5kYXRhLmRpcmVjdGl2ZXMsIHZub2RlLmNvbnRleHQpO1xuXG4gICAgdmFyIGRpcnNXaXRoSW5zZXJ0ID0gW107XG4gICAgdmFyIGRpcnNXaXRoUG9zdHBhdGNoID0gW107XG5cbiAgICB2YXIga2V5LCBvbGREaXIsIGRpcjtcbiAgICBmb3IgKGtleSBpbiBuZXdEaXJzKSB7XG4gICAgICBvbGREaXIgPSBvbGREaXJzW2tleV07XG4gICAgICBkaXIgPSBuZXdEaXJzW2tleV07XG4gICAgICBpZiAoIW9sZERpcikge1xuICAgICAgICAvLyBuZXcgZGlyZWN0aXZlLCBiaW5kXG4gICAgICAgIGNhbGxIb29rJDEoZGlyLCAnYmluZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuaW5zZXJ0ZWQpIHtcbiAgICAgICAgICBkaXJzV2l0aEluc2VydC5wdXNoKGRpcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGV4aXN0aW5nIGRpcmVjdGl2ZSwgdXBkYXRlXG4gICAgICAgIGRpci5vbGRWYWx1ZSA9IG9sZERpci52YWx1ZTtcbiAgICAgICAgZGlyLm9sZEFyZyA9IG9sZERpci5hcmc7XG4gICAgICAgIGNhbGxIb29rJDEoZGlyLCAndXBkYXRlJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgICAgaWYgKGRpci5kZWYgJiYgZGlyLmRlZi5jb21wb25lbnRVcGRhdGVkKSB7XG4gICAgICAgICAgZGlyc1dpdGhQb3N0cGF0Y2gucHVzaChkaXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aCkge1xuICAgICAgdmFyIGNhbGxJbnNlcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhJbnNlcnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoSW5zZXJ0W2ldLCAnaW5zZXJ0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKGlzQ3JlYXRlKSB7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAnaW5zZXJ0JywgY2FsbEluc2VydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsSW5zZXJ0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aCkge1xuICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdwb3N0cGF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoUG9zdHBhdGNoW2ldLCAnY29tcG9uZW50VXBkYXRlZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghaXNDcmVhdGUpIHtcbiAgICAgIGZvciAoa2V5IGluIG9sZERpcnMpIHtcbiAgICAgICAgaWYgKCFuZXdEaXJzW2tleV0pIHtcbiAgICAgICAgICAvLyBubyBsb25nZXIgcHJlc2VudCwgdW5iaW5kXG4gICAgICAgICAgY2FsbEhvb2skMShvbGREaXJzW2tleV0sICd1bmJpbmQnLCBvbGRWbm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZW1wdHlNb2RpZmllcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSAoXG4gICAgZGlycyxcbiAgICB2bVxuICApIHtcbiAgICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBpZiAoIWRpcnMpIHtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgICB2YXIgaSwgZGlyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBkaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkaXIgPSBkaXJzW2ldO1xuICAgICAgaWYgKCFkaXIubW9kaWZpZXJzKSB7XG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICBkaXIubW9kaWZpZXJzID0gZW1wdHlNb2RpZmllcnM7XG4gICAgICB9XG4gICAgICByZXNbZ2V0UmF3RGlyTmFtZShkaXIpXSA9IGRpcjtcbiAgICAgIGRpci5kZWYgPSByZXNvbHZlQXNzZXQodm0uJG9wdGlvbnMsICdkaXJlY3RpdmVzJywgZGlyLm5hbWUsIHRydWUpO1xuICAgIH1cbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBmdW5jdGlvbiBnZXRSYXdEaXJOYW1lIChkaXIpIHtcbiAgICByZXR1cm4gZGlyLnJhd05hbWUgfHwgKChkaXIubmFtZSkgKyBcIi5cIiArIChPYmplY3Qua2V5cyhkaXIubW9kaWZpZXJzIHx8IHt9KS5qb2luKCcuJykpKVxuICB9XG5cbiAgZnVuY3Rpb24gY2FsbEhvb2skMSAoZGlyLCBob29rLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSkge1xuICAgIHZhciBmbiA9IGRpci5kZWYgJiYgZGlyLmRlZltob29rXTtcbiAgICBpZiAoZm4pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKHZub2RlLmVsbSwgZGlyLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGUsIHZub2RlLmNvbnRleHQsIChcImRpcmVjdGl2ZSBcIiArIChkaXIubmFtZSkgKyBcIiBcIiArIGhvb2sgKyBcIiBob29rXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgYmFzZU1vZHVsZXMgPSBbXG4gICAgcmVmLFxuICAgIGRpcmVjdGl2ZXNcbiAgXTtcblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiB1cGRhdGVBdHRycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIG9wdHMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIGlmIChpc0RlZihvcHRzKSAmJiBvcHRzLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5hdHRycykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmF0dHJzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciBrZXksIGN1ciwgb2xkO1xuICAgIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gICAgdmFyIG9sZEF0dHJzID0gb2xkVm5vZGUuZGF0YS5hdHRycyB8fCB7fTtcbiAgICB2YXIgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICAgIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICAgIGlmIChpc0RlZihhdHRycy5fX29iX18pKSB7XG4gICAgICBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgPSBleHRlbmQoe30sIGF0dHJzKTtcbiAgICB9XG5cbiAgICBmb3IgKGtleSBpbiBhdHRycykge1xuICAgICAgY3VyID0gYXR0cnNba2V5XTtcbiAgICAgIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgICBpZiAob2xkICE9PSBjdXIpIHtcbiAgICAgICAgc2V0QXR0cihlbG0sIGtleSwgY3VyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gIzQzOTE6IGluIElFOSwgc2V0dGluZyB0eXBlIGNhbiByZXNldCB2YWx1ZSBmb3IgaW5wdXRbdHlwZT1yYWRpb11cbiAgICAvLyAjNjY2NjogSUUvRWRnZSBmb3JjZXMgcHJvZ3Jlc3MgdmFsdWUgZG93biB0byAxIGJlZm9yZSBzZXR0aW5nIGEgbWF4XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKChpc0lFIHx8IGlzRWRnZSkgJiYgYXR0cnMudmFsdWUgIT09IG9sZEF0dHJzLnZhbHVlKSB7XG4gICAgICBzZXRBdHRyKGVsbSwgJ3ZhbHVlJywgYXR0cnMudmFsdWUpO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBvbGRBdHRycykge1xuICAgICAgaWYgKGlzVW5kZWYoYXR0cnNba2V5XSkpIHtcbiAgICAgICAgaWYgKGlzWGxpbmsoa2V5KSkge1xuICAgICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEF0dHIgKGVsLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKGVsLnRhZ05hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGlzQm9vbGVhbkF0dHIoa2V5KSkge1xuICAgICAgLy8gc2V0IGF0dHJpYnV0ZSBmb3IgYmxhbmsgdmFsdWVcbiAgICAgIC8vIGUuZy4gPG9wdGlvbiBkaXNhYmxlZD5TZWxlY3Qgb25lPC9vcHRpb24+XG4gICAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0ZWNobmljYWxseSBhbGxvd2Z1bGxzY3JlZW4gaXMgYSBib29sZWFuIGF0dHJpYnV0ZSBmb3IgPGlmcmFtZT4sXG4gICAgICAgIC8vIGJ1dCBGbGFzaCBleHBlY3RzIGEgdmFsdWUgb2YgXCJ0cnVlXCIgd2hlbiB1c2VkIG9uIDxlbWJlZD4gdGFnXG4gICAgICAgIHZhbHVlID0ga2V5ID09PSAnYWxsb3dmdWxsc2NyZWVuJyAmJiBlbC50YWdOYW1lID09PSAnRU1CRUQnXG4gICAgICAgICAgPyAndHJ1ZSdcbiAgICAgICAgICA6IGtleTtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNFbnVtZXJhdGVkQXR0cihrZXkpKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBjb252ZXJ0RW51bWVyYXRlZFZhbHVlKGtleSwgdmFsdWUpKTtcbiAgICB9IGVsc2UgaWYgKGlzWGxpbmsoa2V5KSkge1xuICAgICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZU5TKHhsaW5rTlMsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYmFzZVNldEF0dHIgKGVsLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gIzcxMzg6IElFMTAgJiAxMSBmaXJlcyBpbnB1dCBldmVudCB3aGVuIHNldHRpbmcgcGxhY2Vob2xkZXIgb25cbiAgICAgIC8vIDx0ZXh0YXJlYT4uLi4gYmxvY2sgdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFuZCByZW1vdmUgdGhlIGJsb2NrZXJcbiAgICAgIC8vIGltbWVkaWF0ZWx5LlxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoXG4gICAgICAgIGlzSUUgJiYgIWlzSUU5ICYmXG4gICAgICAgIGVsLnRhZ05hbWUgPT09ICdURVhUQVJFQScgJiZcbiAgICAgICAga2V5ID09PSAncGxhY2Vob2xkZXInICYmIHZhbHVlICE9PSAnJyAmJiAhZWwuX19pZXBoXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJsb2NrZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyKTtcbiAgICAgICAgfTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyKTtcbiAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgIGVsLl9faWVwaCA9IHRydWU7IC8qIElFIHBsYWNlaG9sZGVyIHBhdGNoZWQgKi9cbiAgICAgIH1cbiAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYXR0cnMgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVBdHRycyxcbiAgICB1cGRhdGU6IHVwZGF0ZUF0dHJzXG4gIH07XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gdXBkYXRlQ2xhc3MgKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuICAgIGlmIChcbiAgICAgIGlzVW5kZWYoZGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICAgIGlzVW5kZWYoZGF0YS5jbGFzcykgJiYgKFxuICAgICAgICBpc1VuZGVmKG9sZERhdGEpIHx8IChcbiAgICAgICAgICBpc1VuZGVmKG9sZERhdGEuc3RhdGljQ2xhc3MpICYmXG4gICAgICAgICAgaXNVbmRlZihvbGREYXRhLmNsYXNzKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgY2xzID0gZ2VuQ2xhc3NGb3JWbm9kZSh2bm9kZSk7XG5cbiAgICAvLyBoYW5kbGUgdHJhbnNpdGlvbiBjbGFzc2VzXG4gICAgdmFyIHRyYW5zaXRpb25DbGFzcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcztcbiAgICBpZiAoaXNEZWYodHJhbnNpdGlvbkNsYXNzKSkge1xuICAgICAgY2xzID0gY29uY2F0KGNscywgc3RyaW5naWZ5Q2xhc3ModHJhbnNpdGlvbkNsYXNzKSk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBjbGFzc1xuICAgIGlmIChjbHMgIT09IGVsLl9wcmV2Q2xhc3MpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjbHMpO1xuICAgICAgZWwuX3ByZXZDbGFzcyA9IGNscztcbiAgICB9XG4gIH1cblxuICB2YXIga2xhc3MgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVDbGFzcyxcbiAgICB1cGRhdGU6IHVwZGF0ZUNsYXNzXG4gIH07XG5cbiAgLyogICovXG5cbiAgdmFyIHZhbGlkRGl2aXNpb25DaGFyUkUgPSAvW1xcdykuK1xcLV8kXFxdXS87XG5cbiAgZnVuY3Rpb24gcGFyc2VGaWx0ZXJzIChleHApIHtcbiAgICB2YXIgaW5TaW5nbGUgPSBmYWxzZTtcbiAgICB2YXIgaW5Eb3VibGUgPSBmYWxzZTtcbiAgICB2YXIgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlO1xuICAgIHZhciBpblJlZ2V4ID0gZmFsc2U7XG4gICAgdmFyIGN1cmx5ID0gMDtcbiAgICB2YXIgc3F1YXJlID0gMDtcbiAgICB2YXIgcGFyZW4gPSAwO1xuICAgIHZhciBsYXN0RmlsdGVySW5kZXggPSAwO1xuICAgIHZhciBjLCBwcmV2LCBpLCBleHByZXNzaW9uLCBmaWx0ZXJzO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGV4cC5sZW5ndGg7IGkrKykge1xuICAgICAgcHJldiA9IGM7XG4gICAgICBjID0gZXhwLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoaW5TaW5nbGUpIHtcbiAgICAgICAgaWYgKGMgPT09IDB4MjcgJiYgcHJldiAhPT0gMHg1QykgeyBpblNpbmdsZSA9IGZhbHNlOyB9XG4gICAgICB9IGVsc2UgaWYgKGluRG91YmxlKSB7XG4gICAgICAgIGlmIChjID09PSAweDIyICYmIHByZXYgIT09IDB4NUMpIHsgaW5Eb3VibGUgPSBmYWxzZTsgfVxuICAgICAgfSBlbHNlIGlmIChpblRlbXBsYXRlU3RyaW5nKSB7XG4gICAgICAgIGlmIChjID09PSAweDYwICYmIHByZXYgIT09IDB4NUMpIHsgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlOyB9XG4gICAgICB9IGVsc2UgaWYgKGluUmVnZXgpIHtcbiAgICAgICAgaWYgKGMgPT09IDB4MmYgJiYgcHJldiAhPT0gMHg1QykgeyBpblJlZ2V4ID0gZmFsc2U7IH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGMgPT09IDB4N0MgJiYgLy8gcGlwZVxuICAgICAgICBleHAuY2hhckNvZGVBdChpICsgMSkgIT09IDB4N0MgJiZcbiAgICAgICAgZXhwLmNoYXJDb2RlQXQoaSAtIDEpICE9PSAweDdDICYmXG4gICAgICAgICFjdXJseSAmJiAhc3F1YXJlICYmICFwYXJlblxuICAgICAgKSB7XG4gICAgICAgIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBmaXJzdCBmaWx0ZXIsIGVuZCBvZiBleHByZXNzaW9uXG4gICAgICAgICAgbGFzdEZpbHRlckluZGV4ID0gaSArIDE7XG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgwLCBpKS50cmltKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHVzaEZpbHRlcigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICBjYXNlIDB4MjI6IGluRG91YmxlID0gdHJ1ZTsgYnJlYWsgICAgICAgICAvLyBcIlxuICAgICAgICAgIGNhc2UgMHgyNzogaW5TaW5nbGUgPSB0cnVlOyBicmVhayAgICAgICAgIC8vICdcbiAgICAgICAgICBjYXNlIDB4NjA6IGluVGVtcGxhdGVTdHJpbmcgPSB0cnVlOyBicmVhayAvLyBgXG4gICAgICAgICAgY2FzZSAweDI4OiBwYXJlbisrOyBicmVhayAgICAgICAgICAgICAgICAgLy8gKFxuICAgICAgICAgIGNhc2UgMHgyOTogcGFyZW4tLTsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIClcbiAgICAgICAgICBjYXNlIDB4NUI6IHNxdWFyZSsrOyBicmVhayAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgICAgY2FzZSAweDVEOiBzcXVhcmUtLTsgYnJlYWsgICAgICAgICAgICAgICAgLy8gXVxuICAgICAgICAgIGNhc2UgMHg3QjogY3VybHkrKzsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICBjYXNlIDB4N0Q6IGN1cmx5LS07IGJyZWFrICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09IDB4MmYpIHsgLy8gL1xuICAgICAgICAgIHZhciBqID0gaSAtIDE7XG4gICAgICAgICAgdmFyIHAgPSAodm9pZCAwKTtcbiAgICAgICAgICAvLyBmaW5kIGZpcnN0IG5vbi13aGl0ZXNwYWNlIHByZXYgY2hhclxuICAgICAgICAgIGZvciAoOyBqID49IDA7IGotLSkge1xuICAgICAgICAgICAgcCA9IGV4cC5jaGFyQXQoaik7XG4gICAgICAgICAgICBpZiAocCAhPT0gJyAnKSB7IGJyZWFrIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFwIHx8ICF2YWxpZERpdmlzaW9uQ2hhclJFLnRlc3QocCkpIHtcbiAgICAgICAgICAgIGluUmVnZXggPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4cHJlc3Npb24gPSBleHAuc2xpY2UoMCwgaSkudHJpbSgpO1xuICAgIH0gZWxzZSBpZiAobGFzdEZpbHRlckluZGV4ICE9PSAwKSB7XG4gICAgICBwdXNoRmlsdGVyKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVzaEZpbHRlciAoKSB7XG4gICAgICAoZmlsdGVycyB8fCAoZmlsdGVycyA9IFtdKSkucHVzaChleHAuc2xpY2UobGFzdEZpbHRlckluZGV4LCBpKS50cmltKCkpO1xuICAgICAgbGFzdEZpbHRlckluZGV4ID0gaSArIDE7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSB3cmFwRmlsdGVyKGV4cHJlc3Npb24sIGZpbHRlcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHByZXNzaW9uXG4gIH1cblxuICBmdW5jdGlvbiB3cmFwRmlsdGVyIChleHAsIGZpbHRlcikge1xuICAgIHZhciBpID0gZmlsdGVyLmluZGV4T2YoJygnKTtcbiAgICBpZiAoaSA8IDApIHtcbiAgICAgIC8vIF9mOiByZXNvbHZlRmlsdGVyXG4gICAgICByZXR1cm4gKFwiX2YoXFxcIlwiICsgZmlsdGVyICsgXCJcXFwiKShcIiArIGV4cCArIFwiKVwiKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbmFtZSA9IGZpbHRlci5zbGljZSgwLCBpKTtcbiAgICAgIHZhciBhcmdzID0gZmlsdGVyLnNsaWNlKGkgKyAxKTtcbiAgICAgIHJldHVybiAoXCJfZihcXFwiXCIgKyBuYW1lICsgXCJcXFwiKShcIiArIGV4cCArIChhcmdzICE9PSAnKScgPyAnLCcgKyBhcmdzIDogYXJncykpXG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cblxuXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gIGZ1bmN0aW9uIGJhc2VXYXJuIChtc2csIHJhbmdlKSB7XG4gICAgY29uc29sZS5lcnJvcigoXCJbVnVlIGNvbXBpbGVyXTogXCIgKyBtc2cpKTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5cbiAgZnVuY3Rpb24gcGx1Y2tNb2R1bGVGdW5jdGlvbiAoXG4gICAgbW9kdWxlcyxcbiAgICBrZXlcbiAgKSB7XG4gICAgcmV0dXJuIG1vZHVsZXNcbiAgICAgID8gbW9kdWxlcy5tYXAoZnVuY3Rpb24gKG0pIHsgcmV0dXJuIG1ba2V5XTsgfSkuZmlsdGVyKGZ1bmN0aW9uIChfKSB7IHJldHVybiBfOyB9KVxuICAgICAgOiBbXVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkUHJvcCAoZWwsIG5hbWUsIHZhbHVlLCByYW5nZSwgZHluYW1pYykge1xuICAgIChlbC5wcm9wcyB8fCAoZWwucHJvcHMgPSBbXSkpLnB1c2gocmFuZ2VTZXRJdGVtKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKSk7XG4gICAgZWwucGxhaW4gPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEF0dHIgKGVsLCBuYW1lLCB2YWx1ZSwgcmFuZ2UsIGR5bmFtaWMpIHtcbiAgICB2YXIgYXR0cnMgPSBkeW5hbWljXG4gICAgICA/IChlbC5keW5hbWljQXR0cnMgfHwgKGVsLmR5bmFtaWNBdHRycyA9IFtdKSlcbiAgICAgIDogKGVsLmF0dHJzIHx8IChlbC5hdHRycyA9IFtdKSk7XG4gICAgYXR0cnMucHVzaChyYW5nZVNldEl0ZW0oeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUsIGR5bmFtaWM6IGR5bmFtaWMgfSwgcmFuZ2UpKTtcbiAgICBlbC5wbGFpbiA9IGZhbHNlO1xuICB9XG5cbiAgLy8gYWRkIGEgcmF3IGF0dHIgKHVzZSB0aGlzIGluIHByZVRyYW5zZm9ybXMpXG4gIGZ1bmN0aW9uIGFkZFJhd0F0dHIgKGVsLCBuYW1lLCB2YWx1ZSwgcmFuZ2UpIHtcbiAgICBlbC5hdHRyc01hcFtuYW1lXSA9IHZhbHVlO1xuICAgIGVsLmF0dHJzTGlzdC5wdXNoKHJhbmdlU2V0SXRlbSh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSB9LCByYW5nZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkRGlyZWN0aXZlIChcbiAgICBlbCxcbiAgICBuYW1lLFxuICAgIHJhd05hbWUsXG4gICAgdmFsdWUsXG4gICAgYXJnLFxuICAgIGlzRHluYW1pY0FyZyxcbiAgICBtb2RpZmllcnMsXG4gICAgcmFuZ2VcbiAgKSB7XG4gICAgKGVsLmRpcmVjdGl2ZXMgfHwgKGVsLmRpcmVjdGl2ZXMgPSBbXSkpLnB1c2gocmFuZ2VTZXRJdGVtKHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICByYXdOYW1lOiByYXdOYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgYXJnOiBhcmcsXG4gICAgICBpc0R5bmFtaWNBcmc6IGlzRHluYW1pY0FyZyxcbiAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzXG4gICAgfSwgcmFuZ2UpKTtcbiAgICBlbC5wbGFpbiA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGVuZE1vZGlmaWVyTWFya2VyIChzeW1ib2wsIG5hbWUsIGR5bmFtaWMpIHtcbiAgICByZXR1cm4gZHluYW1pY1xuICAgICAgPyAoXCJfcChcIiArIG5hbWUgKyBcIixcXFwiXCIgKyBzeW1ib2wgKyBcIlxcXCIpXCIpXG4gICAgICA6IHN5bWJvbCArIG5hbWUgLy8gbWFyayB0aGUgZXZlbnQgYXMgY2FwdHVyZWRcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEhhbmRsZXIgKFxuICAgIGVsLFxuICAgIG5hbWUsXG4gICAgdmFsdWUsXG4gICAgbW9kaWZpZXJzLFxuICAgIGltcG9ydGFudCxcbiAgICB3YXJuLFxuICAgIHJhbmdlLFxuICAgIGR5bmFtaWNcbiAgKSB7XG4gICAgbW9kaWZpZXJzID0gbW9kaWZpZXJzIHx8IGVtcHR5T2JqZWN0O1xuICAgIC8vIHdhcm4gcHJldmVudCBhbmQgcGFzc2l2ZSBtb2RpZmllclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChcbiAgICAgIHdhcm4gJiZcbiAgICAgIG1vZGlmaWVycy5wcmV2ZW50ICYmIG1vZGlmaWVycy5wYXNzaXZlXG4gICAgKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAncGFzc2l2ZSBhbmQgcHJldmVudCBjYW5cXCd0IGJlIHVzZWQgdG9nZXRoZXIuICcgK1xuICAgICAgICAnUGFzc2l2ZSBoYW5kbGVyIGNhblxcJ3QgcHJldmVudCBkZWZhdWx0IGV2ZW50LicsXG4gICAgICAgIHJhbmdlXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIG5vcm1hbGl6ZSBjbGljay5yaWdodCBhbmQgY2xpY2subWlkZGxlIHNpbmNlIHRoZXkgZG9uJ3QgYWN0dWFsbHkgZmlyZVxuICAgIC8vIHRoaXMgaXMgdGVjaG5pY2FsbHkgYnJvd3Nlci1zcGVjaWZpYywgYnV0IGF0IGxlYXN0IGZvciBub3cgYnJvd3NlcnMgYXJlXG4gICAgLy8gdGhlIG9ubHkgdGFyZ2V0IGVudnMgdGhhdCBoYXZlIHJpZ2h0L21pZGRsZSBjbGlja3MuXG4gICAgaWYgKG1vZGlmaWVycy5yaWdodCkge1xuICAgICAgaWYgKGR5bmFtaWMpIHtcbiAgICAgICAgbmFtZSA9IFwiKFwiICsgbmFtZSArIFwiKT09PSdjbGljayc/J2NvbnRleHRtZW51JzooXCIgKyBuYW1lICsgXCIpXCI7XG4gICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdjbGljaycpIHtcbiAgICAgICAgbmFtZSA9ICdjb250ZXh0bWVudSc7XG4gICAgICAgIGRlbGV0ZSBtb2RpZmllcnMucmlnaHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtb2RpZmllcnMubWlkZGxlKSB7XG4gICAgICBpZiAoZHluYW1pYykge1xuICAgICAgICBuYW1lID0gXCIoXCIgKyBuYW1lICsgXCIpPT09J2NsaWNrJz8nbW91c2V1cCc6KFwiICsgbmFtZSArIFwiKVwiO1xuICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnY2xpY2snKSB7XG4gICAgICAgIG5hbWUgPSAnbW91c2V1cCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgY2FwdHVyZSBtb2RpZmllclxuICAgIGlmIChtb2RpZmllcnMuY2FwdHVyZSkge1xuICAgICAgZGVsZXRlIG1vZGlmaWVycy5jYXB0dXJlO1xuICAgICAgbmFtZSA9IHByZXBlbmRNb2RpZmllck1hcmtlcignIScsIG5hbWUsIGR5bmFtaWMpO1xuICAgIH1cbiAgICBpZiAobW9kaWZpZXJzLm9uY2UpIHtcbiAgICAgIGRlbGV0ZSBtb2RpZmllcnMub25jZTtcbiAgICAgIG5hbWUgPSBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoJ34nLCBuYW1lLCBkeW5hbWljKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKG1vZGlmaWVycy5wYXNzaXZlKSB7XG4gICAgICBkZWxldGUgbW9kaWZpZXJzLnBhc3NpdmU7XG4gICAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCcmJywgbmFtZSwgZHluYW1pYyk7XG4gICAgfVxuXG4gICAgdmFyIGV2ZW50cztcbiAgICBpZiAobW9kaWZpZXJzLm5hdGl2ZSkge1xuICAgICAgZGVsZXRlIG1vZGlmaWVycy5uYXRpdmU7XG4gICAgICBldmVudHMgPSBlbC5uYXRpdmVFdmVudHMgfHwgKGVsLm5hdGl2ZUV2ZW50cyA9IHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnRzID0gZWwuZXZlbnRzIHx8IChlbC5ldmVudHMgPSB7fSk7XG4gICAgfVxuXG4gICAgdmFyIG5ld0hhbmRsZXIgPSByYW5nZVNldEl0ZW0oeyB2YWx1ZTogdmFsdWUudHJpbSgpLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKTtcbiAgICBpZiAobW9kaWZpZXJzICE9PSBlbXB0eU9iamVjdCkge1xuICAgICAgbmV3SGFuZGxlci5tb2RpZmllcnMgPSBtb2RpZmllcnM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gZXZlbnRzW25hbWVdO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXJzKSkge1xuICAgICAgaW1wb3J0YW50ID8gaGFuZGxlcnMudW5zaGlmdChuZXdIYW5kbGVyKSA6IGhhbmRsZXJzLnB1c2gobmV3SGFuZGxlcik7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVycykge1xuICAgICAgZXZlbnRzW25hbWVdID0gaW1wb3J0YW50ID8gW25ld0hhbmRsZXIsIGhhbmRsZXJzXSA6IFtoYW5kbGVycywgbmV3SGFuZGxlcl07XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50c1tuYW1lXSA9IG5ld0hhbmRsZXI7XG4gICAgfVxuXG4gICAgZWwucGxhaW4gPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJhd0JpbmRpbmdBdHRyIChcbiAgICBlbCxcbiAgICBuYW1lXG4gICkge1xuICAgIHJldHVybiBlbC5yYXdBdHRyc01hcFsnOicgKyBuYW1lXSB8fFxuICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtYmluZDonICsgbmFtZV0gfHxcbiAgICAgIGVsLnJhd0F0dHJzTWFwW25hbWVdXG4gIH1cblxuICBmdW5jdGlvbiBnZXRCaW5kaW5nQXR0ciAoXG4gICAgZWwsXG4gICAgbmFtZSxcbiAgICBnZXRTdGF0aWNcbiAgKSB7XG4gICAgdmFyIGR5bmFtaWNWYWx1ZSA9XG4gICAgICBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnOicgKyBuYW1lKSB8fFxuICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtYmluZDonICsgbmFtZSk7XG4gICAgaWYgKGR5bmFtaWNWYWx1ZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzKGR5bmFtaWNWYWx1ZSlcbiAgICB9IGVsc2UgaWYgKGdldFN0YXRpYyAhPT0gZmFsc2UpIHtcbiAgICAgIHZhciBzdGF0aWNWYWx1ZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsIG5hbWUpO1xuICAgICAgaWYgKHN0YXRpY1ZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHN0YXRpY1ZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdGU6IHRoaXMgb25seSByZW1vdmVzIHRoZSBhdHRyIGZyb20gdGhlIEFycmF5IChhdHRyc0xpc3QpIHNvIHRoYXQgaXRcbiAgLy8gZG9lc24ndCBnZXQgcHJvY2Vzc2VkIGJ5IHByb2Nlc3NBdHRycy5cbiAgLy8gQnkgZGVmYXVsdCBpdCBkb2VzIE5PVCByZW1vdmUgaXQgZnJvbSB0aGUgbWFwIChhdHRyc01hcCkgYmVjYXVzZSB0aGUgbWFwIGlzXG4gIC8vIG5lZWRlZCBkdXJpbmcgY29kZWdlbi5cbiAgZnVuY3Rpb24gZ2V0QW5kUmVtb3ZlQXR0ciAoXG4gICAgZWwsXG4gICAgbmFtZSxcbiAgICByZW1vdmVGcm9tTWFwXG4gICkge1xuICAgIHZhciB2YWw7XG4gICAgaWYgKCh2YWwgPSBlbC5hdHRyc01hcFtuYW1lXSkgIT0gbnVsbCkge1xuICAgICAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChsaXN0W2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZW1vdmVGcm9tTWFwKSB7XG4gICAgICBkZWxldGUgZWwuYXR0cnNNYXBbbmFtZV07XG4gICAgfVxuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4IChcbiAgICBlbCxcbiAgICBuYW1lXG4gICkge1xuICAgIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhdHRyID0gbGlzdFtpXTtcbiAgICAgIGlmIChuYW1lLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgcmV0dXJuIGF0dHJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZVNldEl0ZW0gKFxuICAgIGl0ZW0sXG4gICAgcmFuZ2VcbiAgKSB7XG4gICAgaWYgKHJhbmdlKSB7XG4gICAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICBpdGVtLnN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICB9XG4gICAgICBpZiAocmFuZ2UuZW5kICE9IG51bGwpIHtcbiAgICAgICAgaXRlbS5lbmQgPSByYW5nZS5lbmQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtXG4gIH1cblxuICAvKiAgKi9cblxuICAvKipcbiAgICogQ3Jvc3MtcGxhdGZvcm0gY29kZSBnZW5lcmF0aW9uIGZvciBjb21wb25lbnQgdi1tb2RlbFxuICAgKi9cbiAgZnVuY3Rpb24gZ2VuQ29tcG9uZW50TW9kZWwgKFxuICAgIGVsLFxuICAgIHZhbHVlLFxuICAgIG1vZGlmaWVyc1xuICApIHtcbiAgICB2YXIgcmVmID0gbW9kaWZpZXJzIHx8IHt9O1xuICAgIHZhciBudW1iZXIgPSByZWYubnVtYmVyO1xuICAgIHZhciB0cmltID0gcmVmLnRyaW07XG5cbiAgICB2YXIgYmFzZVZhbHVlRXhwcmVzc2lvbiA9ICckJHYnO1xuICAgIHZhciB2YWx1ZUV4cHJlc3Npb24gPSBiYXNlVmFsdWVFeHByZXNzaW9uO1xuICAgIGlmICh0cmltKSB7XG4gICAgICB2YWx1ZUV4cHJlc3Npb24gPVxuICAgICAgICBcIih0eXBlb2YgXCIgKyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIgPT09ICdzdHJpbmcnXCIgK1xuICAgICAgICBcIj8gXCIgKyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIudHJpbSgpXCIgK1xuICAgICAgICBcIjogXCIgKyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIpXCI7XG4gICAgfVxuICAgIGlmIChudW1iZXIpIHtcbiAgICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiX24oXCIgKyB2YWx1ZUV4cHJlc3Npb24gKyBcIilcIjtcbiAgICB9XG4gICAgdmFyIGFzc2lnbm1lbnQgPSBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgdmFsdWVFeHByZXNzaW9uKTtcblxuICAgIGVsLm1vZGVsID0ge1xuICAgICAgdmFsdWU6IChcIihcIiArIHZhbHVlICsgXCIpXCIpLFxuICAgICAgZXhwcmVzc2lvbjogSlNPTi5zdHJpbmdpZnkodmFsdWUpLFxuICAgICAgY2FsbGJhY2s6IChcImZ1bmN0aW9uIChcIiArIGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBcIikge1wiICsgYXNzaWdubWVudCArIFwifVwiKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3Jvc3MtcGxhdGZvcm0gY29kZWdlbiBoZWxwZXIgZm9yIGdlbmVyYXRpbmcgdi1tb2RlbCB2YWx1ZSBhc3NpZ25tZW50IGNvZGUuXG4gICAqL1xuICBmdW5jdGlvbiBnZW5Bc3NpZ25tZW50Q29kZSAoXG4gICAgdmFsdWUsXG4gICAgYXNzaWdubWVudFxuICApIHtcbiAgICB2YXIgcmVzID0gcGFyc2VNb2RlbCh2YWx1ZSk7XG4gICAgaWYgKHJlcy5rZXkgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAodmFsdWUgKyBcIj1cIiArIGFzc2lnbm1lbnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXCIkc2V0KFwiICsgKHJlcy5leHApICsgXCIsIFwiICsgKHJlcy5rZXkpICsgXCIsIFwiICsgYXNzaWdubWVudCArIFwiKVwiKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhIHYtbW9kZWwgZXhwcmVzc2lvbiBpbnRvIGEgYmFzZSBwYXRoIGFuZCBhIGZpbmFsIGtleSBzZWdtZW50LlxuICAgKiBIYW5kbGVzIGJvdGggZG90LXBhdGggYW5kIHBvc3NpYmxlIHNxdWFyZSBicmFja2V0cy5cbiAgICpcbiAgICogUG9zc2libGUgY2FzZXM6XG4gICAqXG4gICAqIC0gdGVzdFxuICAgKiAtIHRlc3Rba2V5XVxuICAgKiAtIHRlc3RbdGVzdDFba2V5XV1cbiAgICogLSB0ZXN0W1wiYVwiXVtrZXldXG4gICAqIC0geHh4LnRlc3RbYVthXS50ZXN0MVtrZXldXVxuICAgKiAtIHRlc3QueHh4LmFbXCJhc2FcIl1bdGVzdDFba2V5XV1cbiAgICpcbiAgICovXG5cbiAgdmFyIGxlbiwgc3RyLCBjaHIsIGluZGV4JDEsIGV4cHJlc3Npb25Qb3MsIGV4cHJlc3Npb25FbmRQb3M7XG5cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTW9kZWwgKHZhbCkge1xuICAgIC8vIEZpeCBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL3B1bGwvNzczMFxuICAgIC8vIGFsbG93IHYtbW9kZWw9XCJvYmoudmFsIFwiICh0cmFpbGluZyB3aGl0ZXNwYWNlKVxuICAgIHZhbCA9IHZhbC50cmltKCk7XG4gICAgbGVuID0gdmFsLmxlbmd0aDtcblxuICAgIGlmICh2YWwuaW5kZXhPZignWycpIDwgMCB8fCB2YWwubGFzdEluZGV4T2YoJ10nKSA8IGxlbiAtIDEpIHtcbiAgICAgIGluZGV4JDEgPSB2YWwubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgIGlmIChpbmRleCQxID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBleHA6IHZhbC5zbGljZSgwLCBpbmRleCQxKSxcbiAgICAgICAgICBrZXk6ICdcIicgKyB2YWwuc2xpY2UoaW5kZXgkMSArIDEpICsgJ1wiJ1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGV4cDogdmFsLFxuICAgICAgICAgIGtleTogbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RyID0gdmFsO1xuICAgIGluZGV4JDEgPSBleHByZXNzaW9uUG9zID0gZXhwcmVzc2lvbkVuZFBvcyA9IDA7XG5cbiAgICB3aGlsZSAoIWVvZigpKSB7XG4gICAgICBjaHIgPSBuZXh0KCk7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpc1N0cmluZ1N0YXJ0KGNocikpIHtcbiAgICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAweDVCKSB7XG4gICAgICAgIHBhcnNlQnJhY2tldChjaHIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleHA6IHZhbC5zbGljZSgwLCBleHByZXNzaW9uUG9zKSxcbiAgICAgIGtleTogdmFsLnNsaWNlKGV4cHJlc3Npb25Qb3MgKyAxLCBleHByZXNzaW9uRW5kUG9zKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHQgKCkge1xuICAgIHJldHVybiBzdHIuY2hhckNvZGVBdCgrK2luZGV4JDEpXG4gIH1cblxuICBmdW5jdGlvbiBlb2YgKCkge1xuICAgIHJldHVybiBpbmRleCQxID49IGxlblxuICB9XG5cbiAgZnVuY3Rpb24gaXNTdHJpbmdTdGFydCAoY2hyKSB7XG4gICAgcmV0dXJuIGNociA9PT0gMHgyMiB8fCBjaHIgPT09IDB4MjdcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQnJhY2tldCAoY2hyKSB7XG4gICAgdmFyIGluQnJhY2tldCA9IDE7XG4gICAgZXhwcmVzc2lvblBvcyA9IGluZGV4JDE7XG4gICAgd2hpbGUgKCFlb2YoKSkge1xuICAgICAgY2hyID0gbmV4dCgpO1xuICAgICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgICBwYXJzZVN0cmluZyhjaHIpO1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKGNociA9PT0gMHg1QikgeyBpbkJyYWNrZXQrKzsgfVxuICAgICAgaWYgKGNociA9PT0gMHg1RCkgeyBpbkJyYWNrZXQtLTsgfVxuICAgICAgaWYgKGluQnJhY2tldCA9PT0gMCkge1xuICAgICAgICBleHByZXNzaW9uRW5kUG9zID0gaW5kZXgkMTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVN0cmluZyAoY2hyKSB7XG4gICAgdmFyIHN0cmluZ1F1b3RlID0gY2hyO1xuICAgIHdoaWxlICghZW9mKCkpIHtcbiAgICAgIGNociA9IG5leHQoKTtcbiAgICAgIGlmIChjaHIgPT09IHN0cmluZ1F1b3RlKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIHdhcm4kMTtcblxuICAvLyBpbiBzb21lIGNhc2VzLCB0aGUgZXZlbnQgdXNlZCBoYXMgdG8gYmUgZGV0ZXJtaW5lZCBhdCBydW50aW1lXG4gIC8vIHNvIHdlIHVzZWQgc29tZSByZXNlcnZlZCB0b2tlbnMgZHVyaW5nIGNvbXBpbGUuXG4gIHZhciBSQU5HRV9UT0tFTiA9ICdfX3InO1xuICB2YXIgQ0hFQ0tCT1hfUkFESU9fVE9LRU4gPSAnX19jJztcblxuICBmdW5jdGlvbiBtb2RlbCAoXG4gICAgZWwsXG4gICAgZGlyLFxuICAgIF93YXJuXG4gICkge1xuICAgIHdhcm4kMSA9IF93YXJuO1xuICAgIHZhciB2YWx1ZSA9IGRpci52YWx1ZTtcbiAgICB2YXIgbW9kaWZpZXJzID0gZGlyLm1vZGlmaWVycztcbiAgICB2YXIgdGFnID0gZWwudGFnO1xuICAgIHZhciB0eXBlID0gZWwuYXR0cnNNYXAudHlwZTtcblxuICAgIHtcbiAgICAgIC8vIGlucHV0cyB3aXRoIHR5cGU9XCJmaWxlXCIgYXJlIHJlYWQgb25seSBhbmQgc2V0dGluZyB0aGUgaW5wdXQnc1xuICAgICAgLy8gdmFsdWUgd2lsbCB0aHJvdyBhbiBlcnJvci5cbiAgICAgIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgdHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgIHdhcm4kMShcbiAgICAgICAgICBcIjxcIiArIChlbC50YWcpICsgXCIgdi1tb2RlbD1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIiB0eXBlPVxcXCJmaWxlXFxcIj46XFxuXCIgK1xuICAgICAgICAgIFwiRmlsZSBpbnB1dHMgYXJlIHJlYWQgb25seS4gVXNlIGEgdi1vbjpjaGFuZ2UgbGlzdGVuZXIgaW5zdGVhZC5cIixcbiAgICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1tb2RlbCddXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVsLmNvbXBvbmVudCkge1xuICAgICAgZ2VuQ29tcG9uZW50TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgICAgLy8gY29tcG9uZW50IHYtbW9kZWwgZG9lc24ndCBuZWVkIGV4dHJhIHJ1bnRpbWVcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSBpZiAodGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgZ2VuU2VsZWN0KGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICBnZW5DaGVja2JveE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAncmFkaW8nKSB7XG4gICAgICBnZW5SYWRpb01vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgIGdlbkRlZmF1bHRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gICAgfSBlbHNlIGlmICghY29uZmlnLmlzUmVzZXJ2ZWRUYWcodGFnKSkge1xuICAgICAgZ2VuQ29tcG9uZW50TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgICAgLy8gY29tcG9uZW50IHYtbW9kZWwgZG9lc24ndCBuZWVkIGV4dHJhIHJ1bnRpbWVcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuJDEoXG4gICAgICAgIFwiPFwiICsgKGVsLnRhZykgKyBcIiB2LW1vZGVsPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiPjogXCIgK1xuICAgICAgICBcInYtbW9kZWwgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGVsZW1lbnQgdHlwZS4gXCIgK1xuICAgICAgICAnSWYgeW91IGFyZSB3b3JraW5nIHdpdGggY29udGVudGVkaXRhYmxlLCBpdFxcJ3MgcmVjb21tZW5kZWQgdG8gJyArXG4gICAgICAgICd3cmFwIGEgbGlicmFyeSBkZWRpY2F0ZWQgZm9yIHRoYXQgcHVycG9zZSBpbnNpZGUgYSBjdXN0b20gY29tcG9uZW50LicsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwWyd2LW1vZGVsJ11cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIHJ1bnRpbWUgZGlyZWN0aXZlIG1ldGFkYXRhXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbkNoZWNrYm94TW9kZWwgKFxuICAgIGVsLFxuICAgIHZhbHVlLFxuICAgIG1vZGlmaWVyc1xuICApIHtcbiAgICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gICAgdmFyIHZhbHVlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndmFsdWUnKSB8fCAnbnVsbCc7XG4gICAgdmFyIHRydWVWYWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3RydWUtdmFsdWUnKSB8fCAndHJ1ZSc7XG4gICAgdmFyIGZhbHNlVmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdmYWxzZS12YWx1ZScpIHx8ICdmYWxzZSc7XG4gICAgYWRkUHJvcChlbCwgJ2NoZWNrZWQnLFxuICAgICAgXCJBcnJheS5pc0FycmF5KFwiICsgdmFsdWUgKyBcIilcIiArXG4gICAgICBcIj9faShcIiArIHZhbHVlICsgXCIsXCIgKyB2YWx1ZUJpbmRpbmcgKyBcIik+LTFcIiArIChcbiAgICAgICAgdHJ1ZVZhbHVlQmluZGluZyA9PT0gJ3RydWUnXG4gICAgICAgICAgPyAoXCI6KFwiICsgdmFsdWUgKyBcIilcIilcbiAgICAgICAgICA6IChcIjpfcShcIiArIHZhbHVlICsgXCIsXCIgKyB0cnVlVmFsdWVCaW5kaW5nICsgXCIpXCIpXG4gICAgICApXG4gICAgKTtcbiAgICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJyxcbiAgICAgIFwidmFyICQkYT1cIiArIHZhbHVlICsgXCIsXCIgK1xuICAgICAgICAgICckJGVsPSRldmVudC50YXJnZXQsJyArXG4gICAgICAgICAgXCIkJGM9JCRlbC5jaGVja2VkPyhcIiArIHRydWVWYWx1ZUJpbmRpbmcgKyBcIik6KFwiICsgZmFsc2VWYWx1ZUJpbmRpbmcgKyBcIik7XCIgK1xuICAgICAgJ2lmKEFycmF5LmlzQXJyYXkoJCRhKSl7JyArXG4gICAgICAgIFwidmFyICQkdj1cIiArIChudW1iZXIgPyAnX24oJyArIHZhbHVlQmluZGluZyArICcpJyA6IHZhbHVlQmluZGluZykgKyBcIixcIiArXG4gICAgICAgICAgICAnJCRpPV9pKCQkYSwkJHYpOycgK1xuICAgICAgICBcImlmKCQkZWwuY2hlY2tlZCl7JCRpPDAmJihcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYS5jb25jYXQoWyQkdl0pJykpICsgXCIpfVwiICtcbiAgICAgICAgXCJlbHNleyQkaT4tMSYmKFwiICsgKGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCAnJCRhLnNsaWNlKDAsJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSsxKSknKSkgKyBcIil9XCIgK1xuICAgICAgXCJ9ZWxzZXtcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYycpKSArIFwifVwiLFxuICAgICAgbnVsbCwgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZW5SYWRpb01vZGVsIChcbiAgICBlbCxcbiAgICB2YWx1ZSxcbiAgICBtb2RpZmllcnNcbiAgKSB7XG4gICAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMubnVtYmVyO1xuICAgIHZhciB2YWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3ZhbHVlJykgfHwgJ251bGwnO1xuICAgIHZhbHVlQmluZGluZyA9IG51bWJlciA/IChcIl9uKFwiICsgdmFsdWVCaW5kaW5nICsgXCIpXCIpIDogdmFsdWVCaW5kaW5nO1xuICAgIGFkZFByb3AoZWwsICdjaGVja2VkJywgKFwiX3EoXCIgKyB2YWx1ZSArIFwiLFwiICsgdmFsdWVCaW5kaW5nICsgXCIpXCIpKTtcbiAgICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlQmluZGluZyksIG51bGwsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuU2VsZWN0IChcbiAgICBlbCxcbiAgICB2YWx1ZSxcbiAgICBtb2RpZmllcnNcbiAgKSB7XG4gICAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMubnVtYmVyO1xuICAgIHZhciBzZWxlY3RlZFZhbCA9IFwiQXJyYXkucHJvdG90eXBlLmZpbHRlclwiICtcbiAgICAgIFwiLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLGZ1bmN0aW9uKG8pe3JldHVybiBvLnNlbGVjdGVkfSlcIiArXG4gICAgICBcIi5tYXAoZnVuY3Rpb24obyl7dmFyIHZhbCA9IFxcXCJfdmFsdWVcXFwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWU7XCIgK1xuICAgICAgXCJyZXR1cm4gXCIgKyAobnVtYmVyID8gJ19uKHZhbCknIDogJ3ZhbCcpICsgXCJ9KVwiO1xuXG4gICAgdmFyIGFzc2lnbm1lbnQgPSAnJGV2ZW50LnRhcmdldC5tdWx0aXBsZSA/ICQkc2VsZWN0ZWRWYWwgOiAkJHNlbGVjdGVkVmFsWzBdJztcbiAgICB2YXIgY29kZSA9IFwidmFyICQkc2VsZWN0ZWRWYWwgPSBcIiArIHNlbGVjdGVkVmFsICsgXCI7XCI7XG4gICAgY29kZSA9IGNvZGUgKyBcIiBcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgYXNzaWdubWVudCkpO1xuICAgIGFkZEhhbmRsZXIoZWwsICdjaGFuZ2UnLCBjb2RlLCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbkRlZmF1bHRNb2RlbCAoXG4gICAgZWwsXG4gICAgdmFsdWUsXG4gICAgbW9kaWZpZXJzXG4gICkge1xuICAgIHZhciB0eXBlID0gZWwuYXR0cnNNYXAudHlwZTtcblxuICAgIC8vIHdhcm4gaWYgdi1iaW5kOnZhbHVlIGNvbmZsaWN0cyB3aXRoIHYtbW9kZWxcbiAgICAvLyBleGNlcHQgZm9yIGlucHV0cyB3aXRoIHYtYmluZDp0eXBlXG4gICAge1xuICAgICAgdmFyIHZhbHVlJDEgPSBlbC5hdHRyc01hcFsndi1iaW5kOnZhbHVlJ10gfHwgZWwuYXR0cnNNYXBbJzp2YWx1ZSddO1xuICAgICAgdmFyIHR5cGVCaW5kaW5nID0gZWwuYXR0cnNNYXBbJ3YtYmluZDp0eXBlJ10gfHwgZWwuYXR0cnNNYXBbJzp0eXBlJ107XG4gICAgICBpZiAodmFsdWUkMSAmJiAhdHlwZUJpbmRpbmcpIHtcbiAgICAgICAgdmFyIGJpbmRpbmcgPSBlbC5hdHRyc01hcFsndi1iaW5kOnZhbHVlJ10gPyAndi1iaW5kOnZhbHVlJyA6ICc6dmFsdWUnO1xuICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgYmluZGluZyArIFwiPVxcXCJcIiArIHZhbHVlJDEgKyBcIlxcXCIgY29uZmxpY3RzIHdpdGggdi1tb2RlbCBvbiB0aGUgc2FtZSBlbGVtZW50IFwiICtcbiAgICAgICAgICAnYmVjYXVzZSB0aGUgbGF0dGVyIGFscmVhZHkgZXhwYW5kcyB0byBhIHZhbHVlIGJpbmRpbmcgaW50ZXJuYWxseScsXG4gICAgICAgICAgZWwucmF3QXR0cnNNYXBbYmluZGluZ11cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVmID0gbW9kaWZpZXJzIHx8IHt9O1xuICAgIHZhciBsYXp5ID0gcmVmLmxhenk7XG4gICAgdmFyIG51bWJlciA9IHJlZi5udW1iZXI7XG4gICAgdmFyIHRyaW0gPSByZWYudHJpbTtcbiAgICB2YXIgbmVlZENvbXBvc2l0aW9uR3VhcmQgPSAhbGF6eSAmJiB0eXBlICE9PSAncmFuZ2UnO1xuICAgIHZhciBldmVudCA9IGxhenlcbiAgICAgID8gJ2NoYW5nZSdcbiAgICAgIDogdHlwZSA9PT0gJ3JhbmdlJ1xuICAgICAgICA/IFJBTkdFX1RPS0VOXG4gICAgICAgIDogJ2lucHV0JztcblxuICAgIHZhciB2YWx1ZUV4cHJlc3Npb24gPSAnJGV2ZW50LnRhcmdldC52YWx1ZSc7XG4gICAgaWYgKHRyaW0pIHtcbiAgICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiJGV2ZW50LnRhcmdldC52YWx1ZS50cmltKClcIjtcbiAgICB9XG4gICAgaWYgKG51bWJlcikge1xuICAgICAgdmFsdWVFeHByZXNzaW9uID0gXCJfbihcIiArIHZhbHVlRXhwcmVzc2lvbiArIFwiKVwiO1xuICAgIH1cblxuICAgIHZhciBjb2RlID0gZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlRXhwcmVzc2lvbik7XG4gICAgaWYgKG5lZWRDb21wb3NpdGlvbkd1YXJkKSB7XG4gICAgICBjb2RlID0gXCJpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZylyZXR1cm47XCIgKyBjb2RlO1xuICAgIH1cblxuICAgIGFkZFByb3AoZWwsICd2YWx1ZScsIChcIihcIiArIHZhbHVlICsgXCIpXCIpKTtcbiAgICBhZGRIYW5kbGVyKGVsLCBldmVudCwgY29kZSwgbnVsbCwgdHJ1ZSk7XG4gICAgaWYgKHRyaW0gfHwgbnVtYmVyKSB7XG4gICAgICBhZGRIYW5kbGVyKGVsLCAnYmx1cicsICckZm9yY2VVcGRhdGUoKScpO1xuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIC8vIG5vcm1hbGl6ZSB2LW1vZGVsIGV2ZW50IHRva2VucyB0aGF0IGNhbiBvbmx5IGJlIGRldGVybWluZWQgYXQgcnVudGltZS5cbiAgLy8gaXQncyBpbXBvcnRhbnQgdG8gcGxhY2UgdGhlIGV2ZW50IGFzIHRoZSBmaXJzdCBpbiB0aGUgYXJyYXkgYmVjYXVzZVxuICAvLyB0aGUgd2hvbGUgcG9pbnQgaXMgZW5zdXJpbmcgdGhlIHYtbW9kZWwgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYmVmb3JlXG4gIC8vIHVzZXItYXR0YWNoZWQgaGFuZGxlcnMuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50cyAob24pIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob25bUkFOR0VfVE9LRU5dKSkge1xuICAgICAgLy8gSUUgaW5wdXRbdHlwZT1yYW5nZV0gb25seSBzdXBwb3J0cyBgY2hhbmdlYCBldmVudFxuICAgICAgdmFyIGV2ZW50ID0gaXNJRSA/ICdjaGFuZ2UnIDogJ2lucHV0JztcbiAgICAgIG9uW2V2ZW50XSA9IFtdLmNvbmNhdChvbltSQU5HRV9UT0tFTl0sIG9uW2V2ZW50XSB8fCBbXSk7XG4gICAgICBkZWxldGUgb25bUkFOR0VfVE9LRU5dO1xuICAgIH1cbiAgICAvLyBUaGlzIHdhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGZpeCAjNDUyMSBidXQgbm8gbG9uZ2VyIG5lY2Vzc2FyeVxuICAgIC8vIGFmdGVyIDIuNS4gS2VlcGluZyBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdCB3aXRoIGdlbmVyYXRlZCBjb2RlIGZyb20gPCAyLjRcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dKSkge1xuICAgICAgb24uY2hhbmdlID0gW10uY29uY2F0KG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXSwgb24uY2hhbmdlIHx8IFtdKTtcbiAgICAgIGRlbGV0ZSBvbltDSEVDS0JPWF9SQURJT19UT0tFTl07XG4gICAgfVxuICB9XG5cbiAgdmFyIHRhcmdldCQxO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9uY2VIYW5kbGVyJDEgKGV2ZW50LCBoYW5kbGVyLCBjYXB0dXJlKSB7XG4gICAgdmFyIF90YXJnZXQgPSB0YXJnZXQkMTsgLy8gc2F2ZSBjdXJyZW50IHRhcmdldCBlbGVtZW50IGluIGNsb3N1cmVcbiAgICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIgKCkge1xuICAgICAgdmFyIHJlcyA9IGhhbmRsZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgICAgcmVtb3ZlJDIoZXZlbnQsIG9uY2VIYW5kbGVyLCBjYXB0dXJlLCBfdGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAjOTQ0NjogRmlyZWZveCA8PSA1MyAoaW4gcGFydGljdWxhciwgRVNSIDUyKSBoYXMgaW5jb3JyZWN0IEV2ZW50LnRpbWVTdGFtcFxuICAvLyBpbXBsZW1lbnRhdGlvbiBhbmQgZG9lcyBub3QgZmlyZSBtaWNyb3Rhc2tzIGluIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24sIHNvXG4gIC8vIHNhZmUgdG8gZXhjbHVkZS5cbiAgdmFyIHVzZU1pY3JvdGFza0ZpeCA9IGlzVXNpbmdNaWNyb1Rhc2sgJiYgIShpc0ZGICYmIE51bWJlcihpc0ZGWzFdKSA8PSA1Myk7XG5cbiAgZnVuY3Rpb24gYWRkJDEgKFxuICAgIG5hbWUsXG4gICAgaGFuZGxlcixcbiAgICBjYXB0dXJlLFxuICAgIHBhc3NpdmVcbiAgKSB7XG4gICAgLy8gYXN5bmMgZWRnZSBjYXNlICM2NTY2OiBpbm5lciBjbGljayBldmVudCB0cmlnZ2VycyBwYXRjaCwgZXZlbnQgaGFuZGxlclxuICAgIC8vIGF0dGFjaGVkIHRvIG91dGVyIGVsZW1lbnQgZHVyaW5nIHBhdGNoLCBhbmQgdHJpZ2dlcmVkIGFnYWluLiBUaGlzXG4gICAgLy8gaGFwcGVucyBiZWNhdXNlIGJyb3dzZXJzIGZpcmUgbWljcm90YXNrIHRpY2tzIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24uXG4gICAgLy8gdGhlIHNvbHV0aW9uIGlzIHNpbXBsZTogd2Ugc2F2ZSB0aGUgdGltZXN0YW1wIHdoZW4gYSBoYW5kbGVyIGlzIGF0dGFjaGVkLFxuICAgIC8vIGFuZCB0aGUgaGFuZGxlciB3b3VsZCBvbmx5IGZpcmUgaWYgdGhlIGV2ZW50IHBhc3NlZCB0byBpdCB3YXMgZmlyZWRcbiAgICAvLyBBRlRFUiBpdCB3YXMgYXR0YWNoZWQuXG4gICAgaWYgKHVzZU1pY3JvdGFza0ZpeCkge1xuICAgICAgdmFyIGF0dGFjaGVkVGltZXN0YW1wID0gY3VycmVudEZsdXNoVGltZXN0YW1wO1xuICAgICAgdmFyIG9yaWdpbmFsID0gaGFuZGxlcjtcbiAgICAgIGhhbmRsZXIgPSBvcmlnaW5hbC5fd3JhcHBlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBubyBidWJibGluZywgc2hvdWxkIGFsd2F5cyBmaXJlLlxuICAgICAgICAgIC8vIHRoaXMgaXMganVzdCBhIHNhZmV0eSBuZXQgaW4gY2FzZSBldmVudC50aW1lU3RhbXAgaXMgdW5yZWxpYWJsZSBpblxuICAgICAgICAgIC8vIGNlcnRhaW4gd2VpcmQgZW52aXJvbm1lbnRzLi4uXG4gICAgICAgICAgZS50YXJnZXQgPT09IGUuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAgIC8vIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGhhbmRsZXIgYXR0YWNobWVudFxuICAgICAgICAgIGUudGltZVN0YW1wID49IGF0dGFjaGVkVGltZXN0YW1wIHx8XG4gICAgICAgICAgLy8gYmFpbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBidWdneSBldmVudC50aW1lU3RhbXAgaW1wbGVtZW50YXRpb25zXG4gICAgICAgICAgLy8gIzk0NjIgaU9TIDkgYnVnOiBldmVudC50aW1lU3RhbXAgaXMgMCBhZnRlciBoaXN0b3J5LnB1c2hTdGF0ZVxuICAgICAgICAgIC8vICM5NjgxIFF0V2ViRW5naW5lIGV2ZW50LnRpbWVTdGFtcCBpcyBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICAgIGUudGltZVN0YW1wIDw9IDAgfHxcbiAgICAgICAgICAvLyAjOTQ0OCBiYWlsIGlmIGV2ZW50IGlzIGZpcmVkIGluIGFub3RoZXIgZG9jdW1lbnQgaW4gYSBtdWx0aS1wYWdlXG4gICAgICAgICAgLy8gZWxlY3Ryb24vbncuanMgYXBwLCBzaW5jZSBldmVudC50aW1lU3RhbXAgd2lsbCBiZSB1c2luZyBhIGRpZmZlcmVudFxuICAgICAgICAgIC8vIHN0YXJ0aW5nIHJlZmVyZW5jZVxuICAgICAgICAgIGUudGFyZ2V0Lm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50XG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHRhcmdldCQxLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBuYW1lLFxuICAgICAgaGFuZGxlcixcbiAgICAgIHN1cHBvcnRzUGFzc2l2ZVxuICAgICAgICA/IHsgY2FwdHVyZTogY2FwdHVyZSwgcGFzc2l2ZTogcGFzc2l2ZSB9XG4gICAgICAgIDogY2FwdHVyZVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUkMiAoXG4gICAgbmFtZSxcbiAgICBoYW5kbGVyLFxuICAgIGNhcHR1cmUsXG4gICAgX3RhcmdldFxuICApIHtcbiAgICAoX3RhcmdldCB8fCB0YXJnZXQkMSkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgIG5hbWUsXG4gICAgICBoYW5kbGVyLl93cmFwcGVyIHx8IGhhbmRsZXIsXG4gICAgICBjYXB0dXJlXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZURPTUxpc3RlbmVycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5vbikgJiYgaXNVbmRlZih2bm9kZS5kYXRhLm9uKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciBvbiA9IHZub2RlLmRhdGEub24gfHwge307XG4gICAgdmFyIG9sZE9uID0gb2xkVm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgICB0YXJnZXQkMSA9IHZub2RlLmVsbTtcbiAgICBub3JtYWxpemVFdmVudHMob24pO1xuICAgIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCQxLCByZW1vdmUkMiwgY3JlYXRlT25jZUhhbmRsZXIkMSwgdm5vZGUuY29udGV4dCk7XG4gICAgdGFyZ2V0JDEgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgZXZlbnRzID0ge1xuICAgIGNyZWF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzLFxuICAgIHVwZGF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzXG4gIH07XG5cbiAgLyogICovXG5cbiAgdmFyIHN2Z0NvbnRhaW5lcjtcblxuICBmdW5jdGlvbiB1cGRhdGVET01Qcm9wcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5kb21Qcm9wcykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmRvbVByb3BzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciBrZXksIGN1cjtcbiAgICB2YXIgZWxtID0gdm5vZGUuZWxtO1xuICAgIHZhciBvbGRQcm9wcyA9IG9sZFZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gICAgdmFyIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBtdXRhdGUgaXRcbiAgICBpZiAoaXNEZWYocHJvcHMuX19vYl9fKSkge1xuICAgICAgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzID0gZXh0ZW5kKHt9LCBwcm9wcyk7XG4gICAgfVxuXG4gICAgZm9yIChrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm9wcykpIHtcbiAgICAgICAgZWxtW2tleV0gPSAnJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGtleSBpbiBwcm9wcykge1xuICAgICAgY3VyID0gcHJvcHNba2V5XTtcbiAgICAgIC8vIGlnbm9yZSBjaGlsZHJlbiBpZiB0aGUgbm9kZSBoYXMgdGV4dENvbnRlbnQgb3IgaW5uZXJIVE1MLFxuICAgICAgLy8gYXMgdGhlc2Ugd2lsbCB0aHJvdyBhd2F5IGV4aXN0aW5nIERPTSBub2RlcyBhbmQgY2F1c2UgcmVtb3ZhbCBlcnJvcnNcbiAgICAgIC8vIG9uIHN1YnNlcXVlbnQgcGF0Y2hlcyAoIzMzNjApXG4gICAgICBpZiAoa2V5ID09PSAndGV4dENvbnRlbnQnIHx8IGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgICAgaWYgKHZub2RlLmNoaWxkcmVuKSB7IHZub2RlLmNoaWxkcmVuLmxlbmd0aCA9IDA7IH1cbiAgICAgICAgaWYgKGN1ciA9PT0gb2xkUHJvcHNba2V5XSkgeyBjb250aW51ZSB9XG4gICAgICAgIC8vICM2NjAxIHdvcmsgYXJvdW5kIENocm9tZSB2ZXJzaW9uIDw9IDU1IGJ1ZyB3aGVyZSBzaW5nbGUgdGV4dE5vZGVcbiAgICAgICAgLy8gcmVwbGFjZWQgYnkgaW5uZXJIVE1ML3RleHRDb250ZW50IHJldGFpbnMgaXRzIHBhcmVudE5vZGUgcHJvcGVydHlcbiAgICAgICAgaWYgKGVsbS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uY2hpbGROb2Rlc1swXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gJ3ZhbHVlJyAmJiBlbG0udGFnTmFtZSAhPT0gJ1BST0dSRVNTJykge1xuICAgICAgICAvLyBzdG9yZSB2YWx1ZSBhcyBfdmFsdWUgYXMgd2VsbCBzaW5jZVxuICAgICAgICAvLyBub24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIHN0cmluZ2lmaWVkXG4gICAgICAgIGVsbS5fdmFsdWUgPSBjdXI7XG4gICAgICAgIC8vIGF2b2lkIHJlc2V0dGluZyBjdXJzb3IgcG9zaXRpb24gd2hlbiB2YWx1ZSBpcyB0aGUgc2FtZVxuICAgICAgICB2YXIgc3RyQ3VyID0gaXNVbmRlZihjdXIpID8gJycgOiBTdHJpbmcoY3VyKTtcbiAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVZhbHVlKGVsbSwgc3RyQ3VyKSkge1xuICAgICAgICAgIGVsbS52YWx1ZSA9IHN0ckN1cjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdpbm5lckhUTUwnICYmIGlzU1ZHKGVsbS50YWdOYW1lKSAmJiBpc1VuZGVmKGVsbS5pbm5lckhUTUwpKSB7XG4gICAgICAgIC8vIElFIGRvZXNuJ3Qgc3VwcG9ydCBpbm5lckhUTUwgZm9yIFNWRyBlbGVtZW50c1xuICAgICAgICBzdmdDb250YWluZXIgPSBzdmdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHN2Z0NvbnRhaW5lci5pbm5lckhUTUwgPSBcIjxzdmc+XCIgKyBjdXIgKyBcIjwvc3ZnPlwiO1xuICAgICAgICB2YXIgc3ZnID0gc3ZnQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIHdoaWxlIChlbG0uZmlyc3RDaGlsZCkge1xuICAgICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHN2Zy5maXJzdENoaWxkKSB7XG4gICAgICAgICAgZWxtLmFwcGVuZENoaWxkKHN2Zy5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgLy8gc2tpcCB0aGUgdXBkYXRlIGlmIG9sZCBhbmQgbmV3IFZET00gc3RhdGUgaXMgdGhlIHNhbWUuXG4gICAgICAgIC8vIGB2YWx1ZWAgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5IGJlY2F1c2UgdGhlIERPTSB2YWx1ZSBtYXkgYmUgdGVtcG9yYXJpbHlcbiAgICAgICAgLy8gb3V0IG9mIHN5bmMgd2l0aCBWRE9NIHN0YXRlIGR1ZSB0byBmb2N1cywgY29tcG9zaXRpb24gYW5kIG1vZGlmaWVycy5cbiAgICAgICAgLy8gVGhpcyAgIzQ1MjEgYnkgc2tpcHBpbmcgdGhlIHVubmVjZXNhcnJ5IGBjaGVja2VkYCB1cGRhdGUuXG4gICAgICAgIGN1ciAhPT0gb2xkUHJvcHNba2V5XVxuICAgICAgKSB7XG4gICAgICAgIC8vIHNvbWUgcHJvcGVydHkgdXBkYXRlcyBjYW4gdGhyb3dcbiAgICAgICAgLy8gZS5nLiBgdmFsdWVgIG9uIDxwcm9ncmVzcz4gdy8gbm9uLWZpbml0ZSB2YWx1ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGVsbVtrZXldID0gY3VyO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGNoZWNrIHBsYXRmb3Jtcy93ZWIvdXRpbC9hdHRycy5qcyBhY2NlcHRWYWx1ZVxuXG5cbiAgZnVuY3Rpb24gc2hvdWxkVXBkYXRlVmFsdWUgKGVsbSwgY2hlY2tWYWwpIHtcbiAgICByZXR1cm4gKCFlbG0uY29tcG9zaW5nICYmIChcbiAgICAgIGVsbS50YWdOYW1lID09PSAnT1BUSU9OJyB8fFxuICAgICAgaXNOb3RJbkZvY3VzQW5kRGlydHkoZWxtLCBjaGVja1ZhbCkgfHxcbiAgICAgIGlzRGlydHlXaXRoTW9kaWZpZXJzKGVsbSwgY2hlY2tWYWwpXG4gICAgKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm90SW5Gb2N1c0FuZERpcnR5IChlbG0sIGNoZWNrVmFsKSB7XG4gICAgLy8gcmV0dXJuIHRydWUgd2hlbiB0ZXh0Ym94ICgubnVtYmVyIGFuZCAudHJpbSkgbG9zZXMgZm9jdXMgYW5kIGl0cyB2YWx1ZSBpc1xuICAgIC8vIG5vdCBlcXVhbCB0byB0aGUgdXBkYXRlZCB2YWx1ZVxuICAgIHZhciBub3RJbkZvY3VzID0gdHJ1ZTtcbiAgICAvLyAjNjE1N1xuICAgIC8vIHdvcmsgYXJvdW5kIElFIGJ1ZyB3aGVuIGFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluIGFuIGlmcmFtZVxuICAgIHRyeSB7IG5vdEluRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBlbG07IH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIG5vdEluRm9jdXMgJiYgZWxtLnZhbHVlICE9PSBjaGVja1ZhbFxuICB9XG5cbiAgZnVuY3Rpb24gaXNEaXJ0eVdpdGhNb2RpZmllcnMgKGVsbSwgbmV3VmFsKSB7XG4gICAgdmFyIHZhbHVlID0gZWxtLnZhbHVlO1xuICAgIHZhciBtb2RpZmllcnMgPSBlbG0uX3ZNb2RpZmllcnM7IC8vIGluamVjdGVkIGJ5IHYtbW9kZWwgcnVudGltZVxuICAgIGlmIChpc0RlZihtb2RpZmllcnMpKSB7XG4gICAgICBpZiAobW9kaWZpZXJzLm51bWJlcikge1xuICAgICAgICByZXR1cm4gdG9OdW1iZXIodmFsdWUpICE9PSB0b051bWJlcihuZXdWYWwpXG4gICAgICB9XG4gICAgICBpZiAobW9kaWZpZXJzLnRyaW0pIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKSAhPT0gbmV3VmFsLnRyaW0oKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWUgIT09IG5ld1ZhbFxuICB9XG5cbiAgdmFyIGRvbVByb3BzID0ge1xuICAgIGNyZWF0ZTogdXBkYXRlRE9NUHJvcHMsXG4gICAgdXBkYXRlOiB1cGRhdGVET01Qcm9wc1xuICB9O1xuXG4gIC8qICAqL1xuXG4gIHZhciBwYXJzZVN0eWxlVGV4dCA9IGNhY2hlZChmdW5jdGlvbiAoY3NzVGV4dCkge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICB2YXIgbGlzdERlbGltaXRlciA9IC87KD8hW14oXSpcXCkpL2c7XG4gICAgdmFyIHByb3BlcnR5RGVsaW1pdGVyID0gLzooLispLztcbiAgICBjc3NUZXh0LnNwbGl0KGxpc3REZWxpbWl0ZXIpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIHZhciB0bXAgPSBpdGVtLnNwbGl0KHByb3BlcnR5RGVsaW1pdGVyKTtcbiAgICAgICAgdG1wLmxlbmd0aCA+IDEgJiYgKHJlc1t0bXBbMF0udHJpbSgpXSA9IHRtcFsxXS50cmltKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXNcbiAgfSk7XG5cbiAgLy8gbWVyZ2Ugc3RhdGljIGFuZCBkeW5hbWljIHN0eWxlIGRhdGEgb24gdGhlIHNhbWUgdm5vZGVcbiAgZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVEYXRhIChkYXRhKSB7XG4gICAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKGRhdGEuc3R5bGUpO1xuICAgIC8vIHN0YXRpYyBzdHlsZSBpcyBwcmUtcHJvY2Vzc2VkIGludG8gYW4gb2JqZWN0IGR1cmluZyBjb21waWxhdGlvblxuICAgIC8vIGFuZCBpcyBhbHdheXMgYSBmcmVzaCBvYmplY3QsIHNvIGl0J3Mgc2FmZSB0byBtZXJnZSBpbnRvIGl0XG4gICAgcmV0dXJuIGRhdGEuc3RhdGljU3R5bGVcbiAgICAgID8gZXh0ZW5kKGRhdGEuc3RhdGljU3R5bGUsIHN0eWxlKVxuICAgICAgOiBzdHlsZVxuICB9XG5cbiAgLy8gbm9ybWFsaXplIHBvc3NpYmxlIGFycmF5IC8gc3RyaW5nIHZhbHVlcyBpbnRvIE9iamVjdFxuICBmdW5jdGlvbiBub3JtYWxpemVTdHlsZUJpbmRpbmcgKGJpbmRpbmdTdHlsZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGJpbmRpbmdTdHlsZSkpIHtcbiAgICAgIHJldHVybiB0b09iamVjdChiaW5kaW5nU3R5bGUpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgYmluZGluZ1N0eWxlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHBhcnNlU3R5bGVUZXh0KGJpbmRpbmdTdHlsZSlcbiAgICB9XG4gICAgcmV0dXJuIGJpbmRpbmdTdHlsZVxuICB9XG5cbiAgLyoqXG4gICAqIHBhcmVudCBjb21wb25lbnQgc3R5bGUgc2hvdWxkIGJlIGFmdGVyIGNoaWxkJ3NcbiAgICogc28gdGhhdCBwYXJlbnQgY29tcG9uZW50J3Mgc3R5bGUgY291bGQgb3ZlcnJpZGUgaXRcbiAgICovXG4gIGZ1bmN0aW9uIGdldFN0eWxlICh2bm9kZSwgY2hlY2tDaGlsZCkge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICB2YXIgc3R5bGVEYXRhO1xuXG4gICAgaWYgKGNoZWNrQ2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgICAgIHdoaWxlIChjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoaWxkTm9kZSAmJiBjaGlsZE5vZGUuZGF0YSAmJlxuICAgICAgICAgIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEoY2hpbGROb2RlLmRhdGEpKVxuICAgICAgICApIHtcbiAgICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEodm5vZGUuZGF0YSkpKSB7XG4gICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgIH1cblxuICAgIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gICAgd2hpbGUgKChwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnQpKSB7XG4gICAgICBpZiAocGFyZW50Tm9kZS5kYXRhICYmIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEocGFyZW50Tm9kZS5kYXRhKSkpIHtcbiAgICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIGNzc1ZhclJFID0gL14tLS87XG4gIHZhciBpbXBvcnRhbnRSRSA9IC9cXHMqIWltcG9ydGFudCQvO1xuICB2YXIgc2V0UHJvcCA9IGZ1bmN0aW9uIChlbCwgbmFtZSwgdmFsKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGNzc1ZhclJFLnRlc3QobmFtZSkpIHtcbiAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpbXBvcnRhbnRSRS50ZXN0KHZhbCkpIHtcbiAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KGh5cGhlbmF0ZShuYW1lKSwgdmFsLnJlcGxhY2UoaW1wb3J0YW50UkUsICcnKSwgJ2ltcG9ydGFudCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgdmFsdWVzIGFycmF5IGNyZWF0ZWQgYnkgYXV0b3ByZWZpeGVyLCBlLmcuXG4gICAgICAgIC8vIHtkaXNwbGF5OiBbXCItd2Via2l0LWJveFwiLCBcIi1tcy1mbGV4Ym94XCIsIFwiZmxleFwiXX1cbiAgICAgICAgLy8gU2V0IHRoZW0gb25lIGJ5IG9uZSwgYW5kIHRoZSBicm93c2VyIHdpbGwgb25seSBzZXQgdGhvc2UgaXQgY2FuIHJlY29nbml6ZVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsW2ldO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5zdHlsZVtub3JtYWxpemVkTmFtZV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciB2ZW5kb3JOYW1lcyA9IFsnV2Via2l0JywgJ01veicsICdtcyddO1xuXG4gIHZhciBlbXB0eVN0eWxlO1xuICB2YXIgbm9ybWFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgZW1wdHlTdHlsZSA9IGVtcHR5U3R5bGUgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG4gICAgcHJvcCA9IGNhbWVsaXplKHByb3ApO1xuICAgIGlmIChwcm9wICE9PSAnZmlsdGVyJyAmJiAocHJvcCBpbiBlbXB0eVN0eWxlKSkge1xuICAgICAgcmV0dXJuIHByb3BcbiAgICB9XG4gICAgdmFyIGNhcE5hbWUgPSBwcm9wLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcC5zbGljZSgxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlbmRvck5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHZlbmRvck5hbWVzW2ldICsgY2FwTmFtZTtcbiAgICAgIGlmIChuYW1lIGluIGVtcHR5U3R5bGUpIHtcbiAgICAgICAgcmV0dXJuIG5hbWVcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuXG4gICAgaWYgKGlzVW5kZWYoZGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihkYXRhLnN0eWxlKSAmJlxuICAgICAgaXNVbmRlZihvbGREYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKG9sZERhdGEuc3R5bGUpXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgY3VyLCBuYW1lO1xuICAgIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgICB2YXIgb2xkU3RhdGljU3R5bGUgPSBvbGREYXRhLnN0YXRpY1N0eWxlO1xuICAgIHZhciBvbGRTdHlsZUJpbmRpbmcgPSBvbGREYXRhLm5vcm1hbGl6ZWRTdHlsZSB8fCBvbGREYXRhLnN0eWxlIHx8IHt9O1xuXG4gICAgLy8gaWYgc3RhdGljIHN0eWxlIGV4aXN0cywgc3R5bGViaW5kaW5nIGFscmVhZHkgbWVyZ2VkIGludG8gaXQgd2hlbiBkb2luZyBub3JtYWxpemVTdHlsZURhdGFcbiAgICB2YXIgb2xkU3R5bGUgPSBvbGRTdGF0aWNTdHlsZSB8fCBvbGRTdHlsZUJpbmRpbmc7XG5cbiAgICB2YXIgc3R5bGUgPSBub3JtYWxpemVTdHlsZUJpbmRpbmcodm5vZGUuZGF0YS5zdHlsZSkgfHwge307XG5cbiAgICAvLyBzdG9yZSBub3JtYWxpemVkIHN0eWxlIHVuZGVyIGEgZGlmZmVyZW50IGtleSBmb3IgbmV4dCBkaWZmXG4gICAgLy8gbWFrZSBzdXJlIHRvIGNsb25lIGl0IGlmIGl0J3MgcmVhY3RpdmUsIHNpbmNlIHRoZSB1c2VyIGxpa2VseSB3YW50c1xuICAgIC8vIHRvIG11dGF0ZSBpdC5cbiAgICB2bm9kZS5kYXRhLm5vcm1hbGl6ZWRTdHlsZSA9IGlzRGVmKHN0eWxlLl9fb2JfXylcbiAgICAgID8gZXh0ZW5kKHt9LCBzdHlsZSlcbiAgICAgIDogc3R5bGU7XG5cbiAgICB2YXIgbmV3U3R5bGUgPSBnZXRTdHlsZSh2bm9kZSwgdHJ1ZSk7XG5cbiAgICBmb3IgKG5hbWUgaW4gb2xkU3R5bGUpIHtcbiAgICAgIGlmIChpc1VuZGVmKG5ld1N0eWxlW25hbWVdKSkge1xuICAgICAgICBzZXRQcm9wKGVsLCBuYW1lLCAnJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobmFtZSBpbiBuZXdTdHlsZSkge1xuICAgICAgY3VyID0gbmV3U3R5bGVbbmFtZV07XG4gICAgICBpZiAoY3VyICE9PSBvbGRTdHlsZVtuYW1lXSkge1xuICAgICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBubyBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xuICAgICAgICBzZXRQcm9wKGVsLCBuYW1lLCBjdXIgPT0gbnVsbCA/ICcnIDogY3VyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgc3R5bGUgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVTdHlsZSxcbiAgICB1cGRhdGU6IHVwZGF0ZVN0eWxlXG4gIH07XG5cbiAgLyogICovXG5cbiAgdmFyIHdoaXRlc3BhY2VSRSA9IC9cXHMrLztcblxuICAvKipcbiAgICogQWRkIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gICAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICAgKi9cbiAgZnVuY3Rpb24gYWRkQ2xhc3MgKGVsLCBjbHMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNscyB8fCAhKGNscyA9IGNscy50cmltKCkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgICAgY2xzLnNwbGl0KHdoaXRlc3BhY2VSRSkuZm9yRWFjaChmdW5jdGlvbiAoYykgeyByZXR1cm4gZWwuY2xhc3NMaXN0LmFkZChjKTsgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKGNscyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjdXIgPSBcIiBcIiArIChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgXCIgXCI7XG4gICAgICBpZiAoY3VyLmluZGV4T2YoJyAnICsgY2xzICsgJyAnKSA8IDApIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIChjdXIgKyBjbHMpLnRyaW0oKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBjbGFzcyB3aXRoIGNvbXBhdGliaWxpdHkgZm9yIFNWRyBzaW5jZSBjbGFzc0xpc3QgaXMgbm90IHN1cHBvcnRlZCBvblxuICAgKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZUNsYXNzIChlbCwgY2xzKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICAgIGNscy5zcGxpdCh3aGl0ZXNwYWNlUkUpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoYyk7IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgICAgfVxuICAgICAgaWYgKCFlbC5jbGFzc0xpc3QubGVuZ3RoKSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGN1ciA9IFwiIFwiICsgKGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyBcIiBcIjtcbiAgICAgIHZhciB0YXIgPSAnICcgKyBjbHMgKyAnICc7XG4gICAgICB3aGlsZSAoY3VyLmluZGV4T2YodGFyKSA+PSAwKSB7XG4gICAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKHRhciwgJyAnKTtcbiAgICAgIH1cbiAgICAgIGN1ciA9IGN1ci50cmltKCk7XG4gICAgICBpZiAoY3VyKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjdXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIHJlc29sdmVUcmFuc2l0aW9uIChkZWYkJDEpIHtcbiAgICBpZiAoIWRlZiQkMSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgcmVzID0ge307XG4gICAgICBpZiAoZGVmJCQxLmNzcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgZXh0ZW5kKHJlcywgYXV0b0Nzc1RyYW5zaXRpb24oZGVmJCQxLm5hbWUgfHwgJ3YnKSk7XG4gICAgICB9XG4gICAgICBleHRlbmQocmVzLCBkZWYkJDEpO1xuICAgICAgcmV0dXJuIHJlc1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZiQkMSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBhdXRvQ3NzVHJhbnNpdGlvbihkZWYkJDEpXG4gICAgfVxuICB9XG5cbiAgdmFyIGF1dG9Dc3NUcmFuc2l0aW9uID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGVyQ2xhc3M6IChuYW1lICsgXCItZW50ZXJcIiksXG4gICAgICBlbnRlclRvQ2xhc3M6IChuYW1lICsgXCItZW50ZXItdG9cIiksXG4gICAgICBlbnRlckFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWVudGVyLWFjdGl2ZVwiKSxcbiAgICAgIGxlYXZlQ2xhc3M6IChuYW1lICsgXCItbGVhdmVcIiksXG4gICAgICBsZWF2ZVRvQ2xhc3M6IChuYW1lICsgXCItbGVhdmUtdG9cIiksXG4gICAgICBsZWF2ZUFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWxlYXZlLWFjdGl2ZVwiKVxuICAgIH1cbiAgfSk7XG5cbiAgdmFyIGhhc1RyYW5zaXRpb24gPSBpbkJyb3dzZXIgJiYgIWlzSUU5O1xuICB2YXIgVFJBTlNJVElPTiA9ICd0cmFuc2l0aW9uJztcbiAgdmFyIEFOSU1BVElPTiA9ICdhbmltYXRpb24nO1xuXG4gIC8vIFRyYW5zaXRpb24gcHJvcGVydHkvZXZlbnQgc25pZmZpbmdcbiAgdmFyIHRyYW5zaXRpb25Qcm9wID0gJ3RyYW5zaXRpb24nO1xuICB2YXIgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3RyYW5zaXRpb25lbmQnO1xuICB2YXIgYW5pbWF0aW9uUHJvcCA9ICdhbmltYXRpb24nO1xuICB2YXIgYW5pbWF0aW9uRW5kRXZlbnQgPSAnYW5pbWF0aW9uZW5kJztcbiAgaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAod2luZG93Lm9udHJhbnNpdGlvbmVuZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICB3aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRyYW5zaXRpb25Qcm9wID0gJ1dlYmtpdFRyYW5zaXRpb24nO1xuICAgICAgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICAgIH1cbiAgICBpZiAod2luZG93Lm9uYW5pbWF0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBhbmltYXRpb25Qcm9wID0gJ1dlYmtpdEFuaW1hdGlvbic7XG4gICAgICBhbmltYXRpb25FbmRFdmVudCA9ICd3ZWJraXRBbmltYXRpb25FbmQnO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpbmRpbmcgdG8gd2luZG93IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGhvdCByZWxvYWQgd29yayBpbiBJRSBpbiBzdHJpY3QgbW9kZVxuICB2YXIgcmFmID0gaW5Ccm93c2VyXG4gICAgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpXG4gICAgICA6IHNldFRpbWVvdXRcbiAgICA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uIChmbikgeyByZXR1cm4gZm4oKTsgfTtcblxuICBmdW5jdGlvbiBuZXh0RnJhbWUgKGZuKSB7XG4gICAgcmFmKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJhZihmbik7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRUcmFuc2l0aW9uQ2xhc3MgKGVsLCBjbHMpIHtcbiAgICB2YXIgdHJhbnNpdGlvbkNsYXNzZXMgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXMgfHwgKGVsLl90cmFuc2l0aW9uQ2xhc3NlcyA9IFtdKTtcbiAgICBpZiAodHJhbnNpdGlvbkNsYXNzZXMuaW5kZXhPZihjbHMpIDwgMCkge1xuICAgICAgdHJhbnNpdGlvbkNsYXNzZXMucHVzaChjbHMpO1xuICAgICAgYWRkQ2xhc3MoZWwsIGNscyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbkNsYXNzIChlbCwgY2xzKSB7XG4gICAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgICAgcmVtb3ZlKGVsLl90cmFuc2l0aW9uQ2xhc3NlcywgY2xzKTtcbiAgICB9XG4gICAgcmVtb3ZlQ2xhc3MoZWwsIGNscyk7XG4gIH1cblxuICBmdW5jdGlvbiB3aGVuVHJhbnNpdGlvbkVuZHMgKFxuICAgIGVsLFxuICAgIGV4cGVjdGVkVHlwZSxcbiAgICBjYlxuICApIHtcbiAgICB2YXIgcmVmID0gZ2V0VHJhbnNpdGlvbkluZm8oZWwsIGV4cGVjdGVkVHlwZSk7XG4gICAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgICB2YXIgdGltZW91dCA9IHJlZi50aW1lb3V0O1xuICAgIHZhciBwcm9wQ291bnQgPSByZWYucHJvcENvdW50O1xuICAgIGlmICghdHlwZSkgeyByZXR1cm4gY2IoKSB9XG4gICAgdmFyIGV2ZW50ID0gdHlwZSA9PT0gVFJBTlNJVElPTiA/IHRyYW5zaXRpb25FbmRFdmVudCA6IGFuaW1hdGlvbkVuZEV2ZW50O1xuICAgIHZhciBlbmRlZCA9IDA7XG4gICAgdmFyIGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbiAgICAgIGNiKCk7XG4gICAgfTtcbiAgICB2YXIgb25FbmQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGUudGFyZ2V0ID09PSBlbCkge1xuICAgICAgICBpZiAoKytlbmRlZCA+PSBwcm9wQ291bnQpIHtcbiAgICAgICAgICBlbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZW5kZWQgPCBwcm9wQ291bnQpIHtcbiAgICAgICAgZW5kKCk7XG4gICAgICB9XG4gICAgfSwgdGltZW91dCArIDEpO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbiAgfVxuXG4gIHZhciB0cmFuc2Zvcm1SRSA9IC9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87XG5cbiAgZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkluZm8gKGVsLCBleHBlY3RlZFR5cGUpIHtcbiAgICB2YXIgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuICAgIC8vIEpTRE9NIG1heSByZXR1cm4gdW5kZWZpbmVkIGZvciB0cmFuc2l0aW9uIHByb3BlcnRpZXNcbiAgICB2YXIgdHJhbnNpdGlvbkRlbGF5cyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbnMgPSAoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0R1cmF0aW9uJ10gfHwgJycpLnNwbGl0KCcsICcpO1xuICAgIHZhciB0cmFuc2l0aW9uVGltZW91dCA9IGdldFRpbWVvdXQodHJhbnNpdGlvbkRlbGF5cywgdHJhbnNpdGlvbkR1cmF0aW9ucyk7XG4gICAgdmFyIGFuaW1hdGlvbkRlbGF5cyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEZWxheSddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgICB2YXIgYW5pbWF0aW9uRHVyYXRpb25zID0gKHN0eWxlc1thbmltYXRpb25Qcm9wICsgJ0R1cmF0aW9uJ10gfHwgJycpLnNwbGl0KCcsICcpO1xuICAgIHZhciBhbmltYXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dChhbmltYXRpb25EZWxheXMsIGFuaW1hdGlvbkR1cmF0aW9ucyk7XG5cbiAgICB2YXIgdHlwZTtcbiAgICB2YXIgdGltZW91dCA9IDA7XG4gICAgdmFyIHByb3BDb3VudCA9IDA7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGV4cGVjdGVkVHlwZSA9PT0gVFJBTlNJVElPTikge1xuICAgICAgaWYgKHRyYW5zaXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgICB0eXBlID0gVFJBTlNJVElPTjtcbiAgICAgICAgdGltZW91dCA9IHRyYW5zaXRpb25UaW1lb3V0O1xuICAgICAgICBwcm9wQ291bnQgPSB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gQU5JTUFUSU9OKSB7XG4gICAgICBpZiAoYW5pbWF0aW9uVGltZW91dCA+IDApIHtcbiAgICAgICAgdHlwZSA9IEFOSU1BVElPTjtcbiAgICAgICAgdGltZW91dCA9IGFuaW1hdGlvblRpbWVvdXQ7XG4gICAgICAgIHByb3BDb3VudCA9IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVvdXQgPSBNYXRoLm1heCh0cmFuc2l0aW9uVGltZW91dCwgYW5pbWF0aW9uVGltZW91dCk7XG4gICAgICB0eXBlID0gdGltZW91dCA+IDBcbiAgICAgICAgPyB0cmFuc2l0aW9uVGltZW91dCA+IGFuaW1hdGlvblRpbWVvdXRcbiAgICAgICAgICA/IFRSQU5TSVRJT05cbiAgICAgICAgICA6IEFOSU1BVElPTlxuICAgICAgICA6IG51bGw7XG4gICAgICBwcm9wQ291bnQgPSB0eXBlXG4gICAgICAgID8gdHlwZSA9PT0gVFJBTlNJVElPTlxuICAgICAgICAgID8gdHJhbnNpdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgICAgICA6IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgICAgOiAwO1xuICAgIH1cbiAgICB2YXIgaGFzVHJhbnNmb3JtID1cbiAgICAgIHR5cGUgPT09IFRSQU5TSVRJT04gJiZcbiAgICAgIHRyYW5zZm9ybVJFLnRlc3Qoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ1Byb3BlcnR5J10pO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgdGltZW91dDogdGltZW91dCxcbiAgICAgIHByb3BDb3VudDogcHJvcENvdW50LFxuICAgICAgaGFzVHJhbnNmb3JtOiBoYXNUcmFuc2Zvcm1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUaW1lb3V0IChkZWxheXMsIGR1cmF0aW9ucykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgd2hpbGUgKGRlbGF5cy5sZW5ndGggPCBkdXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgICBkZWxheXMgPSBkZWxheXMuY29uY2F0KGRlbGF5cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGR1cmF0aW9ucy5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgIHJldHVybiB0b01zKGQpICsgdG9NcyhkZWxheXNbaV0pXG4gICAgfSkpXG4gIH1cblxuICAvLyBPbGQgdmVyc2lvbnMgb2YgQ2hyb21pdW0gKGJlbG93IDYxLjAuMzE2My4xMDApIGZvcm1hdHMgZmxvYXRpbmcgcG9pbnRlciBudW1iZXJzXG4gIC8vIGluIGEgbG9jYWxlLWRlcGVuZGVudCB3YXksIHVzaW5nIGEgY29tbWEgaW5zdGVhZCBvZiBhIGRvdC5cbiAgLy8gSWYgY29tbWEgaXMgbm90IHJlcGxhY2VkIHdpdGggYSBkb3QsIHRoZSBpbnB1dCB3aWxsIGJlIHJvdW5kZWQgZG93biAoaS5lLiBhY3RpbmdcbiAgLy8gYXMgYSBmbG9vciBmdW5jdGlvbikgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yc1xuICBmdW5jdGlvbiB0b01zIChzKSB7XG4gICAgcmV0dXJuIE51bWJlcihzLnNsaWNlKDAsIC0xKS5yZXBsYWNlKCcsJywgJy4nKSkgKiAxMDAwXG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBlbnRlciAodm5vZGUsIHRvZ2dsZURpc3BsYXkpIHtcbiAgICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgICAvLyBjYWxsIGxlYXZlIGNhbGxiYWNrIG5vd1xuICAgIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICAgIGVsLl9sZWF2ZUNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICBlbC5fbGVhdmVDYigpO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgICBpZiAoaXNVbmRlZihkYXRhKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGNzcyA9IGRhdGEuY3NzO1xuICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgIHZhciBlbnRlckNsYXNzID0gZGF0YS5lbnRlckNsYXNzO1xuICAgIHZhciBlbnRlclRvQ2xhc3MgPSBkYXRhLmVudGVyVG9DbGFzcztcbiAgICB2YXIgZW50ZXJBY3RpdmVDbGFzcyA9IGRhdGEuZW50ZXJBY3RpdmVDbGFzcztcbiAgICB2YXIgYXBwZWFyQ2xhc3MgPSBkYXRhLmFwcGVhckNsYXNzO1xuICAgIHZhciBhcHBlYXJUb0NsYXNzID0gZGF0YS5hcHBlYXJUb0NsYXNzO1xuICAgIHZhciBhcHBlYXJBY3RpdmVDbGFzcyA9IGRhdGEuYXBwZWFyQWN0aXZlQ2xhc3M7XG4gICAgdmFyIGJlZm9yZUVudGVyID0gZGF0YS5iZWZvcmVFbnRlcjtcbiAgICB2YXIgZW50ZXIgPSBkYXRhLmVudGVyO1xuICAgIHZhciBhZnRlckVudGVyID0gZGF0YS5hZnRlckVudGVyO1xuICAgIHZhciBlbnRlckNhbmNlbGxlZCA9IGRhdGEuZW50ZXJDYW5jZWxsZWQ7XG4gICAgdmFyIGJlZm9yZUFwcGVhciA9IGRhdGEuYmVmb3JlQXBwZWFyO1xuICAgIHZhciBhcHBlYXIgPSBkYXRhLmFwcGVhcjtcbiAgICB2YXIgYWZ0ZXJBcHBlYXIgPSBkYXRhLmFmdGVyQXBwZWFyO1xuICAgIHZhciBhcHBlYXJDYW5jZWxsZWQgPSBkYXRhLmFwcGVhckNhbmNlbGxlZDtcbiAgICB2YXIgZHVyYXRpb24gPSBkYXRhLmR1cmF0aW9uO1xuXG4gICAgLy8gYWN0aXZlSW5zdGFuY2Ugd2lsbCBhbHdheXMgYmUgdGhlIDx0cmFuc2l0aW9uPiBjb21wb25lbnQgbWFuYWdpbmcgdGhpc1xuICAgIC8vIHRyYW5zaXRpb24uIE9uZSBlZGdlIGNhc2UgdG8gY2hlY2sgaXMgd2hlbiB0aGUgPHRyYW5zaXRpb24+IGlzIHBsYWNlZFxuICAgIC8vIGFzIHRoZSByb290IG5vZGUgb2YgYSBjaGlsZCBjb21wb25lbnQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrXG4gICAgLy8gPHRyYW5zaXRpb24+J3MgcGFyZW50IGZvciBhcHBlYXIgY2hlY2suXG4gICAgdmFyIGNvbnRleHQgPSBhY3RpdmVJbnN0YW5jZTtcbiAgICB2YXIgdHJhbnNpdGlvbk5vZGUgPSBhY3RpdmVJbnN0YW5jZS4kdm5vZGU7XG4gICAgd2hpbGUgKHRyYW5zaXRpb25Ob2RlICYmIHRyYW5zaXRpb25Ob2RlLnBhcmVudCkge1xuICAgICAgY29udGV4dCA9IHRyYW5zaXRpb25Ob2RlLmNvbnRleHQ7XG4gICAgICB0cmFuc2l0aW9uTm9kZSA9IHRyYW5zaXRpb25Ob2RlLnBhcmVudDtcbiAgICB9XG5cbiAgICB2YXIgaXNBcHBlYXIgPSAhY29udGV4dC5faXNNb3VudGVkIHx8ICF2bm9kZS5pc1Jvb3RJbnNlcnQ7XG5cbiAgICBpZiAoaXNBcHBlYXIgJiYgIWFwcGVhciAmJiBhcHBlYXIgIT09ICcnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgc3RhcnRDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckNsYXNzXG4gICAgICA/IGFwcGVhckNsYXNzXG4gICAgICA6IGVudGVyQ2xhc3M7XG4gICAgdmFyIGFjdGl2ZUNsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQWN0aXZlQ2xhc3NcbiAgICAgID8gYXBwZWFyQWN0aXZlQ2xhc3NcbiAgICAgIDogZW50ZXJBY3RpdmVDbGFzcztcbiAgICB2YXIgdG9DbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhclRvQ2xhc3NcbiAgICAgID8gYXBwZWFyVG9DbGFzc1xuICAgICAgOiBlbnRlclRvQ2xhc3M7XG5cbiAgICB2YXIgYmVmb3JlRW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICAgID8gKGJlZm9yZUFwcGVhciB8fCBiZWZvcmVFbnRlcilcbiAgICAgIDogYmVmb3JlRW50ZXI7XG4gICAgdmFyIGVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgICA/ICh0eXBlb2YgYXBwZWFyID09PSAnZnVuY3Rpb24nID8gYXBwZWFyIDogZW50ZXIpXG4gICAgICA6IGVudGVyO1xuICAgIHZhciBhZnRlckVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgICA/IChhZnRlckFwcGVhciB8fCBhZnRlckVudGVyKVxuICAgICAgOiBhZnRlckVudGVyO1xuICAgIHZhciBlbnRlckNhbmNlbGxlZEhvb2sgPSBpc0FwcGVhclxuICAgICAgPyAoYXBwZWFyQ2FuY2VsbGVkIHx8IGVudGVyQ2FuY2VsbGVkKVxuICAgICAgOiBlbnRlckNhbmNlbGxlZDtcblxuICAgIHZhciBleHBsaWNpdEVudGVyRHVyYXRpb24gPSB0b051bWJlcihcbiAgICAgIGlzT2JqZWN0KGR1cmF0aW9uKVxuICAgICAgICA/IGR1cmF0aW9uLmVudGVyXG4gICAgICAgIDogZHVyYXRpb25cbiAgICApO1xuXG4gICAgaWYgKGV4cGxpY2l0RW50ZXJEdXJhdGlvbiAhPSBudWxsKSB7XG4gICAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbiwgJ2VudGVyJywgdm5vZGUpO1xuICAgIH1cblxuICAgIHZhciBleHBlY3RzQ1NTID0gY3NzICE9PSBmYWxzZSAmJiAhaXNJRTk7XG4gICAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGVudGVySG9vayk7XG5cbiAgICB2YXIgY2IgPSBlbC5fZW50ZXJDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgICB9XG4gICAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICBlbnRlckNhbmNlbGxlZEhvb2sgJiYgZW50ZXJDYW5jZWxsZWRIb29rKGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFmdGVyRW50ZXJIb29rICYmIGFmdGVyRW50ZXJIb29rKGVsKTtcbiAgICAgIH1cbiAgICAgIGVsLl9lbnRlckNiID0gbnVsbDtcbiAgICB9KTtcblxuICAgIGlmICghdm5vZGUuZGF0YS5zaG93KSB7XG4gICAgICAvLyByZW1vdmUgcGVuZGluZyBsZWF2ZSBlbGVtZW50IG9uIGVudGVyIGJ5IGluamVjdGluZyBhbiBpbnNlcnQgaG9va1xuICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xuICAgICAgICB2YXIgcGVuZGluZ05vZGUgPSBwYXJlbnQgJiYgcGFyZW50Ll9wZW5kaW5nICYmIHBhcmVudC5fcGVuZGluZ1t2bm9kZS5rZXldO1xuICAgICAgICBpZiAocGVuZGluZ05vZGUgJiZcbiAgICAgICAgICBwZW5kaW5nTm9kZS50YWcgPT09IHZub2RlLnRhZyAmJlxuICAgICAgICAgIHBlbmRpbmdOb2RlLmVsbS5fbGVhdmVDYlxuICAgICAgICApIHtcbiAgICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2IoKTtcbiAgICAgICAgfVxuICAgICAgICBlbnRlckhvb2sgJiYgZW50ZXJIb29rKGVsLCBjYik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzdGFydCBlbnRlciB0cmFuc2l0aW9uXG4gICAgYmVmb3JlRW50ZXJIb29rICYmIGJlZm9yZUVudGVySG9vayhlbCk7XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGFjdGl2ZUNsYXNzKTtcbiAgICAgIG5leHRGcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNiLCBleHBsaWNpdEVudGVyRHVyYXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodm5vZGUuZGF0YS5zaG93KSB7XG4gICAgICB0b2dnbGVEaXNwbGF5ICYmIHRvZ2dsZURpc3BsYXkoKTtcbiAgICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4cGVjdHNDU1MgJiYgIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgIGNiKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbGVhdmUgKHZub2RlLCBybSkge1xuICAgIHZhciBlbCA9IHZub2RlLmVsbTtcblxuICAgIC8vIGNhbGwgZW50ZXIgY2FsbGJhY2sgbm93XG4gICAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSkge1xuICAgICAgZWwuX2VudGVyQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgIGVsLl9lbnRlckNiKCk7XG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICAgIGlmIChpc1VuZGVmKGRhdGEpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgICByZXR1cm4gcm0oKVxuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBjc3MgPSBkYXRhLmNzcztcbiAgICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgICB2YXIgbGVhdmVDbGFzcyA9IGRhdGEubGVhdmVDbGFzcztcbiAgICB2YXIgbGVhdmVUb0NsYXNzID0gZGF0YS5sZWF2ZVRvQ2xhc3M7XG4gICAgdmFyIGxlYXZlQWN0aXZlQ2xhc3MgPSBkYXRhLmxlYXZlQWN0aXZlQ2xhc3M7XG4gICAgdmFyIGJlZm9yZUxlYXZlID0gZGF0YS5iZWZvcmVMZWF2ZTtcbiAgICB2YXIgbGVhdmUgPSBkYXRhLmxlYXZlO1xuICAgIHZhciBhZnRlckxlYXZlID0gZGF0YS5hZnRlckxlYXZlO1xuICAgIHZhciBsZWF2ZUNhbmNlbGxlZCA9IGRhdGEubGVhdmVDYW5jZWxsZWQ7XG4gICAgdmFyIGRlbGF5TGVhdmUgPSBkYXRhLmRlbGF5TGVhdmU7XG4gICAgdmFyIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcblxuICAgIHZhciBleHBlY3RzQ1NTID0gY3NzICE9PSBmYWxzZSAmJiAhaXNJRTk7XG4gICAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGxlYXZlKTtcblxuICAgIHZhciBleHBsaWNpdExlYXZlRHVyYXRpb24gPSB0b051bWJlcihcbiAgICAgIGlzT2JqZWN0KGR1cmF0aW9uKVxuICAgICAgICA/IGR1cmF0aW9uLmxlYXZlXG4gICAgICAgIDogZHVyYXRpb25cbiAgICApO1xuXG4gICAgaWYgKGlzRGVmKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRMZWF2ZUR1cmF0aW9uLCAnbGVhdmUnLCB2bm9kZSk7XG4gICAgfVxuXG4gICAgdmFyIGNiID0gZWwuX2xlYXZlQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChlbC5wYXJlbnROb2RlICYmIGVsLnBhcmVudE5vZGUuX3BlbmRpbmcpIHtcbiAgICAgICAgZWwucGFyZW50Tm9kZS5fcGVuZGluZ1t2bm9kZS5rZXldID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGxlYXZlQ2FuY2VsbGVkICYmIGxlYXZlQ2FuY2VsbGVkKGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJtKCk7XG4gICAgICAgIGFmdGVyTGVhdmUgJiYgYWZ0ZXJMZWF2ZShlbCk7XG4gICAgICB9XG4gICAgICBlbC5fbGVhdmVDYiA9IG51bGw7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVsYXlMZWF2ZSkge1xuICAgICAgZGVsYXlMZWF2ZShwZXJmb3JtTGVhdmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwZXJmb3JtTGVhdmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwZXJmb3JtTGVhdmUgKCkge1xuICAgICAgLy8gdGhlIGRlbGF5ZWQgbGVhdmUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNhbmNlbGxlZFxuICAgICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIHJlY29yZCBsZWF2aW5nIGVsZW1lbnRcbiAgICAgIGlmICghdm5vZGUuZGF0YS5zaG93ICYmIGVsLnBhcmVudE5vZGUpIHtcbiAgICAgICAgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgfHwgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgPSB7fSkpWyh2bm9kZS5rZXkpXSA9IHZub2RlO1xuICAgICAgfVxuICAgICAgYmVmb3JlTGVhdmUgJiYgYmVmb3JlTGVhdmUoZWwpO1xuICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVmFsaWREdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRMZWF2ZUR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGNiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsZWF2ZSAmJiBsZWF2ZShlbCwgY2IpO1xuICAgICAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgIGNiKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gb25seSB1c2VkIGluIGRldiBtb2RlXG4gIGZ1bmN0aW9uIGNoZWNrRHVyYXRpb24gKHZhbCwgbmFtZSwgdm5vZGUpIHtcbiAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIFwiICtcbiAgICAgICAgXCJnb3QgXCIgKyAoSlNPTi5zdHJpbmdpZnkodmFsKSkgKyBcIi5cIixcbiAgICAgICAgdm5vZGUuY29udGV4dFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzTmFOKHZhbCkpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIE5hTiAtIFwiICtcbiAgICAgICAgJ3RoZSBkdXJhdGlvbiBleHByZXNzaW9uIG1pZ2h0IGJlIGluY29ycmVjdC4nLFxuICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVmFsaWREdXJhdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmICFpc05hTih2YWwpXG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIGEgdHJhbnNpdGlvbiBob29rJ3MgYXJndW1lbnQgbGVuZ3RoLiBUaGUgaG9vayBtYXkgYmU6XG4gICAqIC0gYSBtZXJnZWQgaG9vayAoaW52b2tlcikgd2l0aCB0aGUgb3JpZ2luYWwgaW4gLmZuc1xuICAgKiAtIGEgd3JhcHBlZCBjb21wb25lbnQgbWV0aG9kIChjaGVjayAuX2xlbmd0aClcbiAgICogLSBhIHBsYWluIGZ1bmN0aW9uICgubGVuZ3RoKVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aCAoZm4pIHtcbiAgICBpZiAoaXNVbmRlZihmbikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICB2YXIgaW52b2tlckZucyA9IGZuLmZucztcbiAgICBpZiAoaXNEZWYoaW52b2tlckZucykpIHtcbiAgICAgIC8vIGludm9rZXJcbiAgICAgIHJldHVybiBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKFxuICAgICAgICBBcnJheS5pc0FycmF5KGludm9rZXJGbnMpXG4gICAgICAgICAgPyBpbnZva2VyRm5zWzBdXG4gICAgICAgICAgOiBpbnZva2VyRm5zXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoZm4uX2xlbmd0aCB8fCBmbi5sZW5ndGgpID4gMVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9lbnRlciAoXywgdm5vZGUpIHtcbiAgICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgICBlbnRlcih2bm9kZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHRyYW5zaXRpb24gPSBpbkJyb3dzZXIgPyB7XG4gICAgY3JlYXRlOiBfZW50ZXIsXG4gICAgYWN0aXZhdGU6IF9lbnRlcixcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSQkMSAodm5vZGUsIHJtKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHZub2RlLmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xuICAgICAgICBsZWF2ZSh2bm9kZSwgcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gOiB7fTtcblxuICB2YXIgcGxhdGZvcm1Nb2R1bGVzID0gW1xuICAgIGF0dHJzLFxuICAgIGtsYXNzLFxuICAgIGV2ZW50cyxcbiAgICBkb21Qcm9wcyxcbiAgICBzdHlsZSxcbiAgICB0cmFuc2l0aW9uXG4gIF07XG5cbiAgLyogICovXG5cbiAgLy8gdGhlIGRpcmVjdGl2ZSBtb2R1bGUgc2hvdWxkIGJlIGFwcGxpZWQgbGFzdCwgYWZ0ZXIgYWxsXG4gIC8vIGJ1aWx0LWluIG1vZHVsZXMgaGF2ZSBiZWVuIGFwcGxpZWQuXG4gIHZhciBtb2R1bGVzID0gcGxhdGZvcm1Nb2R1bGVzLmNvbmNhdChiYXNlTW9kdWxlcyk7XG5cbiAgdmFyIHBhdGNoID0gY3JlYXRlUGF0Y2hGdW5jdGlvbih7IG5vZGVPcHM6IG5vZGVPcHMsIG1vZHVsZXM6IG1vZHVsZXMgfSk7XG5cbiAgLyoqXG4gICAqIE5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBsaWtlIGF0dGFjaGluZ1xuICAgKiBwcm9wZXJ0aWVzIHRvIEVsZW1lbnRzLlxuICAgKi9cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzSUU5KSB7XG4gICAgLy8gaHR0cDovL3d3dy5tYXR0czQxMS5jb20vcG9zdC9pbnRlcm5ldC1leHBsb3Jlci05LW9uaW5wdXQvXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmIChlbCAmJiBlbC52bW9kZWwpIHtcbiAgICAgICAgdHJpZ2dlcihlbCwgJ2lucHV0Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB2YXIgZGlyZWN0aXZlID0ge1xuICAgIGluc2VydGVkOiBmdW5jdGlvbiBpbnNlcnRlZCAoZWwsIGJpbmRpbmcsIHZub2RlLCBvbGRWbm9kZSkge1xuICAgICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgLy8gIzY5MDNcbiAgICAgICAgaWYgKG9sZFZub2RlLmVsbSAmJiAhb2xkVm5vZGUuZWxtLl92T3B0aW9ucykge1xuICAgICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGlyZWN0aXZlLmNvbXBvbmVudFVwZGF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh2bm9kZS50YWcgPT09ICd0ZXh0YXJlYScgfHwgaXNUZXh0SW5wdXRUeXBlKGVsLnR5cGUpKSB7XG4gICAgICAgIGVsLl92TW9kaWZpZXJzID0gYmluZGluZy5tb2RpZmllcnM7XG4gICAgICAgIGlmICghYmluZGluZy5tb2RpZmllcnMubGF6eSkge1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCBvbkNvbXBvc2l0aW9uU3RhcnQpO1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgICAgLy8gU2FmYXJpIDwgMTAuMiAmIFVJV2ViVmlldyBkb2Vzbid0IGZpcmUgY29tcG9zaXRpb25lbmQgd2hlblxuICAgICAgICAgIC8vIHN3aXRjaGluZyBmb2N1cyBiZWZvcmUgY29uZmlybWluZyBjb21wb3NpdGlvbiBjaG9pY2VcbiAgICAgICAgICAvLyB0aGlzIGFsc28gZml4ZXMgdGhlIGlzc3VlIHdoZXJlIHNvbWUgYnJvd3NlcnMgZS5nLiBpT1MgQ2hyb21lXG4gICAgICAgICAgLy8gZmlyZXMgXCJjaGFuZ2VcIiBpbnN0ZWFkIG9mIFwiaW5wdXRcIiBvbiBhdXRvY29tcGxldGUuXG4gICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGlzSUU5KSB7XG4gICAgICAgICAgICBlbC52bW9kZWwgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRVcGRhdGVkOiBmdW5jdGlvbiBjb21wb25lbnRVcGRhdGVkIChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgb3B0aW9ucyByZW5kZXJlZCBieSB2LWZvciBoYXZlIGNoYW5nZWQsXG4gICAgICAgIC8vIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgdmFsdWUgaXMgb3V0LW9mLXN5bmMgd2l0aCB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAgICAgICAgLy8gZGV0ZWN0IHN1Y2ggY2FzZXMgYW5kIGZpbHRlciBvdXQgdmFsdWVzIHRoYXQgbm8gbG9uZ2VyIGhhcyBhIG1hdGNoaW5nXG4gICAgICAgIC8vIG9wdGlvbiBpbiB0aGUgRE9NLlxuICAgICAgICB2YXIgcHJldk9wdGlvbnMgPSBlbC5fdk9wdGlvbnM7XG4gICAgICAgIHZhciBjdXJPcHRpb25zID0gZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgICAgICBpZiAoY3VyT3B0aW9ucy5zb21lKGZ1bmN0aW9uIChvLCBpKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCBwcmV2T3B0aW9uc1tpXSk7IH0pKSB7XG4gICAgICAgICAgLy8gdHJpZ2dlciBjaGFuZ2UgZXZlbnQgaWZcbiAgICAgICAgICAvLyBubyBtYXRjaGluZyBvcHRpb24gZm91bmQgZm9yIGF0IGxlYXN0IG9uZSB2YWx1ZVxuICAgICAgICAgIHZhciBuZWVkUmVzZXQgPSBlbC5tdWx0aXBsZVxuICAgICAgICAgICAgPyBiaW5kaW5nLnZhbHVlLnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGhhc05vTWF0Y2hpbmdPcHRpb24odiwgY3VyT3B0aW9ucyk7IH0pXG4gICAgICAgICAgICA6IGJpbmRpbmcudmFsdWUgIT09IGJpbmRpbmcub2xkVmFsdWUgJiYgaGFzTm9NYXRjaGluZ09wdGlvbihiaW5kaW5nLnZhbHVlLCBjdXJPcHRpb25zKTtcbiAgICAgICAgICBpZiAobmVlZFJlc2V0KSB7XG4gICAgICAgICAgICB0cmlnZ2VyKGVsLCAnY2hhbmdlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGVkIChlbCwgYmluZGluZywgdm0pIHtcbiAgICBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzSUUgfHwgaXNFZGdlKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWN0dWFsbHlTZXRTZWxlY3RlZCAoZWwsIGJpbmRpbmcsIHZtKSB7XG4gICAgdmFyIHZhbHVlID0gYmluZGluZy52YWx1ZTtcbiAgICB2YXIgaXNNdWx0aXBsZSA9IGVsLm11bHRpcGxlO1xuICAgIGlmIChpc011bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgXCI8c2VsZWN0IG11bHRpcGxlIHYtbW9kZWw9XFxcIlwiICsgKGJpbmRpbmcuZXhwcmVzc2lvbikgKyBcIlxcXCI+IFwiICtcbiAgICAgICAgXCJleHBlY3RzIGFuIEFycmF5IHZhbHVlIGZvciBpdHMgYmluZGluZywgYnV0IGdvdCBcIiArIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKSksXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciBzZWxlY3RlZCwgb3B0aW9uO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gZWwub3B0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIG9wdGlvbiA9IGVsLm9wdGlvbnNbaV07XG4gICAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgICBzZWxlY3RlZCA9IGxvb3NlSW5kZXhPZih2YWx1ZSwgZ2V0VmFsdWUob3B0aW9uKSkgPiAtMTtcbiAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxvb3NlRXF1YWwoZ2V0VmFsdWUob3B0aW9uKSwgdmFsdWUpKSB7XG4gICAgICAgICAgaWYgKGVsLnNlbGVjdGVkSW5kZXggIT09IGkpIHtcbiAgICAgICAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYXNOb01hdGNoaW5nT3B0aW9uICh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLmV2ZXJ5KGZ1bmN0aW9uIChvKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCB2YWx1ZSk7IH0pXG4gIH1cblxuICBmdW5jdGlvbiBnZXRWYWx1ZSAob3B0aW9uKSB7XG4gICAgcmV0dXJuICdfdmFsdWUnIGluIG9wdGlvblxuICAgICAgPyBvcHRpb24uX3ZhbHVlXG4gICAgICA6IG9wdGlvbi52YWx1ZVxuICB9XG5cbiAgZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0IChlKSB7XG4gICAgZS50YXJnZXQuY29tcG9zaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ29tcG9zaXRpb25FbmQgKGUpIHtcbiAgICAvLyBwcmV2ZW50IHRyaWdnZXJpbmcgYW4gaW5wdXQgZXZlbnQgZm9yIG5vIHJlYXNvblxuICAgIGlmICghZS50YXJnZXQuY29tcG9zaW5nKSB7IHJldHVybiB9XG4gICAgZS50YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XG4gICAgdHJpZ2dlcihlLnRhcmdldCwgJ2lucHV0Jyk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmlnZ2VyIChlbCwgdHlwZSkge1xuICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgICBlLmluaXRFdmVudCh0eXBlLCB0cnVlLCB0cnVlKTtcbiAgICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xuICB9XG5cbiAgLyogICovXG5cbiAgLy8gcmVjdXJzaXZlbHkgc2VhcmNoIGZvciBwb3NzaWJsZSB0cmFuc2l0aW9uIGRlZmluZWQgaW5zaWRlIHRoZSBjb21wb25lbnQgcm9vdFxuICBmdW5jdGlvbiBsb2NhdGVOb2RlICh2bm9kZSkge1xuICAgIHJldHVybiB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJiAoIXZub2RlLmRhdGEgfHwgIXZub2RlLmRhdGEudHJhbnNpdGlvbilcbiAgICAgID8gbG9jYXRlTm9kZSh2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpXG4gICAgICA6IHZub2RlXG4gIH1cblxuICB2YXIgc2hvdyA9IHtcbiAgICBiaW5kOiBmdW5jdGlvbiBiaW5kIChlbCwgcmVmLCB2bm9kZSkge1xuICAgICAgdmFyIHZhbHVlID0gcmVmLnZhbHVlO1xuXG4gICAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgICAgdmFyIHRyYW5zaXRpb24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICAgIHZhciBvcmlnaW5hbERpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXkgPVxuICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnJyA6IGVsLnN0eWxlLmRpc3BsYXk7XG4gICAgICBpZiAodmFsdWUgJiYgdHJhbnNpdGlvbiQkMSkge1xuICAgICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBvcmlnaW5hbERpc3BsYXk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gb3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHJlZi52YWx1ZTtcbiAgICAgIHZhciBvbGRWYWx1ZSA9IHJlZi5vbGRWYWx1ZTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIXZhbHVlID09PSAhb2xkVmFsdWUpIHsgcmV0dXJuIH1cbiAgICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgICB2YXIgdHJhbnNpdGlvbiQkMSA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgICAgaWYgKHRyYW5zaXRpb24kJDEpIHtcbiAgICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgZW50ZXIodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGVhdmUodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IGVsLl9fdk9yaWdpbmFsRGlzcGxheSA6ICdub25lJztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW5iaW5kOiBmdW5jdGlvbiB1bmJpbmQgKFxuICAgICAgZWwsXG4gICAgICBiaW5kaW5nLFxuICAgICAgdm5vZGUsXG4gICAgICBvbGRWbm9kZSxcbiAgICAgIGlzRGVzdHJveVxuICAgICkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3kpIHtcbiAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIHBsYXRmb3JtRGlyZWN0aXZlcyA9IHtcbiAgICBtb2RlbDogZGlyZWN0aXZlLFxuICAgIHNob3c6IHNob3dcbiAgfTtcblxuICAvKiAgKi9cblxuICB2YXIgdHJhbnNpdGlvblByb3BzID0ge1xuICAgIG5hbWU6IFN0cmluZyxcbiAgICBhcHBlYXI6IEJvb2xlYW4sXG4gICAgY3NzOiBCb29sZWFuLFxuICAgIG1vZGU6IFN0cmluZyxcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgZW50ZXJDbGFzczogU3RyaW5nLFxuICAgIGxlYXZlQ2xhc3M6IFN0cmluZyxcbiAgICBlbnRlclRvQ2xhc3M6IFN0cmluZyxcbiAgICBsZWF2ZVRvQ2xhc3M6IFN0cmluZyxcbiAgICBlbnRlckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgbGVhdmVBY3RpdmVDbGFzczogU3RyaW5nLFxuICAgIGFwcGVhckNsYXNzOiBTdHJpbmcsXG4gICAgYXBwZWFyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgICBhcHBlYXJUb0NsYXNzOiBTdHJpbmcsXG4gICAgZHVyYXRpb246IFtOdW1iZXIsIFN0cmluZywgT2JqZWN0XVxuICB9O1xuXG4gIC8vIGluIGNhc2UgdGhlIGNoaWxkIGlzIGFsc28gYW4gYWJzdHJhY3QgY29tcG9uZW50LCBlLmcuIDxrZWVwLWFsaXZlPlxuICAvLyB3ZSB3YW50IHRvIHJlY3Vyc2l2ZWx5IHJldHJpZXZlIHRoZSByZWFsIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZFxuICBmdW5jdGlvbiBnZXRSZWFsQ2hpbGQgKHZub2RlKSB7XG4gICAgdmFyIGNvbXBPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoY29tcE9wdGlvbnMgJiYgY29tcE9wdGlvbnMuQ3Rvci5vcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICByZXR1cm4gZ2V0UmVhbENoaWxkKGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoY29tcE9wdGlvbnMuY2hpbGRyZW4pKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdm5vZGVcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBleHRyYWN0VHJhbnNpdGlvbkRhdGEgKGNvbXApIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBvcHRpb25zID0gY29tcC4kb3B0aW9ucztcbiAgICAvLyBwcm9wc1xuICAgIGZvciAodmFyIGtleSBpbiBvcHRpb25zLnByb3BzRGF0YSkge1xuICAgICAgZGF0YVtrZXldID0gY29tcFtrZXldO1xuICAgIH1cbiAgICAvLyBldmVudHMuXG4gICAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMgYW5kIHBhc3MgdGhlbSBkaXJlY3RseSB0byB0aGUgdHJhbnNpdGlvbiBtZXRob2RzXG4gICAgdmFyIGxpc3RlbmVycyA9IG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgICBmb3IgKHZhciBrZXkkMSBpbiBsaXN0ZW5lcnMpIHtcbiAgICAgIGRhdGFbY2FtZWxpemUoa2V5JDEpXSA9IGxpc3RlbmVyc1trZXkkMV07XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICBmdW5jdGlvbiBwbGFjZWhvbGRlciAoaCwgcmF3Q2hpbGQpIHtcbiAgICBpZiAoL1xcZC1rZWVwLWFsaXZlJC8udGVzdChyYXdDaGlsZC50YWcpKSB7XG4gICAgICByZXR1cm4gaCgna2VlcC1hbGl2ZScsIHtcbiAgICAgICAgcHJvcHM6IHJhd0NoaWxkLmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhc1BhcmVudFRyYW5zaXRpb24gKHZub2RlKSB7XG4gICAgd2hpbGUgKCh2bm9kZSA9IHZub2RlLnBhcmVudCkpIHtcbiAgICAgIGlmICh2bm9kZS5kYXRhLnRyYW5zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1NhbWVDaGlsZCAoY2hpbGQsIG9sZENoaWxkKSB7XG4gICAgcmV0dXJuIG9sZENoaWxkLmtleSA9PT0gY2hpbGQua2V5ICYmIG9sZENoaWxkLnRhZyA9PT0gY2hpbGQudGFnXG4gIH1cblxuICB2YXIgaXNOb3RUZXh0Tm9kZSA9IGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRhZyB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYyk7IH07XG5cbiAgdmFyIGlzVlNob3dEaXJlY3RpdmUgPSBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5uYW1lID09PSAnc2hvdyc7IH07XG5cbiAgdmFyIFRyYW5zaXRpb24gPSB7XG4gICAgbmFtZTogJ3RyYW5zaXRpb24nLFxuICAgIHByb3BzOiB0cmFuc2l0aW9uUHJvcHMsXG4gICAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBmaWx0ZXIgb3V0IHRleHQgbm9kZXMgKHBvc3NpYmxlIHdoaXRlc3BhY2VzKVxuICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoaXNOb3RUZXh0Tm9kZSk7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyB3YXJuIG11bHRpcGxlIGVsZW1lbnRzXG4gICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICc8dHJhbnNpdGlvbj4gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHNpbmdsZSBlbGVtZW50LiBVc2UgJyArXG4gICAgICAgICAgJzx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJyxcbiAgICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1vZGUgPSB0aGlzLm1vZGU7XG5cbiAgICAgIC8vIHdhcm4gaW52YWxpZCBtb2RlXG4gICAgICBpZiAobW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJ1xuICAgICAgKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ2ludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICcgKyBtb2RlLFxuICAgICAgICAgIHRoaXMuJHBhcmVudFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmF3Q2hpbGQgPSBjaGlsZHJlblswXTtcblxuICAgICAgLy8gaWYgdGhpcyBpcyBhIGNvbXBvbmVudCByb290IG5vZGUgYW5kIHRoZSBjb21wb25lbnQnc1xuICAgICAgLy8gcGFyZW50IGNvbnRhaW5lciBub2RlIGFsc28gaGFzIHRyYW5zaXRpb24sIHNraXAuXG4gICAgICBpZiAoaGFzUGFyZW50VHJhbnNpdGlvbih0aGlzLiR2bm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHJhd0NoaWxkXG4gICAgICB9XG5cbiAgICAgIC8vIGFwcGx5IHRyYW5zaXRpb24gZGF0YSB0byBjaGlsZFxuICAgICAgLy8gdXNlIGdldFJlYWxDaGlsZCgpIHRvIGlnbm9yZSBhYnN0cmFjdCBjb21wb25lbnRzIGUuZy4ga2VlcC1hbGl2ZVxuICAgICAgdmFyIGNoaWxkID0gZ2V0UmVhbENoaWxkKHJhd0NoaWxkKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2xlYXZpbmcpIHtcbiAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgICAgfVxuXG4gICAgICAvLyBlbnN1cmUgYSBrZXkgdGhhdCBpcyB1bmlxdWUgdG8gdGhlIHZub2RlIHR5cGUgYW5kIHRvIHRoaXMgdHJhbnNpdGlvblxuICAgICAgLy8gY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gcmVtb3ZlIHBlbmRpbmcgbGVhdmluZyBub2Rlc1xuICAgICAgLy8gZHVyaW5nIGVudGVyaW5nLlxuICAgICAgdmFyIGlkID0gXCJfX3RyYW5zaXRpb24tXCIgKyAodGhpcy5fdWlkKSArIFwiLVwiO1xuICAgICAgY2hpbGQua2V5ID0gY2hpbGQua2V5ID09IG51bGxcbiAgICAgICAgPyBjaGlsZC5pc0NvbW1lbnRcbiAgICAgICAgICA/IGlkICsgJ2NvbW1lbnQnXG4gICAgICAgICAgOiBpZCArIGNoaWxkLnRhZ1xuICAgICAgICA6IGlzUHJpbWl0aXZlKGNoaWxkLmtleSlcbiAgICAgICAgICA/IChTdHJpbmcoY2hpbGQua2V5KS5pbmRleE9mKGlkKSA9PT0gMCA/IGNoaWxkLmtleSA6IGlkICsgY2hpbGQua2V5KVxuICAgICAgICAgIDogY2hpbGQua2V5O1xuXG4gICAgICB2YXIgZGF0YSA9IChjaGlsZC5kYXRhIHx8IChjaGlsZC5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuICAgICAgdmFyIG9sZFJhd0NoaWxkID0gdGhpcy5fdm5vZGU7XG4gICAgICB2YXIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xuXG4gICAgICAvLyBtYXJrIHYtc2hvd1xuICAgICAgLy8gc28gdGhhdCB0aGUgdHJhbnNpdGlvbiBtb2R1bGUgY2FuIGhhbmQgb3ZlciB0aGUgY29udHJvbCB0byB0aGUgZGlyZWN0aXZlXG4gICAgICBpZiAoY2hpbGQuZGF0YS5kaXJlY3RpdmVzICYmIGNoaWxkLmRhdGEuZGlyZWN0aXZlcy5zb21lKGlzVlNob3dEaXJlY3RpdmUpKSB7XG4gICAgICAgIGNoaWxkLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgb2xkQ2hpbGQgJiZcbiAgICAgICAgb2xkQ2hpbGQuZGF0YSAmJlxuICAgICAgICAhaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxuICAgICAgICAhaXNBc3luY1BsYWNlaG9sZGVyKG9sZENoaWxkKSAmJlxuICAgICAgICAvLyAjNjY4NyBjb21wb25lbnQgcm9vdCBpcyBhIGNvbW1lbnQgbm9kZVxuICAgICAgICAhKG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlICYmIG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpXG4gICAgICApIHtcbiAgICAgICAgLy8gcmVwbGFjZSBvbGQgY2hpbGQgdHJhbnNpdGlvbiBkYXRhIHdpdGggZnJlc2ggb25lXG4gICAgICAgIC8vIGltcG9ydGFudCBmb3IgZHluYW1pYyB0cmFuc2l0aW9ucyFcbiAgICAgICAgdmFyIG9sZERhdGEgPSBvbGRDaGlsZC5kYXRhLnRyYW5zaXRpb24gPSBleHRlbmQoe30sIGRhdGEpO1xuICAgICAgICAvLyBoYW5kbGUgdHJhbnNpdGlvbiBtb2RlXG4gICAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xuICAgICAgICAgIC8vIHJldHVybiBwbGFjZWhvbGRlciBub2RlIGFuZCBxdWV1ZSB1cGRhdGUgd2hlbiBsZWF2ZSBmaW5pc2hlc1xuICAgICAgICAgIHRoaXMuX2xlYXZpbmcgPSB0cnVlO1xuICAgICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcyQxLl9sZWF2aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzJDEuJGZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdpbi1vdXQnKSB7XG4gICAgICAgICAgaWYgKGlzQXN5bmNQbGFjZWhvbGRlcihjaGlsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvbGRSYXdDaGlsZFxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgZGVsYXllZExlYXZlO1xuICAgICAgICAgIHZhciBwZXJmb3JtTGVhdmUgPSBmdW5jdGlvbiAoKSB7IGRlbGF5ZWRMZWF2ZSgpOyB9O1xuICAgICAgICAgIG1lcmdlVk5vZGVIb29rKGRhdGEsICdhZnRlckVudGVyJywgcGVyZm9ybUxlYXZlKTtcbiAgICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdkZWxheUxlYXZlJywgZnVuY3Rpb24gKGxlYXZlKSB7IGRlbGF5ZWRMZWF2ZSA9IGxlYXZlOyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG4gIH07XG5cbiAgLyogICovXG5cbiAgdmFyIHByb3BzID0gZXh0ZW5kKHtcbiAgICB0YWc6IFN0cmluZyxcbiAgICBtb3ZlQ2xhc3M6IFN0cmluZ1xuICB9LCB0cmFuc2l0aW9uUHJvcHMpO1xuXG4gIGRlbGV0ZSBwcm9wcy5tb2RlO1xuXG4gIHZhciBUcmFuc2l0aW9uR3JvdXAgPSB7XG4gICAgcHJvcHM6IHByb3BzLFxuXG4gICAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50ICgpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICB2YXIgdXBkYXRlID0gdGhpcy5fdXBkYXRlO1xuICAgICAgdGhpcy5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgICAgdmFyIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSA9IHNldEFjdGl2ZUluc3RhbmNlKHRoaXMkMSk7XG4gICAgICAgIC8vIGZvcmNlIHJlbW92aW5nIHBhc3NcbiAgICAgICAgdGhpcyQxLl9fcGF0Y2hfXyhcbiAgICAgICAgICB0aGlzJDEuX3Zub2RlLFxuICAgICAgICAgIHRoaXMkMS5rZXB0LFxuICAgICAgICAgIGZhbHNlLCAvLyBoeWRyYXRpbmdcbiAgICAgICAgICB0cnVlIC8vIHJlbW92ZU9ubHkgKCFpbXBvcnRhbnQsIGF2b2lkcyB1bm5lY2Vzc2FyeSBtb3ZlcylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcyQxLl92bm9kZSA9IHRoaXMkMS5rZXB0O1xuICAgICAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAgICAgdXBkYXRlLmNhbGwodGhpcyQxLCB2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoKSB7XG4gICAgICB2YXIgdGFnID0gdGhpcy50YWcgfHwgdGhpcy4kdm5vZGUuZGF0YS50YWcgfHwgJ3NwYW4nO1xuICAgICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICB2YXIgcHJldkNoaWxkcmVuID0gdGhpcy5wcmV2Q2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgdmFyIHJhd0NoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgIHZhciB0cmFuc2l0aW9uRGF0YSA9IGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYyA9IHJhd0NoaWxkcmVuW2ldO1xuICAgICAgICBpZiAoYy50YWcpIHtcbiAgICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjKTtcbiAgICAgICAgICAgIG1hcFtjLmtleV0gPSBjXG4gICAgICAgICAgICA7KGMuZGF0YSB8fCAoYy5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBvcHRzID0gYy5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBvcHRzID8gKG9wdHMuQ3Rvci5vcHRpb25zLm5hbWUgfHwgb3B0cy50YWcgfHwgJycpIDogYy50YWc7XG4gICAgICAgICAgICB3YXJuKChcIjx0cmFuc2l0aW9uLWdyb3VwPiBjaGlsZHJlbiBtdXN0IGJlIGtleWVkOiA8XCIgKyBuYW1lICsgXCI+XCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZDaGlsZHJlbikge1xuICAgICAgICB2YXIga2VwdCA9IFtdO1xuICAgICAgICB2YXIgcmVtb3ZlZCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBwcmV2Q2hpbGRyZW4ubGVuZ3RoOyBpJDErKykge1xuICAgICAgICAgIHZhciBjJDEgPSBwcmV2Q2hpbGRyZW5baSQxXTtcbiAgICAgICAgICBjJDEuZGF0YS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgICAgYyQxLmRhdGEucG9zID0gYyQxLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBpZiAobWFwW2MkMS5rZXldKSB7XG4gICAgICAgICAgICBrZXB0LnB1c2goYyQxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGMkMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMua2VwdCA9IGgodGFnLCBudWxsLCBrZXB0KTtcbiAgICAgICAgdGhpcy5yZW1vdmVkID0gcmVtb3ZlZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGgodGFnLCBudWxsLCBjaGlsZHJlbilcbiAgICB9LFxuXG4gICAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCAoKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbjtcbiAgICAgIHZhciBtb3ZlQ2xhc3MgPSB0aGlzLm1vdmVDbGFzcyB8fCAoKHRoaXMubmFtZSB8fCAndicpICsgJy1tb3ZlJyk7XG4gICAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5oYXNNb3ZlKGNoaWxkcmVuWzBdLmVsbSwgbW92ZUNsYXNzKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gd2UgZGl2aWRlIHRoZSB3b3JrIGludG8gdGhyZWUgbG9vcHMgdG8gYXZvaWQgbWl4aW5nIERPTSByZWFkcyBhbmQgd3JpdGVzXG4gICAgICAvLyBpbiBlYWNoIGl0ZXJhdGlvbiAtIHdoaWNoIGhlbHBzIHByZXZlbnQgbGF5b3V0IHRocmFzaGluZy5cbiAgICAgIGNoaWxkcmVuLmZvckVhY2goY2FsbFBlbmRpbmdDYnMpO1xuICAgICAgY2hpbGRyZW4uZm9yRWFjaChyZWNvcmRQb3NpdGlvbik7XG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKGFwcGx5VHJhbnNsYXRpb24pO1xuXG4gICAgICAvLyBmb3JjZSByZWZsb3cgdG8gcHV0IGV2ZXJ5dGhpbmcgaW4gcG9zaXRpb25cbiAgICAgIC8vIGFzc2lnbiB0byB0aGlzIHRvIGF2b2lkIGJlaW5nIHJlbW92ZWQgaW4gdHJlZS1zaGFraW5nXG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIHRoaXMuX3JlZmxvdyA9IGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChjLmRhdGEubW92ZWQpIHtcbiAgICAgICAgICB2YXIgZWwgPSBjLmVsbTtcbiAgICAgICAgICB2YXIgcyA9IGVsLnN0eWxlO1xuICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbW92ZUNsYXNzKTtcbiAgICAgICAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnJztcbiAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgZWwuX21vdmVDYiA9IGZ1bmN0aW9uIGNiIChlKSB7XG4gICAgICAgICAgICBpZiAoZSAmJiBlLnRhcmdldCAhPT0gZWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWUgfHwgL3RyYW5zZm9ybSQvLnRlc3QoZS5wcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCBjYik7XG4gICAgICAgICAgICAgIGVsLl9tb3ZlQ2IgPSBudWxsO1xuICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBoYXNNb3ZlOiBmdW5jdGlvbiBoYXNNb3ZlIChlbCwgbW92ZUNsYXNzKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWhhc1RyYW5zaXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHRoaXMuX2hhc01vdmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5faGFzTW92ZVxuICAgICAgICB9XG4gICAgICAgIC8vIERldGVjdCB3aGV0aGVyIGFuIGVsZW1lbnQgd2l0aCB0aGUgbW92ZSBjbGFzcyBhcHBsaWVkIGhhc1xuICAgICAgICAvLyBDU1MgdHJhbnNpdGlvbnMuIFNpbmNlIHRoZSBlbGVtZW50IG1heSBiZSBpbnNpZGUgYW4gZW50ZXJpbmdcbiAgICAgICAgLy8gdHJhbnNpdGlvbiBhdCB0aGlzIHZlcnkgbW9tZW50LCB3ZSBtYWtlIGEgY2xvbmUgb2YgaXQgYW5kIHJlbW92ZVxuICAgICAgICAvLyBhbGwgb3RoZXIgdHJhbnNpdGlvbiBjbGFzc2VzIGFwcGxpZWQgdG8gZW5zdXJlIG9ubHkgdGhlIG1vdmUgY2xhc3NcbiAgICAgICAgLy8gaXMgYXBwbGllZC5cbiAgICAgICAgdmFyIGNsb25lID0gZWwuY2xvbmVOb2RlKCk7XG4gICAgICAgIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICAgICAgICBlbC5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7IHJlbW92ZUNsYXNzKGNsb25lLCBjbHMpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRDbGFzcyhjbG9uZSwgbW92ZUNsYXNzKTtcbiAgICAgICAgY2xvbmUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgdGhpcy4kZWwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgICB2YXIgaW5mbyA9IGdldFRyYW5zaXRpb25JbmZvKGNsb25lKTtcbiAgICAgICAgdGhpcy4kZWwucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICAgICAgICByZXR1cm4gKHRoaXMuX2hhc01vdmUgPSBpbmZvLmhhc1RyYW5zZm9ybSlcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gY2FsbFBlbmRpbmdDYnMgKGMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoYy5lbG0uX21vdmVDYikge1xuICAgICAgYy5lbG0uX21vdmVDYigpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoYy5lbG0uX2VudGVyQ2IpIHtcbiAgICAgIGMuZWxtLl9lbnRlckNiKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24gKGMpIHtcbiAgICBjLmRhdGEubmV3UG9zID0gYy5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBseVRyYW5zbGF0aW9uIChjKSB7XG4gICAgdmFyIG9sZFBvcyA9IGMuZGF0YS5wb3M7XG4gICAgdmFyIG5ld1BvcyA9IGMuZGF0YS5uZXdQb3M7XG4gICAgdmFyIGR4ID0gb2xkUG9zLmxlZnQgLSBuZXdQb3MubGVmdDtcbiAgICB2YXIgZHkgPSBvbGRQb3MudG9wIC0gbmV3UG9zLnRvcDtcbiAgICBpZiAoZHggfHwgZHkpIHtcbiAgICAgIGMuZGF0YS5tb3ZlZCA9IHRydWU7XG4gICAgICB2YXIgcyA9IGMuZWxtLnN0eWxlO1xuICAgICAgcy50cmFuc2Zvcm0gPSBzLldlYmtpdFRyYW5zZm9ybSA9IFwidHJhbnNsYXRlKFwiICsgZHggKyBcInB4LFwiICsgZHkgKyBcInB4KVwiO1xuICAgICAgcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwbGF0Zm9ybUNvbXBvbmVudHMgPSB7XG4gICAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbixcbiAgICBUcmFuc2l0aW9uR3JvdXA6IFRyYW5zaXRpb25Hcm91cFxuICB9O1xuXG4gIC8qICAqL1xuXG4gIC8vIGluc3RhbGwgcGxhdGZvcm0gc3BlY2lmaWMgdXRpbHNcbiAgVnVlLmNvbmZpZy5tdXN0VXNlUHJvcCA9IG11c3RVc2VQcm9wO1xuICBWdWUuY29uZmlnLmlzUmVzZXJ2ZWRUYWcgPSBpc1Jlc2VydmVkVGFnO1xuICBWdWUuY29uZmlnLmlzUmVzZXJ2ZWRBdHRyID0gaXNSZXNlcnZlZEF0dHI7XG4gIFZ1ZS5jb25maWcuZ2V0VGFnTmFtZXNwYWNlID0gZ2V0VGFnTmFtZXNwYWNlO1xuICBWdWUuY29uZmlnLmlzVW5rbm93bkVsZW1lbnQgPSBpc1Vua25vd25FbGVtZW50O1xuXG4gIC8vIGluc3RhbGwgcGxhdGZvcm0gcnVudGltZSBkaXJlY3RpdmVzICYgY29tcG9uZW50c1xuICBleHRlbmQoVnVlLm9wdGlvbnMuZGlyZWN0aXZlcywgcGxhdGZvcm1EaXJlY3RpdmVzKTtcbiAgZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIHBsYXRmb3JtQ29tcG9uZW50cyk7XG5cbiAgLy8gaW5zdGFsbCBwbGF0Zm9ybSBwYXRjaCBmdW5jdGlvblxuICBWdWUucHJvdG90eXBlLl9fcGF0Y2hfXyA9IGluQnJvd3NlciA/IHBhdGNoIDogbm9vcDtcblxuICAvLyBwdWJsaWMgbW91bnQgbWV0aG9kXG4gIFZ1ZS5wcm90b3R5cGUuJG1vdW50ID0gZnVuY3Rpb24gKFxuICAgIGVsLFxuICAgIGh5ZHJhdGluZ1xuICApIHtcbiAgICBlbCA9IGVsICYmIGluQnJvd3NlciA/IHF1ZXJ5KGVsKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbW91bnRDb21wb25lbnQodGhpcywgZWwsIGh5ZHJhdGluZylcbiAgfTtcblxuICAvLyBkZXZ0b29scyBnbG9iYWwgaG9va1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoaW5Ccm93c2VyKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoY29uZmlnLmRldnRvb2xzKSB7XG4gICAgICAgIGlmIChkZXZ0b29scykge1xuICAgICAgICAgIGRldnRvb2xzLmVtaXQoJ2luaXQnLCBWdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKFxuICAgICAgICAgICAgJ0Rvd25sb2FkIHRoZSBWdWUgRGV2dG9vbHMgZXh0ZW5zaW9uIGZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOlxcbicgK1xuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtZGV2dG9vbHMnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5wcm9kdWN0aW9uVGlwICE9PSBmYWxzZSAmJlxuICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlW2NvbnNvbGUuaW5mbyA/ICdpbmZvJyA6ICdsb2cnXShcbiAgICAgICAgICBcIllvdSBhcmUgcnVubmluZyBWdWUgaW4gZGV2ZWxvcG1lbnQgbW9kZS5cXG5cIiArXG4gICAgICAgICAgXCJNYWtlIHN1cmUgdG8gdHVybiBvbiBwcm9kdWN0aW9uIG1vZGUgd2hlbiBkZXBsb3lpbmcgZm9yIHByb2R1Y3Rpb24uXFxuXCIgK1xuICAgICAgICAgIFwiU2VlIG1vcmUgdGlwcyBhdCBodHRwczovL3Z1ZWpzLm9yZy9ndWlkZS9kZXBsb3ltZW50Lmh0bWxcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIGRlZmF1bHRUYWdSRSA9IC9cXHtcXHsoKD86LnxcXHI/XFxuKSs/KVxcfVxcfS9nO1xuICB2YXIgcmVnZXhFc2NhcGVSRSA9IC9bLS4qKz9eJHt9KCl8W1xcXVxcL1xcXFxdL2c7XG5cbiAgdmFyIGJ1aWxkUmVnZXggPSBjYWNoZWQoZnVuY3Rpb24gKGRlbGltaXRlcnMpIHtcbiAgICB2YXIgb3BlbiA9IGRlbGltaXRlcnNbMF0ucmVwbGFjZShyZWdleEVzY2FwZVJFLCAnXFxcXCQmJyk7XG4gICAgdmFyIGNsb3NlID0gZGVsaW1pdGVyc1sxXS5yZXBsYWNlKHJlZ2V4RXNjYXBlUkUsICdcXFxcJCYnKTtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChvcGVuICsgJygoPzoufFxcXFxuKSs/KScgKyBjbG9zZSwgJ2cnKVxuICB9KTtcblxuXG5cbiAgZnVuY3Rpb24gcGFyc2VUZXh0IChcbiAgICB0ZXh0LFxuICAgIGRlbGltaXRlcnNcbiAgKSB7XG4gICAgdmFyIHRhZ1JFID0gZGVsaW1pdGVycyA/IGJ1aWxkUmVnZXgoZGVsaW1pdGVycykgOiBkZWZhdWx0VGFnUkU7XG4gICAgaWYgKCF0YWdSRS50ZXN0KHRleHQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIHRva2VucyA9IFtdO1xuICAgIHZhciByYXdUb2tlbnMgPSBbXTtcbiAgICB2YXIgbGFzdEluZGV4ID0gdGFnUkUubGFzdEluZGV4ID0gMDtcbiAgICB2YXIgbWF0Y2gsIGluZGV4LCB0b2tlblZhbHVlO1xuICAgIHdoaWxlICgobWF0Y2ggPSB0YWdSRS5leGVjKHRleHQpKSkge1xuICAgICAgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICAgIC8vIHB1c2ggdGV4dCB0b2tlblxuICAgICAgaWYgKGluZGV4ID4gbGFzdEluZGV4KSB7XG4gICAgICAgIHJhd1Rva2Vucy5wdXNoKHRva2VuVmFsdWUgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICAgICAgdG9rZW5zLnB1c2goSlNPTi5zdHJpbmdpZnkodG9rZW5WYWx1ZSkpO1xuICAgICAgfVxuICAgICAgLy8gdGFnIHRva2VuXG4gICAgICB2YXIgZXhwID0gcGFyc2VGaWx0ZXJzKG1hdGNoWzFdLnRyaW0oKSk7XG4gICAgICB0b2tlbnMucHVzaCgoXCJfcyhcIiArIGV4cCArIFwiKVwiKSk7XG4gICAgICByYXdUb2tlbnMucHVzaCh7ICdAYmluZGluZyc6IGV4cCB9KTtcbiAgICAgIGxhc3RJbmRleCA9IGluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAobGFzdEluZGV4IDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgIHJhd1Rva2Vucy5wdXNoKHRva2VuVmFsdWUgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCkpO1xuICAgICAgdG9rZW5zLnB1c2goSlNPTi5zdHJpbmdpZnkodG9rZW5WYWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZXhwcmVzc2lvbjogdG9rZW5zLmpvaW4oJysnKSxcbiAgICAgIHRva2VuczogcmF3VG9rZW5zXG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtTm9kZSAoZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcbiAgICB2YXIgc3RhdGljQ2xhc3MgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnY2xhc3MnKTtcbiAgICBpZiAoc3RhdGljQ2xhc3MpIHtcbiAgICAgIHZhciByZXMgPSBwYXJzZVRleHQoc3RhdGljQ2xhc3MsIG9wdGlvbnMuZGVsaW1pdGVycyk7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJjbGFzcz1cXFwiXCIgKyBzdGF0aWNDbGFzcyArIFwiXFxcIjogXCIgK1xuICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICdVc2Ugdi1iaW5kIG9yIHRoZSBjb2xvbiBzaG9ydGhhbmQgaW5zdGVhZC4gRm9yIGV4YW1wbGUsICcgK1xuICAgICAgICAgICdpbnN0ZWFkIG9mIDxkaXYgY2xhc3M9XCJ7eyB2YWwgfX1cIj4sIHVzZSA8ZGl2IDpjbGFzcz1cInZhbFwiPi4nLFxuICAgICAgICAgIGVsLnJhd0F0dHJzTWFwWydjbGFzcyddXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGF0aWNDbGFzcykge1xuICAgICAgZWwuc3RhdGljQ2xhc3MgPSBKU09OLnN0cmluZ2lmeShzdGF0aWNDbGFzcyk7XG4gICAgfVxuICAgIHZhciBjbGFzc0JpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2NsYXNzJywgZmFsc2UgLyogZ2V0U3RhdGljICovKTtcbiAgICBpZiAoY2xhc3NCaW5kaW5nKSB7XG4gICAgICBlbC5jbGFzc0JpbmRpbmcgPSBjbGFzc0JpbmRpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuRGF0YSAoZWwpIHtcbiAgICB2YXIgZGF0YSA9ICcnO1xuICAgIGlmIChlbC5zdGF0aWNDbGFzcykge1xuICAgICAgZGF0YSArPSBcInN0YXRpY0NsYXNzOlwiICsgKGVsLnN0YXRpY0NsYXNzKSArIFwiLFwiO1xuICAgIH1cbiAgICBpZiAoZWwuY2xhc3NCaW5kaW5nKSB7XG4gICAgICBkYXRhICs9IFwiY2xhc3M6XCIgKyAoZWwuY2xhc3NCaW5kaW5nKSArIFwiLFwiO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgdmFyIGtsYXNzJDEgPSB7XG4gICAgc3RhdGljS2V5czogWydzdGF0aWNDbGFzcyddLFxuICAgIHRyYW5zZm9ybU5vZGU6IHRyYW5zZm9ybU5vZGUsXG4gICAgZ2VuRGF0YTogZ2VuRGF0YVxuICB9O1xuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybU5vZGUkMSAoZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcbiAgICB2YXIgc3RhdGljU3R5bGUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc3R5bGUnKTtcbiAgICBpZiAoc3RhdGljU3R5bGUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAge1xuICAgICAgICB2YXIgcmVzID0gcGFyc2VUZXh0KHN0YXRpY1N0eWxlLCBvcHRpb25zLmRlbGltaXRlcnMpO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwic3R5bGU9XFxcIlwiICsgc3RhdGljU3R5bGUgKyBcIlxcXCI6IFwiICtcbiAgICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICAgJ1VzZSB2LWJpbmQgb3IgdGhlIGNvbG9uIHNob3J0aGFuZCBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgJyArXG4gICAgICAgICAgICAnaW5zdGVhZCBvZiA8ZGl2IHN0eWxlPVwie3sgdmFsIH19XCI+LCB1c2UgPGRpdiA6c3R5bGU9XCJ2YWxcIj4uJyxcbiAgICAgICAgICAgIGVsLnJhd0F0dHJzTWFwWydzdHlsZSddXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWwuc3RhdGljU3R5bGUgPSBKU09OLnN0cmluZ2lmeShwYXJzZVN0eWxlVGV4dChzdGF0aWNTdHlsZSkpO1xuICAgIH1cblxuICAgIHZhciBzdHlsZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3N0eWxlJywgZmFsc2UgLyogZ2V0U3RhdGljICovKTtcbiAgICBpZiAoc3R5bGVCaW5kaW5nKSB7XG4gICAgICBlbC5zdHlsZUJpbmRpbmcgPSBzdHlsZUJpbmRpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuRGF0YSQxIChlbCkge1xuICAgIHZhciBkYXRhID0gJyc7XG4gICAgaWYgKGVsLnN0YXRpY1N0eWxlKSB7XG4gICAgICBkYXRhICs9IFwic3RhdGljU3R5bGU6XCIgKyAoZWwuc3RhdGljU3R5bGUpICsgXCIsXCI7XG4gICAgfVxuICAgIGlmIChlbC5zdHlsZUJpbmRpbmcpIHtcbiAgICAgIGRhdGEgKz0gXCJzdHlsZTooXCIgKyAoZWwuc3R5bGVCaW5kaW5nKSArIFwiKSxcIjtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIHZhciBzdHlsZSQxID0ge1xuICAgIHN0YXRpY0tleXM6IFsnc3RhdGljU3R5bGUnXSxcbiAgICB0cmFuc2Zvcm1Ob2RlOiB0cmFuc2Zvcm1Ob2RlJDEsXG4gICAgZ2VuRGF0YTogZ2VuRGF0YSQxXG4gIH07XG5cbiAgLyogICovXG5cbiAgdmFyIGRlY29kZXI7XG5cbiAgdmFyIGhlID0ge1xuICAgIGRlY29kZTogZnVuY3Rpb24gZGVjb2RlIChodG1sKSB7XG4gICAgICBkZWNvZGVyID0gZGVjb2RlciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGRlY29kZXIuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIHJldHVybiBkZWNvZGVyLnRleHRDb250ZW50XG4gICAgfVxuICB9O1xuXG4gIC8qICAqL1xuXG4gIHZhciBpc1VuYXJ5VGFnID0gbWFrZU1hcChcbiAgICAnYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxmcmFtZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXlnZW4sJyArXG4gICAgJ2xpbmssbWV0YSxwYXJhbSxzb3VyY2UsdHJhY2ssd2JyJ1xuICApO1xuXG4gIC8vIEVsZW1lbnRzIHRoYXQgeW91IGNhbiwgaW50ZW50aW9uYWxseSwgbGVhdmUgb3BlblxuICAvLyAoYW5kIHdoaWNoIGNsb3NlIHRoZW1zZWx2ZXMpXG4gIHZhciBjYW5CZUxlZnRPcGVuVGFnID0gbWFrZU1hcChcbiAgICAnY29sZ3JvdXAsZGQsZHQsbGksb3B0aW9ucyxwLHRkLHRmb290LHRoLHRoZWFkLHRyLHNvdXJjZSdcbiAgKTtcblxuICAvLyBIVE1MNSB0YWdzIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZGljZXMuaHRtbCNlbGVtZW50cy0zXG4gIC8vIFBocmFzaW5nIENvbnRlbnQgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjcGhyYXNpbmctY29udGVudFxuICB2YXIgaXNOb25QaHJhc2luZ1RhZyA9IG1ha2VNYXAoXG4gICAgJ2FkZHJlc3MsYXJ0aWNsZSxhc2lkZSxiYXNlLGJsb2NrcXVvdGUsYm9keSxjYXB0aW9uLGNvbCxjb2xncm91cCxkZCwnICtcbiAgICAnZGV0YWlscyxkaWFsb2csZGl2LGRsLGR0LGZpZWxkc2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rlcixmb3JtLCcgK1xuICAgICdoMSxoMixoMyxoNCxoNSxoNixoZWFkLGhlYWRlcixoZ3JvdXAsaHIsaHRtbCxsZWdlbmQsbGksbWVudWl0ZW0sbWV0YSwnICtcbiAgICAnb3B0Z3JvdXAsb3B0aW9uLHBhcmFtLHJwLHJ0LHNvdXJjZSxzdHlsZSxzdW1tYXJ5LHRib2R5LHRkLHRmb290LHRoLHRoZWFkLCcgK1xuICAgICd0aXRsZSx0cix0cmFjaydcbiAgKTtcblxuICAvKipcbiAgICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgaXQncyBtb3N0bHkgdmVuZG9yIGNvZGUuXG4gICAqL1xuXG4gIC8vIFJlZ3VsYXIgRXhwcmVzc2lvbnMgZm9yIHBhcnNpbmcgdGFncyBhbmQgYXR0cmlidXRlc1xuICB2YXIgYXR0cmlidXRlID0gL15cXHMqKFteXFxzXCInPD5cXC89XSspKD86XFxzKig9KVxccyooPzpcIihbXlwiXSopXCIrfCcoW14nXSopJyt8KFteXFxzXCInPTw+YF0rKSkpPy87XG4gIHZhciBkeW5hbWljQXJnQXR0cmlidXRlID0gL15cXHMqKCg/OnYtW1xcdy1dKzp8QHw6fCMpXFxbW149XStcXF1bXlxcc1wiJzw+XFwvPV0qKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vO1xuICB2YXIgbmNuYW1lID0gXCJbYS16QS1aX11bXFxcXC1cXFxcLjAtOV9hLXpBLVpcIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIl0qXCI7XG4gIHZhciBxbmFtZUNhcHR1cmUgPSBcIigoPzpcIiArIG5jbmFtZSArIFwiXFxcXDopP1wiICsgbmNuYW1lICsgXCIpXCI7XG4gIHZhciBzdGFydFRhZ09wZW4gPSBuZXcgUmVnRXhwKChcIl48XCIgKyBxbmFtZUNhcHR1cmUpKTtcbiAgdmFyIHN0YXJ0VGFnQ2xvc2UgPSAvXlxccyooXFwvPyk+LztcbiAgdmFyIGVuZFRhZyA9IG5ldyBSZWdFeHAoKFwiXjxcXFxcL1wiICsgcW5hbWVDYXB0dXJlICsgXCJbXj5dKj5cIikpO1xuICB2YXIgZG9jdHlwZSA9IC9ePCFET0NUWVBFIFtePl0rPi9pO1xuICAvLyAjNzI5ODogZXNjYXBlIC0gdG8gYXZvaWQgYmVpbmcgcGFzc2VkIGFzIEhUTUwgY29tbWVudCB3aGVuIGlubGluZWQgaW4gcGFnZVxuICB2YXIgY29tbWVudCA9IC9ePCFcXC0tLztcbiAgdmFyIGNvbmRpdGlvbmFsQ29tbWVudCA9IC9ePCFcXFsvO1xuXG4gIC8vIFNwZWNpYWwgRWxlbWVudHMgKGNhbiBjb250YWluIGFueXRoaW5nKVxuICB2YXIgaXNQbGFpblRleHRFbGVtZW50ID0gbWFrZU1hcCgnc2NyaXB0LHN0eWxlLHRleHRhcmVhJywgdHJ1ZSk7XG4gIHZhciByZUNhY2hlID0ge307XG5cbiAgdmFyIGRlY29kaW5nTWFwID0ge1xuICAgICcmbHQ7JzogJzwnLFxuICAgICcmZ3Q7JzogJz4nLFxuICAgICcmcXVvdDsnOiAnXCInLFxuICAgICcmYW1wOyc6ICcmJyxcbiAgICAnJiMxMDsnOiAnXFxuJyxcbiAgICAnJiM5Oyc6ICdcXHQnLFxuICAgICcmIzM5Oyc6IFwiJ1wiXG4gIH07XG4gIHZhciBlbmNvZGVkQXR0ciA9IC8mKD86bHR8Z3R8cXVvdHxhbXB8IzM5KTsvZztcbiAgdmFyIGVuY29kZWRBdHRyV2l0aE5ld0xpbmVzID0gLyYoPzpsdHxndHxxdW90fGFtcHwjMzl8IzEwfCM5KTsvZztcblxuICAvLyAjNTk5MlxuICB2YXIgaXNJZ25vcmVOZXdsaW5lVGFnID0gbWFrZU1hcCgncHJlLHRleHRhcmVhJywgdHJ1ZSk7XG4gIHZhciBzaG91bGRJZ25vcmVGaXJzdE5ld2xpbmUgPSBmdW5jdGlvbiAodGFnLCBodG1sKSB7IHJldHVybiB0YWcgJiYgaXNJZ25vcmVOZXdsaW5lVGFnKHRhZykgJiYgaHRtbFswXSA9PT0gJ1xcbic7IH07XG5cbiAgZnVuY3Rpb24gZGVjb2RlQXR0ciAodmFsdWUsIHNob3VsZERlY29kZU5ld2xpbmVzKSB7XG4gICAgdmFyIHJlID0gc2hvdWxkRGVjb2RlTmV3bGluZXMgPyBlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyA6IGVuY29kZWRBdHRyO1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHJlLCBmdW5jdGlvbiAobWF0Y2gpIHsgcmV0dXJuIGRlY29kaW5nTWFwW21hdGNoXTsgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlSFRNTCAoaHRtbCwgb3B0aW9ucykge1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBleHBlY3RIVE1MID0gb3B0aW9ucy5leHBlY3RIVE1MO1xuICAgIHZhciBpc1VuYXJ5VGFnJCQxID0gb3B0aW9ucy5pc1VuYXJ5VGFnIHx8IG5vO1xuICAgIHZhciBjYW5CZUxlZnRPcGVuVGFnJCQxID0gb3B0aW9ucy5jYW5CZUxlZnRPcGVuVGFnIHx8IG5vO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxhc3QsIGxhc3RUYWc7XG4gICAgd2hpbGUgKGh0bWwpIHtcbiAgICAgIGxhc3QgPSBodG1sO1xuICAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIG5vdCBpbiBhIHBsYWludGV4dCBjb250ZW50IGVsZW1lbnQgbGlrZSBzY3JpcHQvc3R5bGVcbiAgICAgIGlmICghbGFzdFRhZyB8fCAhaXNQbGFpblRleHRFbGVtZW50KGxhc3RUYWcpKSB7XG4gICAgICAgIHZhciB0ZXh0RW5kID0gaHRtbC5pbmRleE9mKCc8Jyk7XG4gICAgICAgIGlmICh0ZXh0RW5kID09PSAwKSB7XG4gICAgICAgICAgLy8gQ29tbWVudDpcbiAgICAgICAgICBpZiAoY29tbWVudC50ZXN0KGh0bWwpKSB7XG4gICAgICAgICAgICB2YXIgY29tbWVudEVuZCA9IGh0bWwuaW5kZXhPZignLS0+Jyk7XG5cbiAgICAgICAgICAgIGlmIChjb21tZW50RW5kID49IDApIHtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkS2VlcENvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvbW1lbnQoaHRtbC5zdWJzdHJpbmcoNCwgY29tbWVudEVuZCksIGluZGV4LCBpbmRleCArIGNvbW1lbnRFbmQgKyAzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhZHZhbmNlKGNvbW1lbnRFbmQgKyAzKTtcbiAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbmRpdGlvbmFsX2NvbW1lbnQjRG93bmxldmVsLXJldmVhbGVkX2NvbmRpdGlvbmFsX2NvbW1lbnRcbiAgICAgICAgICBpZiAoY29uZGl0aW9uYWxDb21tZW50LnRlc3QoaHRtbCkpIHtcbiAgICAgICAgICAgIHZhciBjb25kaXRpb25hbEVuZCA9IGh0bWwuaW5kZXhPZignXT4nKTtcblxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbmFsRW5kID49IDApIHtcbiAgICAgICAgICAgICAgYWR2YW5jZShjb25kaXRpb25hbEVuZCArIDIpO1xuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERvY3R5cGU6XG4gICAgICAgICAgdmFyIGRvY3R5cGVNYXRjaCA9IGh0bWwubWF0Y2goZG9jdHlwZSk7XG4gICAgICAgICAgaWYgKGRvY3R5cGVNYXRjaCkge1xuICAgICAgICAgICAgYWR2YW5jZShkb2N0eXBlTWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRW5kIHRhZzpcbiAgICAgICAgICB2YXIgZW5kVGFnTWF0Y2ggPSBodG1sLm1hdGNoKGVuZFRhZyk7XG4gICAgICAgICAgaWYgKGVuZFRhZ01hdGNoKSB7XG4gICAgICAgICAgICB2YXIgY3VySW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIGFkdmFuY2UoZW5kVGFnTWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIHBhcnNlRW5kVGFnKGVuZFRhZ01hdGNoWzFdLCBjdXJJbmRleCwgaW5kZXgpO1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTdGFydCB0YWc6XG4gICAgICAgICAgdmFyIHN0YXJ0VGFnTWF0Y2ggPSBwYXJzZVN0YXJ0VGFnKCk7XG4gICAgICAgICAgaWYgKHN0YXJ0VGFnTWF0Y2gpIHtcbiAgICAgICAgICAgIGhhbmRsZVN0YXJ0VGFnKHN0YXJ0VGFnTWF0Y2gpO1xuICAgICAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFydFRhZ01hdGNoLnRhZ05hbWUsIGh0bWwpKSB7XG4gICAgICAgICAgICAgIGFkdmFuY2UoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ZXh0ID0gKHZvaWQgMCksIHJlc3QgPSAodm9pZCAwKSwgbmV4dCA9ICh2b2lkIDApO1xuICAgICAgICBpZiAodGV4dEVuZCA+PSAwKSB7XG4gICAgICAgICAgcmVzdCA9IGh0bWwuc2xpY2UodGV4dEVuZCk7XG4gICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgIWVuZFRhZy50ZXN0KHJlc3QpICYmXG4gICAgICAgICAgICAhc3RhcnRUYWdPcGVuLnRlc3QocmVzdCkgJiZcbiAgICAgICAgICAgICFjb21tZW50LnRlc3QocmVzdCkgJiZcbiAgICAgICAgICAgICFjb25kaXRpb25hbENvbW1lbnQudGVzdChyZXN0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gPCBpbiBwbGFpbiB0ZXh0LCBiZSBmb3JnaXZpbmcgYW5kIHRyZWF0IGl0IGFzIHRleHRcbiAgICAgICAgICAgIG5leHQgPSByZXN0LmluZGV4T2YoJzwnLCAxKTtcbiAgICAgICAgICAgIGlmIChuZXh0IDwgMCkgeyBicmVhayB9XG4gICAgICAgICAgICB0ZXh0RW5kICs9IG5leHQ7XG4gICAgICAgICAgICByZXN0ID0gaHRtbC5zbGljZSh0ZXh0RW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dCA9IGh0bWwuc3Vic3RyaW5nKDAsIHRleHRFbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRFbmQgPCAwKSB7XG4gICAgICAgICAgdGV4dCA9IGh0bWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgIGFkdmFuY2UodGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY2hhcnMgJiYgdGV4dCkge1xuICAgICAgICAgIG9wdGlvbnMuY2hhcnModGV4dCwgaW5kZXggLSB0ZXh0Lmxlbmd0aCwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZW5kVGFnTGVuZ3RoID0gMDtcbiAgICAgICAgdmFyIHN0YWNrZWRUYWcgPSBsYXN0VGFnLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciByZVN0YWNrZWRUYWcgPSByZUNhY2hlW3N0YWNrZWRUYWddIHx8IChyZUNhY2hlW3N0YWNrZWRUYWddID0gbmV3IFJlZ0V4cCgnKFtcXFxcc1xcXFxTXSo/KSg8LycgKyBzdGFja2VkVGFnICsgJ1tePl0qPiknLCAnaScpKTtcbiAgICAgICAgdmFyIHJlc3QkMSA9IGh0bWwucmVwbGFjZShyZVN0YWNrZWRUYWcsIGZ1bmN0aW9uIChhbGwsIHRleHQsIGVuZFRhZykge1xuICAgICAgICAgIGVuZFRhZ0xlbmd0aCA9IGVuZFRhZy5sZW5ndGg7XG4gICAgICAgICAgaWYgKCFpc1BsYWluVGV4dEVsZW1lbnQoc3RhY2tlZFRhZykgJiYgc3RhY2tlZFRhZyAhPT0gJ25vc2NyaXB0Jykge1xuICAgICAgICAgICAgdGV4dCA9IHRleHRcbiAgICAgICAgICAgICAgLnJlcGxhY2UoLzwhXFwtLShbXFxzXFxTXSo/KS0tPi9nLCAnJDEnKSAvLyAjNzI5OFxuICAgICAgICAgICAgICAucmVwbGFjZSgvPCFcXFtDREFUQVxcWyhbXFxzXFxTXSo/KV1dPi9nLCAnJDEnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFja2VkVGFnLCB0ZXh0KSkge1xuICAgICAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmNoYXJzKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzKHRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJydcbiAgICAgICAgfSk7XG4gICAgICAgIGluZGV4ICs9IGh0bWwubGVuZ3RoIC0gcmVzdCQxLmxlbmd0aDtcbiAgICAgICAgaHRtbCA9IHJlc3QkMTtcbiAgICAgICAgcGFyc2VFbmRUYWcoc3RhY2tlZFRhZywgaW5kZXggLSBlbmRUYWdMZW5ndGgsIGluZGV4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGh0bWwgPT09IGxhc3QpIHtcbiAgICAgICAgb3B0aW9ucy5jaGFycyAmJiBvcHRpb25zLmNoYXJzKGh0bWwpO1xuICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCAmJiBvcHRpb25zLndhcm4pIHtcbiAgICAgICAgICBvcHRpb25zLndhcm4oKFwiTWFsLWZvcm1hdHRlZCB0YWcgYXQgZW5kIG9mIHRlbXBsYXRlOiBcXFwiXCIgKyBodG1sICsgXCJcXFwiXCIpLCB7IHN0YXJ0OiBpbmRleCArIGh0bWwubGVuZ3RoIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXAgYW55IHJlbWFpbmluZyB0YWdzXG4gICAgcGFyc2VFbmRUYWcoKTtcblxuICAgIGZ1bmN0aW9uIGFkdmFuY2UgKG4pIHtcbiAgICAgIGluZGV4ICs9IG47XG4gICAgICBodG1sID0gaHRtbC5zdWJzdHJpbmcobik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VTdGFydFRhZyAoKSB7XG4gICAgICB2YXIgc3RhcnQgPSBodG1sLm1hdGNoKHN0YXJ0VGFnT3Blbik7XG4gICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgdmFyIG1hdGNoID0ge1xuICAgICAgICAgIHRhZ05hbWU6IHN0YXJ0WzFdLFxuICAgICAgICAgIGF0dHJzOiBbXSxcbiAgICAgICAgICBzdGFydDogaW5kZXhcbiAgICAgICAgfTtcbiAgICAgICAgYWR2YW5jZShzdGFydFswXS5sZW5ndGgpO1xuICAgICAgICB2YXIgZW5kLCBhdHRyO1xuICAgICAgICB3aGlsZSAoIShlbmQgPSBodG1sLm1hdGNoKHN0YXJ0VGFnQ2xvc2UpKSAmJiAoYXR0ciA9IGh0bWwubWF0Y2goZHluYW1pY0FyZ0F0dHJpYnV0ZSkgfHwgaHRtbC5tYXRjaChhdHRyaWJ1dGUpKSkge1xuICAgICAgICAgIGF0dHIuc3RhcnQgPSBpbmRleDtcbiAgICAgICAgICBhZHZhbmNlKGF0dHJbMF0ubGVuZ3RoKTtcbiAgICAgICAgICBhdHRyLmVuZCA9IGluZGV4O1xuICAgICAgICAgIG1hdGNoLmF0dHJzLnB1c2goYXR0cik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuZCkge1xuICAgICAgICAgIG1hdGNoLnVuYXJ5U2xhc2ggPSBlbmRbMV07XG4gICAgICAgICAgYWR2YW5jZShlbmRbMF0ubGVuZ3RoKTtcbiAgICAgICAgICBtYXRjaC5lbmQgPSBpbmRleDtcbiAgICAgICAgICByZXR1cm4gbWF0Y2hcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0VGFnIChtYXRjaCkge1xuICAgICAgdmFyIHRhZ05hbWUgPSBtYXRjaC50YWdOYW1lO1xuICAgICAgdmFyIHVuYXJ5U2xhc2ggPSBtYXRjaC51bmFyeVNsYXNoO1xuXG4gICAgICBpZiAoZXhwZWN0SFRNTCkge1xuICAgICAgICBpZiAobGFzdFRhZyA9PT0gJ3AnICYmIGlzTm9uUGhyYXNpbmdUYWcodGFnTmFtZSkpIHtcbiAgICAgICAgICBwYXJzZUVuZFRhZyhsYXN0VGFnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FuQmVMZWZ0T3BlblRhZyQkMSh0YWdOYW1lKSAmJiBsYXN0VGFnID09PSB0YWdOYW1lKSB7XG4gICAgICAgICAgcGFyc2VFbmRUYWcodGFnTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHVuYXJ5ID0gaXNVbmFyeVRhZyQkMSh0YWdOYW1lKSB8fCAhIXVuYXJ5U2xhc2g7XG5cbiAgICAgIHZhciBsID0gbWF0Y2guYXR0cnMubGVuZ3RoO1xuICAgICAgdmFyIGF0dHJzID0gbmV3IEFycmF5KGwpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBtYXRjaC5hdHRyc1tpXTtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJnc1szXSB8fCBhcmdzWzRdIHx8IGFyZ3NbNV0gfHwgJyc7XG4gICAgICAgIHZhciBzaG91bGREZWNvZGVOZXdsaW5lcyA9IHRhZ05hbWUgPT09ICdhJyAmJiBhcmdzWzFdID09PSAnaHJlZidcbiAgICAgICAgICA/IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmXG4gICAgICAgICAgOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzO1xuICAgICAgICBhdHRyc1tpXSA9IHtcbiAgICAgICAgICBuYW1lOiBhcmdzWzFdLFxuICAgICAgICAgIHZhbHVlOiBkZWNvZGVBdHRyKHZhbHVlLCBzaG91bGREZWNvZGVOZXdsaW5lcylcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICBhdHRyc1tpXS5zdGFydCA9IGFyZ3Muc3RhcnQgKyBhcmdzWzBdLm1hdGNoKC9eXFxzKi8pLmxlbmd0aDtcbiAgICAgICAgICBhdHRyc1tpXS5lbmQgPSBhcmdzLmVuZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXVuYXJ5KSB7XG4gICAgICAgIHN0YWNrLnB1c2goeyB0YWc6IHRhZ05hbWUsIGxvd2VyQ2FzZWRUYWc6IHRhZ05hbWUudG9Mb3dlckNhc2UoKSwgYXR0cnM6IGF0dHJzLCBzdGFydDogbWF0Y2guc3RhcnQsIGVuZDogbWF0Y2guZW5kIH0pO1xuICAgICAgICBsYXN0VGFnID0gdGFnTmFtZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBhdHRycywgdW5hcnksIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlRW5kVGFnICh0YWdOYW1lLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgcG9zLCBsb3dlckNhc2VkVGFnTmFtZTtcbiAgICAgIGlmIChzdGFydCA9PSBudWxsKSB7IHN0YXJ0ID0gaW5kZXg7IH1cbiAgICAgIGlmIChlbmQgPT0gbnVsbCkgeyBlbmQgPSBpbmRleDsgfVxuXG4gICAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IG9wZW5lZCB0YWcgb2YgdGhlIHNhbWUgdHlwZVxuICAgICAgaWYgKHRhZ05hbWUpIHtcbiAgICAgICAgbG93ZXJDYXNlZFRhZ05hbWUgPSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGZvciAocG9zID0gc3RhY2subGVuZ3RoIC0gMTsgcG9zID49IDA7IHBvcy0tKSB7XG4gICAgICAgICAgaWYgKHN0YWNrW3Bvc10ubG93ZXJDYXNlZFRhZyA9PT0gbG93ZXJDYXNlZFRhZ05hbWUpIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBubyB0YWcgbmFtZSBpcyBwcm92aWRlZCwgY2xlYW4gc2hvcFxuICAgICAgICBwb3MgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAocG9zID49IDApIHtcbiAgICAgICAgLy8gQ2xvc2UgYWxsIHRoZSBvcGVuIGVsZW1lbnRzLCB1cCB0aGUgc3RhY2tcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gcG9zOyBpLS0pIHtcbiAgICAgICAgICBpZiAoaSA+IHBvcyB8fCAhdGFnTmFtZSAmJlxuICAgICAgICAgICAgb3B0aW9ucy53YXJuXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBvcHRpb25zLndhcm4oXG4gICAgICAgICAgICAgIChcInRhZyA8XCIgKyAoc3RhY2tbaV0udGFnKSArIFwiPiBoYXMgbm8gbWF0Y2hpbmcgZW5kIHRhZy5cIiksXG4gICAgICAgICAgICAgIHsgc3RhcnQ6IHN0YWNrW2ldLnN0YXJ0LCBlbmQ6IHN0YWNrW2ldLmVuZCB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3B0aW9ucy5lbmQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZW5kKHN0YWNrW2ldLnRhZywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBvcGVuIGVsZW1lbnRzIGZyb20gdGhlIHN0YWNrXG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHBvcztcbiAgICAgICAgbGFzdFRhZyA9IHBvcyAmJiBzdGFja1twb3MgLSAxXS50YWc7XG4gICAgICB9IGVsc2UgaWYgKGxvd2VyQ2FzZWRUYWdOYW1lID09PSAnYnInKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBbXSwgdHJ1ZSwgc3RhcnQsIGVuZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdwJykge1xuICAgICAgICBpZiAob3B0aW9ucy5zdGFydCkge1xuICAgICAgICAgIG9wdGlvbnMuc3RhcnQodGFnTmFtZSwgW10sIGZhbHNlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5lbmQpIHtcbiAgICAgICAgICBvcHRpb25zLmVuZCh0YWdOYW1lLCBzdGFydCwgZW5kKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIHZhciBvblJFID0gL15AfF52LW9uOi87XG4gIHZhciBkaXJSRSA9IC9edi18XkB8Xjp8XiMvO1xuICB2YXIgZm9yQWxpYXNSRSA9IC8oW1xcc1xcU10qPylcXHMrKD86aW58b2YpXFxzKyhbXFxzXFxTXSopLztcbiAgdmFyIGZvckl0ZXJhdG9yUkUgPSAvLChbXixcXH1cXF1dKikoPzosKFteLFxcfVxcXV0qKSk/JC87XG4gIHZhciBzdHJpcFBhcmVuc1JFID0gL15cXCh8XFwpJC9nO1xuICB2YXIgZHluYW1pY0FyZ1JFID0gL15cXFsuKlxcXSQvO1xuXG4gIHZhciBhcmdSRSA9IC86KC4qKSQvO1xuICB2YXIgYmluZFJFID0gL146fF5cXC58XnYtYmluZDovO1xuICB2YXIgbW9kaWZpZXJSRSA9IC9cXC5bXi5cXF1dKyg/PVteXFxdXSokKS9nO1xuXG4gIHZhciBzbG90UkUgPSAvXnYtc2xvdCg6fCQpfF4jLztcblxuICB2YXIgbGluZUJyZWFrUkUgPSAvW1xcclxcbl0vO1xuICB2YXIgd2hpdGVzcGFjZVJFJDEgPSAvXFxzKy9nO1xuXG4gIHZhciBpbnZhbGlkQXR0cmlidXRlUkUgPSAvW1xcc1wiJzw+XFwvPV0vO1xuXG4gIHZhciBkZWNvZGVIVE1MQ2FjaGVkID0gY2FjaGVkKGhlLmRlY29kZSk7XG5cbiAgdmFyIGVtcHR5U2xvdFNjb3BlVG9rZW4gPSBcIl9lbXB0eV9cIjtcblxuICAvLyBjb25maWd1cmFibGUgc3RhdGVcbiAgdmFyIHdhcm4kMjtcbiAgdmFyIGRlbGltaXRlcnM7XG4gIHZhciB0cmFuc2Zvcm1zO1xuICB2YXIgcHJlVHJhbnNmb3JtcztcbiAgdmFyIHBvc3RUcmFuc2Zvcm1zO1xuICB2YXIgcGxhdGZvcm1Jc1ByZVRhZztcbiAgdmFyIHBsYXRmb3JtTXVzdFVzZVByb3A7XG4gIHZhciBwbGF0Zm9ybUdldFRhZ05hbWVzcGFjZTtcbiAgdmFyIG1heWJlQ29tcG9uZW50O1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFTVEVsZW1lbnQgKFxuICAgIHRhZyxcbiAgICBhdHRycyxcbiAgICBwYXJlbnRcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IDEsXG4gICAgICB0YWc6IHRhZyxcbiAgICAgIGF0dHJzTGlzdDogYXR0cnMsXG4gICAgICBhdHRyc01hcDogbWFrZUF0dHJzTWFwKGF0dHJzKSxcbiAgICAgIHJhd0F0dHJzTWFwOiB7fSxcbiAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgSFRNTCBzdHJpbmcgdG8gQVNULlxuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2UgKFxuICAgIHRlbXBsYXRlLFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgd2FybiQyID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuXG4gICAgcGxhdGZvcm1Jc1ByZVRhZyA9IG9wdGlvbnMuaXNQcmVUYWcgfHwgbm87XG4gICAgcGxhdGZvcm1NdXN0VXNlUHJvcCA9IG9wdGlvbnMubXVzdFVzZVByb3AgfHwgbm87XG4gICAgcGxhdGZvcm1HZXRUYWdOYW1lc3BhY2UgPSBvcHRpb25zLmdldFRhZ05hbWVzcGFjZSB8fCBubztcbiAgICB2YXIgaXNSZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcbiAgICBtYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gISFlbC5jb21wb25lbnQgfHwgIWlzUmVzZXJ2ZWRUYWcoZWwudGFnKTsgfTtcblxuICAgIHRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3RyYW5zZm9ybU5vZGUnKTtcbiAgICBwcmVUcmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICdwcmVUcmFuc2Zvcm1Ob2RlJyk7XG4gICAgcG9zdFRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3Bvc3RUcmFuc2Zvcm1Ob2RlJyk7XG5cbiAgICBkZWxpbWl0ZXJzID0gb3B0aW9ucy5kZWxpbWl0ZXJzO1xuXG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgdmFyIHByZXNlcnZlV2hpdGVzcGFjZSA9IG9wdGlvbnMucHJlc2VydmVXaGl0ZXNwYWNlICE9PSBmYWxzZTtcbiAgICB2YXIgd2hpdGVzcGFjZU9wdGlvbiA9IG9wdGlvbnMud2hpdGVzcGFjZTtcbiAgICB2YXIgcm9vdDtcbiAgICB2YXIgY3VycmVudFBhcmVudDtcbiAgICB2YXIgaW5WUHJlID0gZmFsc2U7XG4gICAgdmFyIGluUHJlID0gZmFsc2U7XG4gICAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gd2Fybk9uY2UgKG1zZywgcmFuZ2UpIHtcbiAgICAgIGlmICghd2FybmVkKSB7XG4gICAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgICAgIHdhcm4kMihtc2csIHJhbmdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9zZUVsZW1lbnQgKGVsZW1lbnQpIHtcbiAgICAgIHRyaW1FbmRpbmdXaGl0ZXNwYWNlKGVsZW1lbnQpO1xuICAgICAgaWYgKCFpblZQcmUgJiYgIWVsZW1lbnQucHJvY2Vzc2VkKSB7XG4gICAgICAgIGVsZW1lbnQgPSBwcm9jZXNzRWxlbWVudChlbGVtZW50LCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIC8vIHRyZWUgbWFuYWdlbWVudFxuICAgICAgaWYgKCFzdGFjay5sZW5ndGggJiYgZWxlbWVudCAhPT0gcm9vdCkge1xuICAgICAgICAvLyBhbGxvdyByb290IGVsZW1lbnRzIHdpdGggdi1pZiwgdi1lbHNlLWlmIGFuZCB2LWVsc2VcbiAgICAgICAgaWYgKHJvb3QuaWYgJiYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjaGVja1Jvb3RDb25zdHJhaW50cyhlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkSWZDb25kaXRpb24ocm9vdCwge1xuICAgICAgICAgICAgZXhwOiBlbGVtZW50LmVsc2VpZixcbiAgICAgICAgICAgIGJsb2NrOiBlbGVtZW50XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICBcIkNvbXBvbmVudCB0ZW1wbGF0ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9uZSByb290IGVsZW1lbnQuIFwiICtcbiAgICAgICAgICAgIFwiSWYgeW91IGFyZSB1c2luZyB2LWlmIG9uIG11bHRpcGxlIGVsZW1lbnRzLCBcIiArXG4gICAgICAgICAgICBcInVzZSB2LWVsc2UtaWYgdG8gY2hhaW4gdGhlbSBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgeyBzdGFydDogZWxlbWVudC5zdGFydCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRQYXJlbnQgJiYgIWVsZW1lbnQuZm9yYmlkZGVuKSB7XG4gICAgICAgIGlmIChlbGVtZW50LmVsc2VpZiB8fCBlbGVtZW50LmVsc2UpIHtcbiAgICAgICAgICBwcm9jZXNzSWZDb25kaXRpb25zKGVsZW1lbnQsIGN1cnJlbnRQYXJlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChlbGVtZW50LnNsb3RTY29wZSkge1xuICAgICAgICAgICAgLy8gc2NvcGVkIHNsb3RcbiAgICAgICAgICAgIC8vIGtlZXAgaXQgaW4gdGhlIGNoaWxkcmVuIGxpc3Qgc28gdGhhdCB2LWVsc2UoLWlmKSBjb25kaXRpb25zIGNhblxuICAgICAgICAgICAgLy8gZmluZCBpdCBhcyB0aGUgcHJldiBub2RlLlxuICAgICAgICAgICAgdmFyIG5hbWUgPSBlbGVtZW50LnNsb3RUYXJnZXQgfHwgJ1wiZGVmYXVsdFwiJ1xuICAgICAgICAgICAgOyhjdXJyZW50UGFyZW50LnNjb3BlZFNsb3RzIHx8IChjdXJyZW50UGFyZW50LnNjb3BlZFNsb3RzID0ge30pKVtuYW1lXSA9IGVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRQYXJlbnQuY2hpbGRyZW4ucHVzaChlbGVtZW50KTtcbiAgICAgICAgICBlbGVtZW50LnBhcmVudCA9IGN1cnJlbnRQYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZmluYWwgY2hpbGRyZW4gY2xlYW51cFxuICAgICAgLy8gZmlsdGVyIG91dCBzY29wZWQgc2xvdHNcbiAgICAgIGVsZW1lbnQuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykgeyByZXR1cm4gIShjKS5zbG90U2NvcGU7IH0pO1xuICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugbm9kZSBhZ2FpblxuICAgICAgdHJpbUVuZGluZ1doaXRlc3BhY2UoZWxlbWVudCk7XG5cbiAgICAgIC8vIGNoZWNrIHByZSBzdGF0ZVxuICAgICAgaWYgKGVsZW1lbnQucHJlKSB7XG4gICAgICAgIGluVlByZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHBsYXRmb3JtSXNQcmVUYWcoZWxlbWVudC50YWcpKSB7XG4gICAgICAgIGluUHJlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBhcHBseSBwb3N0LXRyYW5zZm9ybXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9zdFRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcG9zdFRyYW5zZm9ybXNbaV0oZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJpbUVuZGluZ1doaXRlc3BhY2UgKGVsKSB7XG4gICAgICAvLyByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBub2RlXG4gICAgICBpZiAoIWluUHJlKSB7XG4gICAgICAgIHZhciBsYXN0Tm9kZTtcbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgIChsYXN0Tm9kZSA9IGVsLmNoaWxkcmVuW2VsLmNoaWxkcmVuLmxlbmd0aCAtIDFdKSAmJlxuICAgICAgICAgIGxhc3ROb2RlLnR5cGUgPT09IDMgJiZcbiAgICAgICAgICBsYXN0Tm9kZS50ZXh0ID09PSAnICdcbiAgICAgICAgKSB7XG4gICAgICAgICAgZWwuY2hpbGRyZW4ucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1Jvb3RDb25zdHJhaW50cyAoZWwpIHtcbiAgICAgIGlmIChlbC50YWcgPT09ICdzbG90JyB8fCBlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgXCJDYW5ub3QgdXNlIDxcIiArIChlbC50YWcpICsgXCI+IGFzIGNvbXBvbmVudCByb290IGVsZW1lbnQgYmVjYXVzZSBpdCBtYXkgXCIgK1xuICAgICAgICAgICdjb250YWluIG11bHRpcGxlIG5vZGVzLicsXG4gICAgICAgICAgeyBzdGFydDogZWwuc3RhcnQgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGVsLmF0dHJzTWFwLmhhc093blByb3BlcnR5KCd2LWZvcicpKSB7XG4gICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICdDYW5ub3QgdXNlIHYtZm9yIG9uIHN0YXRlZnVsIGNvbXBvbmVudCByb290IGVsZW1lbnQgYmVjYXVzZSAnICtcbiAgICAgICAgICAnaXQgcmVuZGVycyBtdWx0aXBsZSBlbGVtZW50cy4nLFxuICAgICAgICAgIGVsLnJhd0F0dHJzTWFwWyd2LWZvciddXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VIVE1MKHRlbXBsYXRlLCB7XG4gICAgICB3YXJuOiB3YXJuJDIsXG4gICAgICBleHBlY3RIVE1MOiBvcHRpb25zLmV4cGVjdEhUTUwsXG4gICAgICBpc1VuYXJ5VGFnOiBvcHRpb25zLmlzVW5hcnlUYWcsXG4gICAgICBjYW5CZUxlZnRPcGVuVGFnOiBvcHRpb25zLmNhbkJlTGVmdE9wZW5UYWcsXG4gICAgICBzaG91bGREZWNvZGVOZXdsaW5lczogb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lcyxcbiAgICAgIHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjogb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsXG4gICAgICBzaG91bGRLZWVwQ29tbWVudDogb3B0aW9ucy5jb21tZW50cyxcbiAgICAgIG91dHB1dFNvdXJjZVJhbmdlOiBvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlLFxuICAgICAgc3RhcnQ6IGZ1bmN0aW9uIHN0YXJ0ICh0YWcsIGF0dHJzLCB1bmFyeSwgc3RhcnQkMSwgZW5kKSB7XG4gICAgICAgIC8vIGNoZWNrIG5hbWVzcGFjZS5cbiAgICAgICAgLy8gaW5oZXJpdCBwYXJlbnQgbnMgaWYgdGhlcmUgaXMgb25lXG4gICAgICAgIHZhciBucyA9IChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQubnMpIHx8IHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlKHRhZyk7XG5cbiAgICAgICAgLy8gaGFuZGxlIElFIHN2ZyBidWdcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpc0lFICYmIG5zID09PSAnc3ZnJykge1xuICAgICAgICAgIGF0dHJzID0gZ3VhcmRJRVNWR0J1ZyhhdHRycyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZWxlbWVudCA9IGNyZWF0ZUFTVEVsZW1lbnQodGFnLCBhdHRycywgY3VycmVudFBhcmVudCk7XG4gICAgICAgIGlmIChucykge1xuICAgICAgICAgIGVsZW1lbnQubnMgPSBucztcbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgZWxlbWVudC5zdGFydCA9IHN0YXJ0JDE7XG4gICAgICAgICAgICBlbGVtZW50LmVuZCA9IGVuZDtcbiAgICAgICAgICAgIGVsZW1lbnQucmF3QXR0cnNNYXAgPSBlbGVtZW50LmF0dHJzTGlzdC5yZWR1Y2UoZnVuY3Rpb24gKGN1bXVsYXRlZCwgYXR0cikge1xuICAgICAgICAgICAgICBjdW11bGF0ZWRbYXR0ci5uYW1lXSA9IGF0dHI7XG4gICAgICAgICAgICAgIHJldHVybiBjdW11bGF0ZWRcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXR0cnMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cikge1xuICAgICAgICAgICAgaWYgKGludmFsaWRBdHRyaWJ1dGVSRS50ZXN0KGF0dHIubmFtZSkpIHtcbiAgICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICAgIFwiSW52YWxpZCBkeW5hbWljIGFyZ3VtZW50IGV4cHJlc3Npb246IGF0dHJpYnV0ZSBuYW1lcyBjYW5ub3QgY29udGFpbiBcIiArXG4gICAgICAgICAgICAgICAgXCJzcGFjZXMsIHF1b3RlcywgPCwgPiwgLyBvciA9LlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0OiBhdHRyLnN0YXJ0ICsgYXR0ci5uYW1lLmluZGV4T2YoXCJbXCIpLFxuICAgICAgICAgICAgICAgICAgZW5kOiBhdHRyLnN0YXJ0ICsgYXR0ci5uYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0ZvcmJpZGRlblRhZyhlbGVtZW50KSAmJiAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSkge1xuICAgICAgICAgIGVsZW1lbnQuZm9yYmlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAnVGVtcGxhdGVzIHNob3VsZCBvbmx5IGJlIHJlc3BvbnNpYmxlIGZvciBtYXBwaW5nIHRoZSBzdGF0ZSB0byB0aGUgJyArXG4gICAgICAgICAgICAnVUkuIEF2b2lkIHBsYWNpbmcgdGFncyB3aXRoIHNpZGUtZWZmZWN0cyBpbiB5b3VyIHRlbXBsYXRlcywgc3VjaCBhcyAnICtcbiAgICAgICAgICAgIFwiPFwiICsgdGFnICsgXCI+XCIgKyAnLCBhcyB0aGV5IHdpbGwgbm90IGJlIHBhcnNlZC4nLFxuICAgICAgICAgICAgeyBzdGFydDogZWxlbWVudC5zdGFydCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFwcGx5IHByZS10cmFuc2Zvcm1zXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlVHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGVsZW1lbnQgPSBwcmVUcmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpIHx8IGVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWluVlByZSkge1xuICAgICAgICAgIHByb2Nlc3NQcmUoZWxlbWVudCk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQucHJlKSB7XG4gICAgICAgICAgICBpblZQcmUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhdGZvcm1Jc1ByZVRhZyhlbGVtZW50LnRhZykpIHtcbiAgICAgICAgICBpblByZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluVlByZSkge1xuICAgICAgICAgIHByb2Nlc3NSYXdBdHRycyhlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICghZWxlbWVudC5wcm9jZXNzZWQpIHtcbiAgICAgICAgICAvLyBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZXNcbiAgICAgICAgICBwcm9jZXNzRm9yKGVsZW1lbnQpO1xuICAgICAgICAgIHByb2Nlc3NJZihlbGVtZW50KTtcbiAgICAgICAgICBwcm9jZXNzT25jZShlbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcm9vdCkge1xuICAgICAgICAgIHJvb3QgPSBlbGVtZW50O1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNoZWNrUm9vdENvbnN0cmFpbnRzKHJvb3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdW5hcnkpIHtcbiAgICAgICAgICBjdXJyZW50UGFyZW50ID0gZWxlbWVudDtcbiAgICAgICAgICBzdGFjay5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsb3NlRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZW5kOiBmdW5jdGlvbiBlbmQgKHRhZywgc3RhcnQsIGVuZCQxKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIC8vIHBvcCBzdGFja1xuICAgICAgICBzdGFjay5sZW5ndGggLT0gMTtcbiAgICAgICAgY3VycmVudFBhcmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgIGVsZW1lbnQuZW5kID0gZW5kJDE7XG4gICAgICAgIH1cbiAgICAgICAgY2xvc2VFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgfSxcblxuICAgICAgY2hhcnM6IGZ1bmN0aW9uIGNoYXJzICh0ZXh0LCBzdGFydCwgZW5kKSB7XG4gICAgICAgIGlmICghY3VycmVudFBhcmVudCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0ZXh0ID09PSB0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgICAgICAnQ29tcG9uZW50IHRlbXBsYXRlIHJlcXVpcmVzIGEgcm9vdCBlbGVtZW50LCByYXRoZXIgdGhhbiBqdXN0IHRleHQuJyxcbiAgICAgICAgICAgICAgICB7IHN0YXJ0OiBzdGFydCB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCh0ZXh0ID0gdGV4dC50cmltKCkpKSB7XG4gICAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAgIChcInRleHQgXFxcIlwiICsgdGV4dCArIFwiXFxcIiBvdXRzaWRlIHJvb3QgZWxlbWVudCB3aWxsIGJlIGlnbm9yZWQuXCIpLFxuICAgICAgICAgICAgICAgIHsgc3RhcnQ6IHN0YXJ0IH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy8gSUUgdGV4dGFyZWEgcGxhY2Vob2xkZXIgYnVnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXNJRSAmJlxuICAgICAgICAgIGN1cnJlbnRQYXJlbnQudGFnID09PSAndGV4dGFyZWEnICYmXG4gICAgICAgICAgY3VycmVudFBhcmVudC5hdHRyc01hcC5wbGFjZWhvbGRlciA9PT0gdGV4dFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBjdXJyZW50UGFyZW50LmNoaWxkcmVuO1xuICAgICAgICBpZiAoaW5QcmUgfHwgdGV4dC50cmltKCkpIHtcbiAgICAgICAgICB0ZXh0ID0gaXNUZXh0VGFnKGN1cnJlbnRQYXJlbnQpID8gdGV4dCA6IGRlY29kZUhUTUxDYWNoZWQodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgd2hpdGVzcGFjZS1vbmx5IG5vZGUgcmlnaHQgYWZ0ZXIgYW4gb3BlbmluZyB0YWdcbiAgICAgICAgICB0ZXh0ID0gJyc7XG4gICAgICAgIH0gZWxzZSBpZiAod2hpdGVzcGFjZU9wdGlvbikge1xuICAgICAgICAgIGlmICh3aGl0ZXNwYWNlT3B0aW9uID09PSAnY29uZGVuc2UnKSB7XG4gICAgICAgICAgICAvLyBpbiBjb25kZW5zZSBtb2RlLCByZW1vdmUgdGhlIHdoaXRlc3BhY2Ugbm9kZSBpZiBpdCBjb250YWluc1xuICAgICAgICAgICAgLy8gbGluZSBicmVhaywgb3RoZXJ3aXNlIGNvbmRlbnNlIHRvIGEgc2luZ2xlIHNwYWNlXG4gICAgICAgICAgICB0ZXh0ID0gbGluZUJyZWFrUkUudGVzdCh0ZXh0KSA/ICcnIDogJyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0ID0gJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gcHJlc2VydmVXaGl0ZXNwYWNlID8gJyAnIDogJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICBpZiAoIWluUHJlICYmIHdoaXRlc3BhY2VPcHRpb24gPT09ICdjb25kZW5zZScpIHtcbiAgICAgICAgICAgIC8vIGNvbmRlbnNlIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2VzIGludG8gc2luZ2xlIHNwYWNlXG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHdoaXRlc3BhY2VSRSQxLCAnICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgcmVzO1xuICAgICAgICAgIHZhciBjaGlsZDtcbiAgICAgICAgICBpZiAoIWluVlByZSAmJiB0ZXh0ICE9PSAnICcgJiYgKHJlcyA9IHBhcnNlVGV4dCh0ZXh0LCBkZWxpbWl0ZXJzKSkpIHtcbiAgICAgICAgICAgIGNoaWxkID0ge1xuICAgICAgICAgICAgICB0eXBlOiAyLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiByZXMuZXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgdG9rZW5zOiByZXMudG9rZW5zLFxuICAgICAgICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGV4dCAhPT0gJyAnIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udGV4dCAhPT0gJyAnKSB7XG4gICAgICAgICAgICBjaGlsZCA9IHtcbiAgICAgICAgICAgICAgdHlwZTogMyxcbiAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICBjaGlsZC5zdGFydCA9IHN0YXJ0O1xuICAgICAgICAgICAgICBjaGlsZC5lbmQgPSBlbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb21tZW50OiBmdW5jdGlvbiBjb21tZW50ICh0ZXh0LCBzdGFydCwgZW5kKSB7XG4gICAgICAgIC8vIGFkZGluZyBhbnl0aW5nIGFzIGEgc2libGluZyB0byB0aGUgcm9vdCBub2RlIGlzIGZvcmJpZGRlblxuICAgICAgICAvLyBjb21tZW50cyBzaG91bGQgc3RpbGwgYmUgYWxsb3dlZCwgYnV0IGlnbm9yZWRcbiAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSB7XG4gICAgICAgICAgICB0eXBlOiAzLFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICAgIGlzQ29tbWVudDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgIGNoaWxkLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgICBjaGlsZC5lbmQgPSBlbmQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRQYXJlbnQuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcm9vdFxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc1ByZSAoZWwpIHtcbiAgICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtcHJlJykgIT0gbnVsbCkge1xuICAgICAgZWwucHJlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzUmF3QXR0cnMgKGVsKSB7XG4gICAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gICAgdmFyIGxlbiA9IGxpc3QubGVuZ3RoO1xuICAgIGlmIChsZW4pIHtcbiAgICAgIHZhciBhdHRycyA9IGVsLmF0dHJzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGF0dHJzW2ldID0ge1xuICAgICAgICAgIG5hbWU6IGxpc3RbaV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkobGlzdFtpXS52YWx1ZSlcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGxpc3RbaV0uc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgIGF0dHJzW2ldLnN0YXJ0ID0gbGlzdFtpXS5zdGFydDtcbiAgICAgICAgICBhdHRyc1tpXS5lbmQgPSBsaXN0W2ldLmVuZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWVsLnByZSkge1xuICAgICAgLy8gbm9uIHJvb3Qgbm9kZSBpbiBwcmUgYmxvY2tzIHdpdGggbm8gYXR0cmlidXRlc1xuICAgICAgZWwucGxhaW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3NFbGVtZW50IChcbiAgICBlbGVtZW50LFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgcHJvY2Vzc0tleShlbGVtZW50KTtcblxuICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSBwbGFpbiBlbGVtZW50IGFmdGVyXG4gICAgLy8gcmVtb3Zpbmcgc3RydWN0dXJhbCBhdHRyaWJ1dGVzXG4gICAgZWxlbWVudC5wbGFpbiA9IChcbiAgICAgICFlbGVtZW50LmtleSAmJlxuICAgICAgIWVsZW1lbnQuc2NvcGVkU2xvdHMgJiZcbiAgICAgICFlbGVtZW50LmF0dHJzTGlzdC5sZW5ndGhcbiAgICApO1xuXG4gICAgcHJvY2Vzc1JlZihlbGVtZW50KTtcbiAgICBwcm9jZXNzU2xvdENvbnRlbnQoZWxlbWVudCk7XG4gICAgcHJvY2Vzc1Nsb3RPdXRsZXQoZWxlbWVudCk7XG4gICAgcHJvY2Vzc0NvbXBvbmVudChlbGVtZW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVsZW1lbnQgPSB0cmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpIHx8IGVsZW1lbnQ7XG4gICAgfVxuICAgIHByb2Nlc3NBdHRycyhlbGVtZW50KTtcbiAgICByZXR1cm4gZWxlbWVudFxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0tleSAoZWwpIHtcbiAgICB2YXIgZXhwID0gZ2V0QmluZGluZ0F0dHIoZWwsICdrZXknKTtcbiAgICBpZiAoZXhwKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICBcIjx0ZW1wbGF0ZT4gY2Fubm90IGJlIGtleWVkLiBQbGFjZSB0aGUga2V5IG9uIHJlYWwgZWxlbWVudHMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAna2V5JylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbC5mb3IpIHtcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBlbC5pdGVyYXRvcjIgfHwgZWwuaXRlcmF0b3IxO1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQ7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yICYmIGl0ZXJhdG9yID09PSBleHAgJiYgcGFyZW50ICYmIHBhcmVudC50YWcgPT09ICd0cmFuc2l0aW9uLWdyb3VwJykge1xuICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICBcIkRvIG5vdCB1c2Ugdi1mb3IgaW5kZXggYXMga2V5IG9uIDx0cmFuc2l0aW9uLWdyb3VwPiBjaGlsZHJlbiwgXCIgK1xuICAgICAgICAgICAgICBcInRoaXMgaXMgdGhlIHNhbWUgYXMgbm90IHVzaW5nIGtleXMuXCIsXG4gICAgICAgICAgICAgIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAna2V5JyksXG4gICAgICAgICAgICAgIHRydWUgLyogdGlwICovXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWwua2V5ID0gZXhwO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3NSZWYgKGVsKSB7XG4gICAgdmFyIHJlZiA9IGdldEJpbmRpbmdBdHRyKGVsLCAncmVmJyk7XG4gICAgaWYgKHJlZikge1xuICAgICAgZWwucmVmID0gcmVmO1xuICAgICAgZWwucmVmSW5Gb3IgPSBjaGVja0luRm9yKGVsKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzRm9yIChlbCkge1xuICAgIHZhciBleHA7XG4gICAgaWYgKChleHAgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1mb3InKSkpIHtcbiAgICAgIHZhciByZXMgPSBwYXJzZUZvcihleHApO1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICBleHRlbmQoZWwsIHJlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgKFwiSW52YWxpZCB2LWZvciBleHByZXNzaW9uOiBcIiArIGV4cCksXG4gICAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ11cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG5cbiAgZnVuY3Rpb24gcGFyc2VGb3IgKGV4cCkge1xuICAgIHZhciBpbk1hdGNoID0gZXhwLm1hdGNoKGZvckFsaWFzUkUpO1xuICAgIGlmICghaW5NYXRjaCkgeyByZXR1cm4gfVxuICAgIHZhciByZXMgPSB7fTtcbiAgICByZXMuZm9yID0gaW5NYXRjaFsyXS50cmltKCk7XG4gICAgdmFyIGFsaWFzID0gaW5NYXRjaFsxXS50cmltKCkucmVwbGFjZShzdHJpcFBhcmVuc1JFLCAnJyk7XG4gICAgdmFyIGl0ZXJhdG9yTWF0Y2ggPSBhbGlhcy5tYXRjaChmb3JJdGVyYXRvclJFKTtcbiAgICBpZiAoaXRlcmF0b3JNYXRjaCkge1xuICAgICAgcmVzLmFsaWFzID0gYWxpYXMucmVwbGFjZShmb3JJdGVyYXRvclJFLCAnJykudHJpbSgpO1xuICAgICAgcmVzLml0ZXJhdG9yMSA9IGl0ZXJhdG9yTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgaWYgKGl0ZXJhdG9yTWF0Y2hbMl0pIHtcbiAgICAgICAgcmVzLml0ZXJhdG9yMiA9IGl0ZXJhdG9yTWF0Y2hbMl0udHJpbSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMuYWxpYXMgPSBhbGlhcztcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0lmIChlbCkge1xuICAgIHZhciBleHAgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicpO1xuICAgIGlmIChleHApIHtcbiAgICAgIGVsLmlmID0gZXhwO1xuICAgICAgYWRkSWZDb25kaXRpb24oZWwsIHtcbiAgICAgICAgZXhwOiBleHAsXG4gICAgICAgIGJsb2NrOiBlbFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlJykgIT0gbnVsbCkge1xuICAgICAgICBlbC5lbHNlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBlbHNlaWYgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJyk7XG4gICAgICBpZiAoZWxzZWlmKSB7XG4gICAgICAgIGVsLmVsc2VpZiA9IGVsc2VpZjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzSWZDb25kaXRpb25zIChlbCwgcGFyZW50KSB7XG4gICAgdmFyIHByZXYgPSBmaW5kUHJldkVsZW1lbnQocGFyZW50LmNoaWxkcmVuKTtcbiAgICBpZiAocHJldiAmJiBwcmV2LmlmKSB7XG4gICAgICBhZGRJZkNvbmRpdGlvbihwcmV2LCB7XG4gICAgICAgIGV4cDogZWwuZWxzZWlmLFxuICAgICAgICBibG9jazogZWxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuJDIoXG4gICAgICAgIFwidi1cIiArIChlbC5lbHNlaWYgPyAoJ2Vsc2UtaWY9XCInICsgZWwuZWxzZWlmICsgJ1wiJykgOiAnZWxzZScpICsgXCIgXCIgK1xuICAgICAgICBcInVzZWQgb24gZWxlbWVudCA8XCIgKyAoZWwudGFnKSArIFwiPiB3aXRob3V0IGNvcnJlc3BvbmRpbmcgdi1pZi5cIixcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbZWwuZWxzZWlmID8gJ3YtZWxzZS1pZicgOiAndi1lbHNlJ11cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZFByZXZFbGVtZW50IChjaGlsZHJlbikge1xuICAgIHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGlmIChjaGlsZHJlbltpXS50eXBlID09PSAxKSB7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbltpXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNoaWxkcmVuW2ldLnRleHQgIT09ICcgJykge1xuICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgIFwidGV4dCBcXFwiXCIgKyAoY2hpbGRyZW5baV0udGV4dC50cmltKCkpICsgXCJcXFwiIGJldHdlZW4gdi1pZiBhbmQgdi1lbHNlKC1pZikgXCIgK1xuICAgICAgICAgICAgXCJ3aWxsIGJlIGlnbm9yZWQuXCIsXG4gICAgICAgICAgICBjaGlsZHJlbltpXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRyZW4ucG9wKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkSWZDb25kaXRpb24gKGVsLCBjb25kaXRpb24pIHtcbiAgICBpZiAoIWVsLmlmQ29uZGl0aW9ucykge1xuICAgICAgZWwuaWZDb25kaXRpb25zID0gW107XG4gICAgfVxuICAgIGVsLmlmQ29uZGl0aW9ucy5wdXNoKGNvbmRpdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzT25jZSAoZWwpIHtcbiAgICB2YXIgb25jZSQkMSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LW9uY2UnKTtcbiAgICBpZiAob25jZSQkMSAhPSBudWxsKSB7XG4gICAgICBlbC5vbmNlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBoYW5kbGUgY29udGVudCBiZWluZyBwYXNzZWQgdG8gYSBjb21wb25lbnQgYXMgc2xvdCxcbiAgLy8gZS5nLiA8dGVtcGxhdGUgc2xvdD1cInh4eFwiPiwgPGRpdiBzbG90LXNjb3BlPVwieHh4XCI+XG4gIGZ1bmN0aW9uIHByb2Nlc3NTbG90Q29udGVudCAoZWwpIHtcbiAgICB2YXIgc2xvdFNjb3BlO1xuICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgIHNsb3RTY29wZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzY29wZScpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoc2xvdFNjb3BlKSB7XG4gICAgICAgIHdhcm4kMihcbiAgICAgICAgICBcInRoZSBcXFwic2NvcGVcXFwiIGF0dHJpYnV0ZSBmb3Igc2NvcGVkIHNsb3RzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFuZCBcIiArXG4gICAgICAgICAgXCJyZXBsYWNlZCBieSBcXFwic2xvdC1zY29wZVxcXCIgc2luY2UgMi41LiBUaGUgbmV3IFxcXCJzbG90LXNjb3BlXFxcIiBhdHRyaWJ1dGUgXCIgK1xuICAgICAgICAgIFwiY2FuIGFsc28gYmUgdXNlZCBvbiBwbGFpbiBlbGVtZW50cyBpbiBhZGRpdGlvbiB0byA8dGVtcGxhdGU+IHRvIFwiICtcbiAgICAgICAgICBcImRlbm90ZSBzY29wZWQgc2xvdHMuXCIsXG4gICAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3Njb3BlJ10sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZWwuc2xvdFNjb3BlID0gc2xvdFNjb3BlIHx8IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzbG90LXNjb3BlJyk7XG4gICAgfSBlbHNlIGlmICgoc2xvdFNjb3BlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Nsb3Qtc2NvcGUnKSkpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGVsLmF0dHJzTWFwWyd2LWZvciddKSB7XG4gICAgICAgIHdhcm4kMihcbiAgICAgICAgICBcIkFtYmlndW91cyBjb21iaW5lZCB1c2FnZSBvZiBzbG90LXNjb3BlIGFuZCB2LWZvciBvbiA8XCIgKyAoZWwudGFnKSArIFwiPiBcIiArXG4gICAgICAgICAgXCIodi1mb3IgdGFrZXMgaGlnaGVyIHByaW9yaXR5KS4gVXNlIGEgd3JhcHBlciA8dGVtcGxhdGU+IGZvciB0aGUgXCIgK1xuICAgICAgICAgIFwic2NvcGVkIHNsb3QgdG8gbWFrZSBpdCBjbGVhcmVyLlwiLFxuICAgICAgICAgIGVsLnJhd0F0dHJzTWFwWydzbG90LXNjb3BlJ10sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZWwuc2xvdFNjb3BlID0gc2xvdFNjb3BlO1xuICAgIH1cblxuICAgIC8vIHNsb3Q9XCJ4eHhcIlxuICAgIHZhciBzbG90VGFyZ2V0ID0gZ2V0QmluZGluZ0F0dHIoZWwsICdzbG90Jyk7XG4gICAgaWYgKHNsb3RUYXJnZXQpIHtcbiAgICAgIGVsLnNsb3RUYXJnZXQgPSBzbG90VGFyZ2V0ID09PSAnXCJcIicgPyAnXCJkZWZhdWx0XCInIDogc2xvdFRhcmdldDtcbiAgICAgIGVsLnNsb3RUYXJnZXREeW5hbWljID0gISEoZWwuYXR0cnNNYXBbJzpzbG90J10gfHwgZWwuYXR0cnNNYXBbJ3YtYmluZDpzbG90J10pO1xuICAgICAgLy8gcHJlc2VydmUgc2xvdCBhcyBhbiBhdHRyaWJ1dGUgZm9yIG5hdGl2ZSBzaGFkb3cgRE9NIGNvbXBhdFxuICAgICAgLy8gb25seSBmb3Igbm9uLXNjb3BlZCBzbG90cy5cbiAgICAgIGlmIChlbC50YWcgIT09ICd0ZW1wbGF0ZScgJiYgIWVsLnNsb3RTY29wZSkge1xuICAgICAgICBhZGRBdHRyKGVsLCAnc2xvdCcsIHNsb3RUYXJnZXQsIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAnc2xvdCcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLjYgdi1zbG90IHN5bnRheFxuICAgIHtcbiAgICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgLy8gdi1zbG90IG9uIDx0ZW1wbGF0ZT5cbiAgICAgICAgdmFyIHNsb3RCaW5kaW5nID0gZ2V0QW5kUmVtb3ZlQXR0ckJ5UmVnZXgoZWwsIHNsb3RSRSk7XG4gICAgICAgIGlmIChzbG90QmluZGluZykge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChlbC5zbG90VGFyZ2V0IHx8IGVsLnNsb3RTY29wZSkge1xuICAgICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIG1peGVkIHVzYWdlIG9mIGRpZmZlcmVudCBzbG90IHN5bnRheGVzLlwiLFxuICAgICAgICAgICAgICAgIGVsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWwucGFyZW50ICYmICFtYXliZUNvbXBvbmVudChlbC5wYXJlbnQpKSB7XG4gICAgICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgICAgICBcIjx0ZW1wbGF0ZSB2LXNsb3Q+IGNhbiBvbmx5IGFwcGVhciBhdCB0aGUgcm9vdCBsZXZlbCBpbnNpZGUgXCIgK1xuICAgICAgICAgICAgICAgIFwidGhlIHJlY2VpdmluZyBjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICBlbFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgcmVmID0gZ2V0U2xvdE5hbWUoc2xvdEJpbmRpbmcpO1xuICAgICAgICAgIHZhciBuYW1lID0gcmVmLm5hbWU7XG4gICAgICAgICAgdmFyIGR5bmFtaWMgPSByZWYuZHluYW1pYztcbiAgICAgICAgICBlbC5zbG90VGFyZ2V0ID0gbmFtZTtcbiAgICAgICAgICBlbC5zbG90VGFyZ2V0RHluYW1pYyA9IGR5bmFtaWM7XG4gICAgICAgICAgZWwuc2xvdFNjb3BlID0gc2xvdEJpbmRpbmcudmFsdWUgfHwgZW1wdHlTbG90U2NvcGVUb2tlbjsgLy8gZm9yY2UgaXQgaW50byBhIHNjb3BlZCBzbG90IGZvciBwZXJmXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHYtc2xvdCBvbiBjb21wb25lbnQsIGRlbm90ZXMgZGVmYXVsdCBzbG90XG4gICAgICAgIHZhciBzbG90QmluZGluZyQxID0gZ2V0QW5kUmVtb3ZlQXR0ckJ5UmVnZXgoZWwsIHNsb3RSRSk7XG4gICAgICAgIGlmIChzbG90QmluZGluZyQxKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFtYXliZUNvbXBvbmVudChlbCkpIHtcbiAgICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICAgIFwidi1zbG90IGNhbiBvbmx5IGJlIHVzZWQgb24gY29tcG9uZW50cyBvciA8dGVtcGxhdGU+LlwiLFxuICAgICAgICAgICAgICAgIHNsb3RCaW5kaW5nJDFcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbC5zbG90U2NvcGUgfHwgZWwuc2xvdFRhcmdldCkge1xuICAgICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIG1peGVkIHVzYWdlIG9mIGRpZmZlcmVudCBzbG90IHN5bnRheGVzLlwiLFxuICAgICAgICAgICAgICAgIGVsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWwuc2NvcGVkU2xvdHMpIHtcbiAgICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICAgIFwiVG8gYXZvaWQgc2NvcGUgYW1iaWd1aXR5LCB0aGUgZGVmYXVsdCBzbG90IHNob3VsZCBhbHNvIHVzZSBcIiArXG4gICAgICAgICAgICAgICAgXCI8dGVtcGxhdGU+IHN5bnRheCB3aGVuIHRoZXJlIGFyZSBvdGhlciBuYW1lZCBzbG90cy5cIixcbiAgICAgICAgICAgICAgICBzbG90QmluZGluZyQxXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGFkZCB0aGUgY29tcG9uZW50J3MgY2hpbGRyZW4gdG8gaXRzIGRlZmF1bHQgc2xvdFxuICAgICAgICAgIHZhciBzbG90cyA9IGVsLnNjb3BlZFNsb3RzIHx8IChlbC5zY29wZWRTbG90cyA9IHt9KTtcbiAgICAgICAgICB2YXIgcmVmJDEgPSBnZXRTbG90TmFtZShzbG90QmluZGluZyQxKTtcbiAgICAgICAgICB2YXIgbmFtZSQxID0gcmVmJDEubmFtZTtcbiAgICAgICAgICB2YXIgZHluYW1pYyQxID0gcmVmJDEuZHluYW1pYztcbiAgICAgICAgICB2YXIgc2xvdENvbnRhaW5lciA9IHNsb3RzW25hbWUkMV0gPSBjcmVhdGVBU1RFbGVtZW50KCd0ZW1wbGF0ZScsIFtdLCBlbCk7XG4gICAgICAgICAgc2xvdENvbnRhaW5lci5zbG90VGFyZ2V0ID0gbmFtZSQxO1xuICAgICAgICAgIHNsb3RDb250YWluZXIuc2xvdFRhcmdldER5bmFtaWMgPSBkeW5hbWljJDE7XG4gICAgICAgICAgc2xvdENvbnRhaW5lci5jaGlsZHJlbiA9IGVsLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgaWYgKCFjLnNsb3RTY29wZSkge1xuICAgICAgICAgICAgICBjLnBhcmVudCA9IHNsb3RDb250YWluZXI7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2xvdENvbnRhaW5lci5zbG90U2NvcGUgPSBzbG90QmluZGluZyQxLnZhbHVlIHx8IGVtcHR5U2xvdFNjb3BlVG9rZW47XG4gICAgICAgICAgLy8gcmVtb3ZlIGNoaWxkcmVuIGFzIHRoZXkgYXJlIHJldHVybmVkIGZyb20gc2NvcGVkU2xvdHMgbm93XG4gICAgICAgICAgZWwuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAvLyBtYXJrIGVsIG5vbi1wbGFpbiBzbyBkYXRhIGdldHMgZ2VuZXJhdGVkXG4gICAgICAgICAgZWwucGxhaW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNsb3ROYW1lIChiaW5kaW5nKSB7XG4gICAgdmFyIG5hbWUgPSBiaW5kaW5nLm5hbWUucmVwbGFjZShzbG90UkUsICcnKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGlmIChiaW5kaW5nLm5hbWVbMF0gIT09ICcjJykge1xuICAgICAgICBuYW1lID0gJ2RlZmF1bHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FybiQyKFxuICAgICAgICAgIFwidi1zbG90IHNob3J0aGFuZCBzeW50YXggcmVxdWlyZXMgYSBzbG90IG5hbWUuXCIsXG4gICAgICAgICAgYmluZGluZ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZHluYW1pY0FyZ1JFLnRlc3QobmFtZSlcbiAgICAgIC8vIGR5bmFtaWMgW25hbWVdXG4gICAgICA/IHsgbmFtZTogbmFtZS5zbGljZSgxLCAtMSksIGR5bmFtaWM6IHRydWUgfVxuICAgICAgLy8gc3RhdGljIG5hbWVcbiAgICAgIDogeyBuYW1lOiAoXCJcXFwiXCIgKyBuYW1lICsgXCJcXFwiXCIpLCBkeW5hbWljOiBmYWxzZSB9XG4gIH1cblxuICAvLyBoYW5kbGUgPHNsb3QvPiBvdXRsZXRzXG4gIGZ1bmN0aW9uIHByb2Nlc3NTbG90T3V0bGV0IChlbCkge1xuICAgIGlmIChlbC50YWcgPT09ICdzbG90Jykge1xuICAgICAgZWwuc2xvdE5hbWUgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ25hbWUnKTtcbiAgICAgIGlmIChlbC5rZXkpIHtcbiAgICAgICAgd2FybiQyKFxuICAgICAgICAgIFwiYGtleWAgZG9lcyBub3Qgd29yayBvbiA8c2xvdD4gYmVjYXVzZSBzbG90cyBhcmUgYWJzdHJhY3Qgb3V0bGV0cyBcIiArXG4gICAgICAgICAgXCJhbmQgY2FuIHBvc3NpYmx5IGV4cGFuZCBpbnRvIG11bHRpcGxlIGVsZW1lbnRzLiBcIiArXG4gICAgICAgICAgXCJVc2UgdGhlIGtleSBvbiBhIHdyYXBwaW5nIGVsZW1lbnQgaW5zdGVhZC5cIixcbiAgICAgICAgICBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0NvbXBvbmVudCAoZWwpIHtcbiAgICB2YXIgYmluZGluZztcbiAgICBpZiAoKGJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2lzJykpKSB7XG4gICAgICBlbC5jb21wb25lbnQgPSBiaW5kaW5nO1xuICAgIH1cbiAgICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ2lubGluZS10ZW1wbGF0ZScpICE9IG51bGwpIHtcbiAgICAgIGVsLmlubGluZVRlbXBsYXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzQXR0cnMgKGVsKSB7XG4gICAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gICAgdmFyIGksIGwsIG5hbWUsIHJhd05hbWUsIHZhbHVlLCBtb2RpZmllcnMsIHN5bmNHZW4sIGlzRHluYW1pYztcbiAgICBmb3IgKGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIG5hbWUgPSByYXdOYW1lID0gbGlzdFtpXS5uYW1lO1xuICAgICAgdmFsdWUgPSBsaXN0W2ldLnZhbHVlO1xuICAgICAgaWYgKGRpclJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgLy8gbWFyayBlbGVtZW50IGFzIGR5bmFtaWNcbiAgICAgICAgZWwuaGFzQmluZGluZ3MgPSB0cnVlO1xuICAgICAgICAvLyBtb2RpZmllcnNcbiAgICAgICAgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllcnMobmFtZS5yZXBsYWNlKGRpclJFLCAnJykpO1xuICAgICAgICAvLyBzdXBwb3J0IC5mb28gc2hvcnRoYW5kIHN5bnRheCBmb3IgdGhlIC5wcm9wIG1vZGlmaWVyXG4gICAgICAgIGlmIChtb2RpZmllcnMpIHtcbiAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG1vZGlmaWVyUkUsICcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmluZFJFLnRlc3QobmFtZSkpIHsgLy8gdi1iaW5kXG4gICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShiaW5kUkUsICcnKTtcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmlsdGVycyh2YWx1ZSk7XG4gICAgICAgICAgaXNEeW5hbWljID0gZHluYW1pY0FyZ1JFLnRlc3QobmFtZSk7XG4gICAgICAgICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgIChcIlRoZSB2YWx1ZSBmb3IgYSB2LWJpbmQgZXhwcmVzc2lvbiBjYW5ub3QgYmUgZW1wdHkuIEZvdW5kIGluIFxcXCJ2LWJpbmQ6XCIgKyBuYW1lICsgXCJcXFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobW9kaWZpZXJzKSB7XG4gICAgICAgICAgICBpZiAobW9kaWZpZXJzLnByb3AgJiYgIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICBuYW1lID0gY2FtZWxpemUobmFtZSk7XG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSAnaW5uZXJIdG1sJykgeyBuYW1lID0gJ2lubmVySFRNTCc7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtb2RpZmllcnMuY2FtZWwgJiYgIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICBuYW1lID0gY2FtZWxpemUobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9kaWZpZXJzLnN5bmMpIHtcbiAgICAgICAgICAgICAgc3luY0dlbiA9IGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCBcIiRldmVudFwiKTtcbiAgICAgICAgICAgICAgaWYgKCFpc0R5bmFtaWMpIHtcbiAgICAgICAgICAgICAgICBhZGRIYW5kbGVyKFxuICAgICAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgICAgICAoXCJ1cGRhdGU6XCIgKyAoY2FtZWxpemUobmFtZSkpKSxcbiAgICAgICAgICAgICAgICAgIHN5bmNHZW4sXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICB3YXJuJDIsXG4gICAgICAgICAgICAgICAgICBsaXN0W2ldXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoaHlwaGVuYXRlKG5hbWUpICE9PSBjYW1lbGl6ZShuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgYWRkSGFuZGxlcihcbiAgICAgICAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgICAgICAgIChcInVwZGF0ZTpcIiArIChoeXBoZW5hdGUobmFtZSkpKSxcbiAgICAgICAgICAgICAgICAgICAgc3luY0dlbixcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMixcbiAgICAgICAgICAgICAgICAgICAgbGlzdFtpXVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlciB3LyBkeW5hbWljIGV2ZW50IG5hbWVcbiAgICAgICAgICAgICAgICBhZGRIYW5kbGVyKFxuICAgICAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgICAgICAoXCJcXFwidXBkYXRlOlxcXCIrKFwiICsgbmFtZSArIFwiKVwiKSxcbiAgICAgICAgICAgICAgICAgIHN5bmNHZW4sXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICB3YXJuJDIsXG4gICAgICAgICAgICAgICAgICBsaXN0W2ldLFxuICAgICAgICAgICAgICAgICAgdHJ1ZSAvLyBkeW5hbWljXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoKG1vZGlmaWVycyAmJiBtb2RpZmllcnMucHJvcCkgfHwgKFxuICAgICAgICAgICAgIWVsLmNvbXBvbmVudCAmJiBwbGF0Zm9ybU11c3RVc2VQcm9wKGVsLnRhZywgZWwuYXR0cnNNYXAudHlwZSwgbmFtZSlcbiAgICAgICAgICApKSB7XG4gICAgICAgICAgICBhZGRQcm9wKGVsLCBuYW1lLCB2YWx1ZSwgbGlzdFtpXSwgaXNEeW5hbWljKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWRkQXR0cihlbCwgbmFtZSwgdmFsdWUsIGxpc3RbaV0sIGlzRHluYW1pYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9uUkUudGVzdChuYW1lKSkgeyAvLyB2LW9uXG4gICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShvblJFLCAnJyk7XG4gICAgICAgICAgaXNEeW5hbWljID0gZHluYW1pY0FyZ1JFLnRlc3QobmFtZSk7XG4gICAgICAgICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRIYW5kbGVyKGVsLCBuYW1lLCB2YWx1ZSwgbW9kaWZpZXJzLCBmYWxzZSwgd2FybiQyLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgICB9IGVsc2UgeyAvLyBub3JtYWwgZGlyZWN0aXZlc1xuICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoZGlyUkUsICcnKTtcbiAgICAgICAgICAvLyBwYXJzZSBhcmdcbiAgICAgICAgICB2YXIgYXJnTWF0Y2ggPSBuYW1lLm1hdGNoKGFyZ1JFKTtcbiAgICAgICAgICB2YXIgYXJnID0gYXJnTWF0Y2ggJiYgYXJnTWF0Y2hbMV07XG4gICAgICAgICAgaXNEeW5hbWljID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGFyZykge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgLShhcmcubGVuZ3RoICsgMSkpO1xuICAgICAgICAgICAgaWYgKGR5bmFtaWNBcmdSRS50ZXN0KGFyZykpIHtcbiAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgaXNEeW5hbWljID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkRGlyZWN0aXZlKGVsLCBuYW1lLCByYXdOYW1lLCB2YWx1ZSwgYXJnLCBpc0R5bmFtaWMsIG1vZGlmaWVycywgbGlzdFtpXSk7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgICAgICAgIGNoZWNrRm9yQWxpYXNNb2RlbChlbCwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGl0ZXJhbCBhdHRyaWJ1dGVcbiAgICAgICAge1xuICAgICAgICAgIHZhciByZXMgPSBwYXJzZVRleHQodmFsdWUsIGRlbGltaXRlcnMpO1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgICAgbmFtZSArIFwiPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiOiBcIiArXG4gICAgICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAgICAgICAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBpZD1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOmlkPVwidmFsXCI+LicsXG4gICAgICAgICAgICAgIGxpc3RbaV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFkZEF0dHIoZWwsIG5hbWUsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgbGlzdFtpXSk7XG4gICAgICAgIC8vICM2ODg3IGZpcmVmb3ggZG9lc24ndCB1cGRhdGUgbXV0ZWQgc3RhdGUgaWYgc2V0IHZpYSBhdHRyaWJ1dGVcbiAgICAgICAgLy8gZXZlbiBpbW1lZGlhdGVseSBhZnRlciBlbGVtZW50IGNyZWF0aW9uXG4gICAgICAgIGlmICghZWwuY29tcG9uZW50ICYmXG4gICAgICAgICAgICBuYW1lID09PSAnbXV0ZWQnICYmXG4gICAgICAgICAgICBwbGF0Zm9ybU11c3RVc2VQcm9wKGVsLnRhZywgZWwuYXR0cnNNYXAudHlwZSwgbmFtZSkpIHtcbiAgICAgICAgICBhZGRQcm9wKGVsLCBuYW1lLCAndHJ1ZScsIGxpc3RbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tJbkZvciAoZWwpIHtcbiAgICB2YXIgcGFyZW50ID0gZWw7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKHBhcmVudC5mb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1vZGlmaWVycyAobmFtZSkge1xuICAgIHZhciBtYXRjaCA9IG5hbWUubWF0Y2gobW9kaWZpZXJSRSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB2YXIgcmV0ID0ge307XG4gICAgICBtYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7IHJldFttLnNsaWNlKDEpXSA9IHRydWU7IH0pO1xuICAgICAgcmV0dXJuIHJldFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1ha2VBdHRyc01hcCAoYXR0cnMpIHtcbiAgICB2YXIgbWFwID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhdHRycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbWFwW2F0dHJzW2ldLm5hbWVdICYmICFpc0lFICYmICFpc0VkZ2VcbiAgICAgICkge1xuICAgICAgICB3YXJuJDIoJ2R1cGxpY2F0ZSBhdHRyaWJ1dGU6ICcgKyBhdHRyc1tpXS5uYW1lLCBhdHRyc1tpXSk7XG4gICAgICB9XG4gICAgICBtYXBbYXR0cnNbaV0ubmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcFxuICB9XG5cbiAgLy8gZm9yIHNjcmlwdCAoZS5nLiB0eXBlPVwieC90ZW1wbGF0ZVwiKSBvciBzdHlsZSwgZG8gbm90IGRlY29kZSBjb250ZW50XG4gIGZ1bmN0aW9uIGlzVGV4dFRhZyAoZWwpIHtcbiAgICByZXR1cm4gZWwudGFnID09PSAnc2NyaXB0JyB8fCBlbC50YWcgPT09ICdzdHlsZSdcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRm9yYmlkZGVuVGFnIChlbCkge1xuICAgIHJldHVybiAoXG4gICAgICBlbC50YWcgPT09ICdzdHlsZScgfHxcbiAgICAgIChlbC50YWcgPT09ICdzY3JpcHQnICYmIChcbiAgICAgICAgIWVsLmF0dHJzTWFwLnR5cGUgfHxcbiAgICAgICAgZWwuYXR0cnNNYXAudHlwZSA9PT0gJ3RleHQvamF2YXNjcmlwdCdcbiAgICAgICkpXG4gICAgKVxuICB9XG5cbiAgdmFyIGllTlNCdWcgPSAvXnhtbG5zOk5TXFxkKy87XG4gIHZhciBpZU5TUHJlZml4ID0gL15OU1xcZCs6LztcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmdW5jdGlvbiBndWFyZElFU1ZHQnVnIChhdHRycykge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYXR0ciA9IGF0dHJzW2ldO1xuICAgICAgaWYgKCFpZU5TQnVnLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICBhdHRyLm5hbWUgPSBhdHRyLm5hbWUucmVwbGFjZShpZU5TUHJlZml4LCAnJyk7XG4gICAgICAgIHJlcy5wdXNoKGF0dHIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0ZvckFsaWFzTW9kZWwgKGVsLCB2YWx1ZSkge1xuICAgIHZhciBfZWwgPSBlbDtcbiAgICB3aGlsZSAoX2VsKSB7XG4gICAgICBpZiAoX2VsLmZvciAmJiBfZWwuYWxpYXMgPT09IHZhbHVlKSB7XG4gICAgICAgIHdhcm4kMihcbiAgICAgICAgICBcIjxcIiArIChlbC50YWcpICsgXCIgdi1tb2RlbD1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIj46IFwiICtcbiAgICAgICAgICBcIllvdSBhcmUgYmluZGluZyB2LW1vZGVsIGRpcmVjdGx5IHRvIGEgdi1mb3IgaXRlcmF0aW9uIGFsaWFzLiBcIiArXG4gICAgICAgICAgXCJUaGlzIHdpbGwgbm90IGJlIGFibGUgdG8gbW9kaWZ5IHRoZSB2LWZvciBzb3VyY2UgYXJyYXkgYmVjYXVzZSBcIiArXG4gICAgICAgICAgXCJ3cml0aW5nIHRvIHRoZSBhbGlhcyBpcyBsaWtlIG1vZGlmeWluZyBhIGZ1bmN0aW9uIGxvY2FsIHZhcmlhYmxlLiBcIiArXG4gICAgICAgICAgXCJDb25zaWRlciB1c2luZyBhbiBhcnJheSBvZiBvYmplY3RzIGFuZCB1c2Ugdi1tb2RlbCBvbiBhbiBvYmplY3QgcHJvcGVydHkgaW5zdGVhZC5cIixcbiAgICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1tb2RlbCddXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBfZWwgPSBfZWwucGFyZW50O1xuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIHByZVRyYW5zZm9ybU5vZGUgKGVsLCBvcHRpb25zKSB7XG4gICAgaWYgKGVsLnRhZyA9PT0gJ2lucHV0Jykge1xuICAgICAgdmFyIG1hcCA9IGVsLmF0dHJzTWFwO1xuICAgICAgaWYgKCFtYXBbJ3YtbW9kZWwnXSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGVCaW5kaW5nO1xuICAgICAgaWYgKG1hcFsnOnR5cGUnXSB8fCBtYXBbJ3YtYmluZDp0eXBlJ10pIHtcbiAgICAgICAgdHlwZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3R5cGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghbWFwLnR5cGUgJiYgIXR5cGVCaW5kaW5nICYmIG1hcFsndi1iaW5kJ10pIHtcbiAgICAgICAgdHlwZUJpbmRpbmcgPSBcIihcIiArIChtYXBbJ3YtYmluZCddKSArIFwiKS50eXBlXCI7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlQmluZGluZykge1xuICAgICAgICB2YXIgaWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicsIHRydWUpO1xuICAgICAgICB2YXIgaWZDb25kaXRpb25FeHRyYSA9IGlmQ29uZGl0aW9uID8gKFwiJiYoXCIgKyBpZkNvbmRpdGlvbiArIFwiKVwiKSA6IFwiXCI7XG4gICAgICAgIHZhciBoYXNFbHNlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZScsIHRydWUpICE9IG51bGw7XG4gICAgICAgIHZhciBlbHNlSWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJywgdHJ1ZSk7XG4gICAgICAgIC8vIDEuIGNoZWNrYm94XG4gICAgICAgIHZhciBicmFuY2gwID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgLy8gcHJvY2VzcyBmb3Igb24gdGhlIG1haW4gbm9kZVxuICAgICAgICBwcm9jZXNzRm9yKGJyYW5jaDApO1xuICAgICAgICBhZGRSYXdBdHRyKGJyYW5jaDAsICd0eXBlJywgJ2NoZWNrYm94Jyk7XG4gICAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDAsIG9wdGlvbnMpO1xuICAgICAgICBicmFuY2gwLnByb2Nlc3NlZCA9IHRydWU7IC8vIHByZXZlbnQgaXQgZnJvbSBkb3VibGUtcHJvY2Vzc2VkXG4gICAgICAgIGJyYW5jaDAuaWYgPSBcIihcIiArIHR5cGVCaW5kaW5nICsgXCIpPT09J2NoZWNrYm94J1wiICsgaWZDb25kaXRpb25FeHRyYTtcbiAgICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICAgIGV4cDogYnJhbmNoMC5pZixcbiAgICAgICAgICBibG9jazogYnJhbmNoMFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gMi4gYWRkIHJhZGlvIGVsc2UtaWYgY29uZGl0aW9uXG4gICAgICAgIHZhciBicmFuY2gxID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gxLCAndi1mb3InLCB0cnVlKTtcbiAgICAgICAgYWRkUmF3QXR0cihicmFuY2gxLCAndHlwZScsICdyYWRpbycpO1xuICAgICAgICBwcm9jZXNzRWxlbWVudChicmFuY2gxLCBvcHRpb25zKTtcbiAgICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICAgIGV4cDogXCIoXCIgKyB0eXBlQmluZGluZyArIFwiKT09PSdyYWRpbydcIiArIGlmQ29uZGl0aW9uRXh0cmEsXG4gICAgICAgICAgYmxvY2s6IGJyYW5jaDFcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIDMuIG90aGVyXG4gICAgICAgIHZhciBicmFuY2gyID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gyLCAndi1mb3InLCB0cnVlKTtcbiAgICAgICAgYWRkUmF3QXR0cihicmFuY2gyLCAnOnR5cGUnLCB0eXBlQmluZGluZyk7XG4gICAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDIsIG9wdGlvbnMpO1xuICAgICAgICBhZGRJZkNvbmRpdGlvbihicmFuY2gwLCB7XG4gICAgICAgICAgZXhwOiBpZkNvbmRpdGlvbixcbiAgICAgICAgICBibG9jazogYnJhbmNoMlxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaGFzRWxzZSkge1xuICAgICAgICAgIGJyYW5jaDAuZWxzZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxzZUlmQ29uZGl0aW9uKSB7XG4gICAgICAgICAgYnJhbmNoMC5lbHNlaWYgPSBlbHNlSWZDb25kaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnJhbmNoMFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lQVNURWxlbWVudCAoZWwpIHtcbiAgICByZXR1cm4gY3JlYXRlQVNURWxlbWVudChlbC50YWcsIGVsLmF0dHJzTGlzdC5zbGljZSgpLCBlbC5wYXJlbnQpXG4gIH1cblxuICB2YXIgbW9kZWwkMSA9IHtcbiAgICBwcmVUcmFuc2Zvcm1Ob2RlOiBwcmVUcmFuc2Zvcm1Ob2RlXG4gIH07XG5cbiAgdmFyIG1vZHVsZXMkMSA9IFtcbiAgICBrbGFzcyQxLFxuICAgIHN0eWxlJDEsXG4gICAgbW9kZWwkMVxuICBdO1xuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIHRleHQgKGVsLCBkaXIpIHtcbiAgICBpZiAoZGlyLnZhbHVlKSB7XG4gICAgICBhZGRQcm9wKGVsLCAndGV4dENvbnRlbnQnLCAoXCJfcyhcIiArIChkaXIudmFsdWUpICsgXCIpXCIpLCBkaXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGh0bWwgKGVsLCBkaXIpIHtcbiAgICBpZiAoZGlyLnZhbHVlKSB7XG4gICAgICBhZGRQcm9wKGVsLCAnaW5uZXJIVE1MJywgKFwiX3MoXCIgKyAoZGlyLnZhbHVlKSArIFwiKVwiKSwgZGlyKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZGlyZWN0aXZlcyQxID0ge1xuICAgIG1vZGVsOiBtb2RlbCxcbiAgICB0ZXh0OiB0ZXh0LFxuICAgIGh0bWw6IGh0bWxcbiAgfTtcblxuICAvKiAgKi9cblxuICB2YXIgYmFzZU9wdGlvbnMgPSB7XG4gICAgZXhwZWN0SFRNTDogdHJ1ZSxcbiAgICBtb2R1bGVzOiBtb2R1bGVzJDEsXG4gICAgZGlyZWN0aXZlczogZGlyZWN0aXZlcyQxLFxuICAgIGlzUHJlVGFnOiBpc1ByZVRhZyxcbiAgICBpc1VuYXJ5VGFnOiBpc1VuYXJ5VGFnLFxuICAgIG11c3RVc2VQcm9wOiBtdXN0VXNlUHJvcCxcbiAgICBjYW5CZUxlZnRPcGVuVGFnOiBjYW5CZUxlZnRPcGVuVGFnLFxuICAgIGlzUmVzZXJ2ZWRUYWc6IGlzUmVzZXJ2ZWRUYWcsXG4gICAgZ2V0VGFnTmFtZXNwYWNlOiBnZXRUYWdOYW1lc3BhY2UsXG4gICAgc3RhdGljS2V5czogZ2VuU3RhdGljS2V5cyhtb2R1bGVzJDEpXG4gIH07XG5cbiAgLyogICovXG5cbiAgdmFyIGlzU3RhdGljS2V5O1xuICB2YXIgaXNQbGF0Zm9ybVJlc2VydmVkVGFnO1xuXG4gIHZhciBnZW5TdGF0aWNLZXlzQ2FjaGVkID0gY2FjaGVkKGdlblN0YXRpY0tleXMkMSk7XG5cbiAgLyoqXG4gICAqIEdvYWwgb2YgdGhlIG9wdGltaXplcjogd2FsayB0aGUgZ2VuZXJhdGVkIHRlbXBsYXRlIEFTVCB0cmVlXG4gICAqIGFuZCBkZXRlY3Qgc3ViLXRyZWVzIHRoYXQgYXJlIHB1cmVseSBzdGF0aWMsIGkuZS4gcGFydHMgb2ZcbiAgICogdGhlIERPTSB0aGF0IG5ldmVyIG5lZWRzIHRvIGNoYW5nZS5cbiAgICpcbiAgICogT25jZSB3ZSBkZXRlY3QgdGhlc2Ugc3ViLXRyZWVzLCB3ZSBjYW46XG4gICAqXG4gICAqIDEuIEhvaXN0IHRoZW0gaW50byBjb25zdGFudHMsIHNvIHRoYXQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG9cbiAgICogICAgY3JlYXRlIGZyZXNoIG5vZGVzIGZvciB0aGVtIG9uIGVhY2ggcmUtcmVuZGVyO1xuICAgKiAyLiBDb21wbGV0ZWx5IHNraXAgdGhlbSBpbiB0aGUgcGF0Y2hpbmcgcHJvY2Vzcy5cbiAgICovXG4gIGZ1bmN0aW9uIG9wdGltaXplIChyb290LCBvcHRpb25zKSB7XG4gICAgaWYgKCFyb290KSB7IHJldHVybiB9XG4gICAgaXNTdGF0aWNLZXkgPSBnZW5TdGF0aWNLZXlzQ2FjaGVkKG9wdGlvbnMuc3RhdGljS2V5cyB8fCAnJyk7XG4gICAgaXNQbGF0Zm9ybVJlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICAgIC8vIGZpcnN0IHBhc3M6IG1hcmsgYWxsIG5vbi1zdGF0aWMgbm9kZXMuXG4gICAgbWFya1N0YXRpYyQxKHJvb3QpO1xuICAgIC8vIHNlY29uZCBwYXNzOiBtYXJrIHN0YXRpYyByb290cy5cbiAgICBtYXJrU3RhdGljUm9vdHMocm9vdCwgZmFsc2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuU3RhdGljS2V5cyQxIChrZXlzKSB7XG4gICAgcmV0dXJuIG1ha2VNYXAoXG4gICAgICAndHlwZSx0YWcsYXR0cnNMaXN0LGF0dHJzTWFwLHBsYWluLHBhcmVudCxjaGlsZHJlbixhdHRycyxzdGFydCxlbmQscmF3QXR0cnNNYXAnICtcbiAgICAgIChrZXlzID8gJywnICsga2V5cyA6ICcnKVxuICAgIClcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtTdGF0aWMkMSAobm9kZSkge1xuICAgIG5vZGUuc3RhdGljID0gaXNTdGF0aWMobm9kZSk7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgLy8gZG8gbm90IG1ha2UgY29tcG9uZW50IHNsb3QgY29udGVudCBzdGF0aWMuIHRoaXMgYXZvaWRzXG4gICAgICAvLyAxLiBjb21wb25lbnRzIG5vdCBhYmxlIHRvIG11dGF0ZSBzbG90IG5vZGVzXG4gICAgICAvLyAyLiBzdGF0aWMgc2xvdCBjb250ZW50IGZhaWxzIGZvciBob3QtcmVsb2FkaW5nXG4gICAgICBpZiAoXG4gICAgICAgICFpc1BsYXRmb3JtUmVzZXJ2ZWRUYWcobm9kZS50YWcpICYmXG4gICAgICAgIG5vZGUudGFnICE9PSAnc2xvdCcgJiZcbiAgICAgICAgbm9kZS5hdHRyc01hcFsnaW5saW5lLXRlbXBsYXRlJ10gPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldO1xuICAgICAgICBtYXJrU3RhdGljJDEoY2hpbGQpO1xuICAgICAgICBpZiAoIWNoaWxkLnN0YXRpYykge1xuICAgICAgICAgIG5vZGUuc3RhdGljID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmlmQ29uZGl0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpJDEgPSAxLCBsJDEgPSBub2RlLmlmQ29uZGl0aW9ucy5sZW5ndGg7IGkkMSA8IGwkMTsgaSQxKyspIHtcbiAgICAgICAgICB2YXIgYmxvY2sgPSBub2RlLmlmQ29uZGl0aW9uc1tpJDFdLmJsb2NrO1xuICAgICAgICAgIG1hcmtTdGF0aWMkMShibG9jayk7XG4gICAgICAgICAgaWYgKCFibG9jay5zdGF0aWMpIHtcbiAgICAgICAgICAgIG5vZGUuc3RhdGljID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya1N0YXRpY1Jvb3RzIChub2RlLCBpc0luRm9yKSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgaWYgKG5vZGUuc3RhdGljIHx8IG5vZGUub25jZSkge1xuICAgICAgICBub2RlLnN0YXRpY0luRm9yID0gaXNJbkZvcjtcbiAgICAgIH1cbiAgICAgIC8vIEZvciBhIG5vZGUgdG8gcXVhbGlmeSBhcyBhIHN0YXRpYyByb290LCBpdCBzaG91bGQgaGF2ZSBjaGlsZHJlbiB0aGF0XG4gICAgICAvLyBhcmUgbm90IGp1c3Qgc3RhdGljIHRleHQuIE90aGVyd2lzZSB0aGUgY29zdCBvZiBob2lzdGluZyBvdXQgd2lsbFxuICAgICAgLy8gb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIGFuZCBpdCdzIGJldHRlciBvZmYgdG8ganVzdCBhbHdheXMgcmVuZGVyIGl0IGZyZXNoLlxuICAgICAgaWYgKG5vZGUuc3RhdGljICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYmICEoXG4gICAgICAgIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUuY2hpbGRyZW5bMF0udHlwZSA9PT0gM1xuICAgICAgKSkge1xuICAgICAgICBub2RlLnN0YXRpY1Jvb3QgPSB0cnVlO1xuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuc3RhdGljUm9vdCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIG1hcmtTdGF0aWNSb290cyhub2RlLmNoaWxkcmVuW2ldLCBpc0luRm9yIHx8ICEhbm9kZS5mb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5pZkNvbmRpdGlvbnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSQxID0gMSwgbCQxID0gbm9kZS5pZkNvbmRpdGlvbnMubGVuZ3RoOyBpJDEgPCBsJDE7IGkkMSsrKSB7XG4gICAgICAgICAgbWFya1N0YXRpY1Jvb3RzKG5vZGUuaWZDb25kaXRpb25zW2kkMV0uYmxvY2ssIGlzSW5Gb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTdGF0aWMgKG5vZGUpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSAyKSB7IC8vIGV4cHJlc3Npb25cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09PSAzKSB7IC8vIHRleHRcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiAhIShub2RlLnByZSB8fCAoXG4gICAgICAhbm9kZS5oYXNCaW5kaW5ncyAmJiAvLyBubyBkeW5hbWljIGJpbmRpbmdzXG4gICAgICAhbm9kZS5pZiAmJiAhbm9kZS5mb3IgJiYgLy8gbm90IHYtaWYgb3Igdi1mb3Igb3Igdi1lbHNlXG4gICAgICAhaXNCdWlsdEluVGFnKG5vZGUudGFnKSAmJiAvLyBub3QgYSBidWlsdC1pblxuICAgICAgaXNQbGF0Zm9ybVJlc2VydmVkVGFnKG5vZGUudGFnKSAmJiAvLyBub3QgYSBjb21wb25lbnRcbiAgICAgICFpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSAmJlxuICAgICAgT2JqZWN0LmtleXMobm9kZSkuZXZlcnkoaXNTdGF0aWNLZXkpXG4gICAgKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRGlyZWN0Q2hpbGRPZlRlbXBsYXRlRm9yIChub2RlKSB7XG4gICAgd2hpbGUgKG5vZGUucGFyZW50KSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG4gICAgICBpZiAobm9kZS50YWcgIT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAobm9kZS5mb3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgZm5FeHBSRSA9IC9eKFtcXHckX10rfFxcKFteKV0qP1xcKSlcXHMqPT58XmZ1bmN0aW9uKD86XFxzK1tcXHckXSspP1xccypcXCgvO1xuICB2YXIgZm5JbnZva2VSRSA9IC9cXChbXildKj9cXCk7KiQvO1xuICB2YXIgc2ltcGxlUGF0aFJFID0gL15bQS1aYS16XyRdW1xcdyRdKig/OlxcLltBLVphLXpfJF1bXFx3JF0qfFxcWydbXiddKj8nXXxcXFtcIlteXCJdKj9cIl18XFxbXFxkK118XFxbW0EtWmEtel8kXVtcXHckXSpdKSokLztcblxuICAvLyBLZXlib2FyZEV2ZW50LmtleUNvZGUgYWxpYXNlc1xuICB2YXIga2V5Q29kZXMgPSB7XG4gICAgZXNjOiAyNyxcbiAgICB0YWI6IDksXG4gICAgZW50ZXI6IDEzLFxuICAgIHNwYWNlOiAzMixcbiAgICB1cDogMzgsXG4gICAgbGVmdDogMzcsXG4gICAgcmlnaHQ6IDM5LFxuICAgIGRvd246IDQwLFxuICAgICdkZWxldGUnOiBbOCwgNDZdXG4gIH07XG5cbiAgLy8gS2V5Ym9hcmRFdmVudC5rZXkgYWxpYXNlc1xuICB2YXIga2V5TmFtZXMgPSB7XG4gICAgLy8gIzc4ODA6IElFMTEgYW5kIEVkZ2UgdXNlIGBFc2NgIGZvciBFc2NhcGUga2V5IG5hbWUuXG4gICAgZXNjOiBbJ0VzYycsICdFc2NhcGUnXSxcbiAgICB0YWI6ICdUYWInLFxuICAgIGVudGVyOiAnRW50ZXInLFxuICAgIC8vICM5MTEyOiBJRTExIHVzZXMgYFNwYWNlYmFyYCBmb3IgU3BhY2Uga2V5IG5hbWUuXG4gICAgc3BhY2U6IFsnICcsICdTcGFjZWJhciddLFxuICAgIC8vICM3ODA2OiBJRTExIHVzZXMga2V5IG5hbWVzIHdpdGhvdXQgYEFycm93YCBwcmVmaXggZm9yIGFycm93IGtleXMuXG4gICAgdXA6IFsnVXAnLCAnQXJyb3dVcCddLFxuICAgIGxlZnQ6IFsnTGVmdCcsICdBcnJvd0xlZnQnXSxcbiAgICByaWdodDogWydSaWdodCcsICdBcnJvd1JpZ2h0J10sXG4gICAgZG93bjogWydEb3duJywgJ0Fycm93RG93biddLFxuICAgIC8vICM5MTEyOiBJRTExIHVzZXMgYERlbGAgZm9yIERlbGV0ZSBrZXkgbmFtZS5cbiAgICAnZGVsZXRlJzogWydCYWNrc3BhY2UnLCAnRGVsZXRlJywgJ0RlbCddXG4gIH07XG5cbiAgLy8gIzQ4Njg6IG1vZGlmaWVycyB0aGF0IHByZXZlbnQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbGlzdGVuZXJcbiAgLy8gbmVlZCB0byBleHBsaWNpdGx5IHJldHVybiBudWxsIHNvIHRoYXQgd2UgY2FuIGRldGVybWluZSB3aGV0aGVyIHRvIHJlbW92ZVxuICAvLyB0aGUgbGlzdGVuZXIgZm9yIC5vbmNlXG4gIHZhciBnZW5HdWFyZCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHsgcmV0dXJuIChcImlmKFwiICsgY29uZGl0aW9uICsgXCIpcmV0dXJuIG51bGw7XCIpOyB9O1xuXG4gIHZhciBtb2RpZmllckNvZGUgPSB7XG4gICAgc3RvcDogJyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsnLFxuICAgIHByZXZlbnQ6ICckZXZlbnQucHJldmVudERlZmF1bHQoKTsnLFxuICAgIHNlbGY6IGdlbkd1YXJkKFwiJGV2ZW50LnRhcmdldCAhPT0gJGV2ZW50LmN1cnJlbnRUYXJnZXRcIiksXG4gICAgY3RybDogZ2VuR3VhcmQoXCIhJGV2ZW50LmN0cmxLZXlcIiksXG4gICAgc2hpZnQ6IGdlbkd1YXJkKFwiISRldmVudC5zaGlmdEtleVwiKSxcbiAgICBhbHQ6IGdlbkd1YXJkKFwiISRldmVudC5hbHRLZXlcIiksXG4gICAgbWV0YTogZ2VuR3VhcmQoXCIhJGV2ZW50Lm1ldGFLZXlcIiksXG4gICAgbGVmdDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxcbiAgICBtaWRkbGU6IGdlbkd1YXJkKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDFcIiksXG4gICAgcmlnaHQ6IGdlbkd1YXJkKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDJcIilcbiAgfTtcblxuICBmdW5jdGlvbiBnZW5IYW5kbGVycyAoXG4gICAgZXZlbnRzLFxuICAgIGlzTmF0aXZlXG4gICkge1xuICAgIHZhciBwcmVmaXggPSBpc05hdGl2ZSA/ICduYXRpdmVPbjonIDogJ29uOic7XG4gICAgdmFyIHN0YXRpY0hhbmRsZXJzID0gXCJcIjtcbiAgICB2YXIgZHluYW1pY0hhbmRsZXJzID0gXCJcIjtcbiAgICBmb3IgKHZhciBuYW1lIGluIGV2ZW50cykge1xuICAgICAgdmFyIGhhbmRsZXJDb2RlID0gZ2VuSGFuZGxlcihldmVudHNbbmFtZV0pO1xuICAgICAgaWYgKGV2ZW50c1tuYW1lXSAmJiBldmVudHNbbmFtZV0uZHluYW1pYykge1xuICAgICAgICBkeW5hbWljSGFuZGxlcnMgKz0gbmFtZSArIFwiLFwiICsgaGFuZGxlckNvZGUgKyBcIixcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRpY0hhbmRsZXJzICs9IFwiXFxcIlwiICsgbmFtZSArIFwiXFxcIjpcIiArIGhhbmRsZXJDb2RlICsgXCIsXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRpY0hhbmRsZXJzID0gXCJ7XCIgKyAoc3RhdGljSGFuZGxlcnMuc2xpY2UoMCwgLTEpKSArIFwifVwiO1xuICAgIGlmIChkeW5hbWljSGFuZGxlcnMpIHtcbiAgICAgIHJldHVybiBwcmVmaXggKyBcIl9kKFwiICsgc3RhdGljSGFuZGxlcnMgKyBcIixbXCIgKyAoZHluYW1pY0hhbmRsZXJzLnNsaWNlKDAsIC0xKSkgKyBcIl0pXCJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByZWZpeCArIHN0YXRpY0hhbmRsZXJzXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuSGFuZGxlciAoaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgcmV0dXJuICdmdW5jdGlvbigpe30nXG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgIHJldHVybiAoXCJbXCIgKyAoaGFuZGxlci5tYXAoZnVuY3Rpb24gKGhhbmRsZXIpIHsgcmV0dXJuIGdlbkhhbmRsZXIoaGFuZGxlcik7IH0pLmpvaW4oJywnKSkgKyBcIl1cIilcbiAgICB9XG5cbiAgICB2YXIgaXNNZXRob2RQYXRoID0gc2ltcGxlUGF0aFJFLnRlc3QoaGFuZGxlci52YWx1ZSk7XG4gICAgdmFyIGlzRnVuY3Rpb25FeHByZXNzaW9uID0gZm5FeHBSRS50ZXN0KGhhbmRsZXIudmFsdWUpO1xuICAgIHZhciBpc0Z1bmN0aW9uSW52b2NhdGlvbiA9IHNpbXBsZVBhdGhSRS50ZXN0KGhhbmRsZXIudmFsdWUucmVwbGFjZShmbkludm9rZVJFLCAnJykpO1xuXG4gICAgaWYgKCFoYW5kbGVyLm1vZGlmaWVycykge1xuICAgICAgaWYgKGlzTWV0aG9kUGF0aCB8fCBpc0Z1bmN0aW9uRXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gaGFuZGxlci52YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIChcImZ1bmN0aW9uKCRldmVudCl7XCIgKyAoaXNGdW5jdGlvbkludm9jYXRpb24gPyAoXCJyZXR1cm4gXCIgKyAoaGFuZGxlci52YWx1ZSkpIDogaGFuZGxlci52YWx1ZSkgKyBcIn1cIikgLy8gaW5saW5lIHN0YXRlbWVudFxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY29kZSA9ICcnO1xuICAgICAgdmFyIGdlbk1vZGlmaWVyQ29kZSA9ICcnO1xuICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBoYW5kbGVyLm1vZGlmaWVycykge1xuICAgICAgICBpZiAobW9kaWZpZXJDb2RlW2tleV0pIHtcbiAgICAgICAgICBnZW5Nb2RpZmllckNvZGUgKz0gbW9kaWZpZXJDb2RlW2tleV07XG4gICAgICAgICAgLy8gbGVmdC9yaWdodFxuICAgICAgICAgIGlmIChrZXlDb2Rlc1trZXldKSB7XG4gICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZXhhY3QnKSB7XG4gICAgICAgICAgdmFyIG1vZGlmaWVycyA9IChoYW5kbGVyLm1vZGlmaWVycyk7XG4gICAgICAgICAgZ2VuTW9kaWZpZXJDb2RlICs9IGdlbkd1YXJkKFxuICAgICAgICAgICAgWydjdHJsJywgJ3NoaWZ0JywgJ2FsdCcsICdtZXRhJ11cbiAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoa2V5TW9kaWZpZXIpIHsgcmV0dXJuICFtb2RpZmllcnNba2V5TW9kaWZpZXJdOyB9KVxuICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXlNb2RpZmllcikgeyByZXR1cm4gKFwiJGV2ZW50LlwiICsga2V5TW9kaWZpZXIgKyBcIktleVwiKTsgfSlcbiAgICAgICAgICAgICAgLmpvaW4oJ3x8JylcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgY29kZSArPSBnZW5LZXlGaWx0ZXIoa2V5cyk7XG4gICAgICB9XG4gICAgICAvLyBNYWtlIHN1cmUgbW9kaWZpZXJzIGxpa2UgcHJldmVudCBhbmQgc3RvcCBnZXQgZXhlY3V0ZWQgYWZ0ZXIga2V5IGZpbHRlcmluZ1xuICAgICAgaWYgKGdlbk1vZGlmaWVyQ29kZSkge1xuICAgICAgICBjb2RlICs9IGdlbk1vZGlmaWVyQ29kZTtcbiAgICAgIH1cbiAgICAgIHZhciBoYW5kbGVyQ29kZSA9IGlzTWV0aG9kUGF0aFxuICAgICAgICA/IChcInJldHVybiBcIiArIChoYW5kbGVyLnZhbHVlKSArIFwiKCRldmVudClcIilcbiAgICAgICAgOiBpc0Z1bmN0aW9uRXhwcmVzc2lvblxuICAgICAgICAgID8gKFwicmV0dXJuIChcIiArIChoYW5kbGVyLnZhbHVlKSArIFwiKSgkZXZlbnQpXCIpXG4gICAgICAgICAgOiBpc0Z1bmN0aW9uSW52b2NhdGlvblxuICAgICAgICAgICAgPyAoXCJyZXR1cm4gXCIgKyAoaGFuZGxlci52YWx1ZSkpXG4gICAgICAgICAgICA6IGhhbmRsZXIudmFsdWU7XG4gICAgICByZXR1cm4gKFwiZnVuY3Rpb24oJGV2ZW50KXtcIiArIGNvZGUgKyBoYW5kbGVyQ29kZSArIFwifVwiKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbktleUZpbHRlciAoa2V5cykge1xuICAgIHJldHVybiAoXG4gICAgICAvLyBtYWtlIHN1cmUgdGhlIGtleSBmaWx0ZXJzIG9ubHkgYXBwbHkgdG8gS2V5Ym9hcmRFdmVudHNcbiAgICAgIC8vICM5NDQxOiBjYW4ndCB1c2UgJ2tleUNvZGUnIGluICRldmVudCBiZWNhdXNlIENocm9tZSBhdXRvZmlsbCBmaXJlcyBmYWtlXG4gICAgICAvLyBrZXkgZXZlbnRzIHRoYXQgZG8gbm90IGhhdmUga2V5Q29kZSBwcm9wZXJ0eS4uLlxuICAgICAgXCJpZighJGV2ZW50LnR5cGUuaW5kZXhPZigna2V5JykmJlwiICtcbiAgICAgIChrZXlzLm1hcChnZW5GaWx0ZXJDb2RlKS5qb2luKCcmJicpKSArIFwiKXJldHVybiBudWxsO1wiXG4gICAgKVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuRmlsdGVyQ29kZSAoa2V5KSB7XG4gICAgdmFyIGtleVZhbCA9IHBhcnNlSW50KGtleSwgMTApO1xuICAgIGlmIChrZXlWYWwpIHtcbiAgICAgIHJldHVybiAoXCIkZXZlbnQua2V5Q29kZSE9PVwiICsga2V5VmFsKVxuICAgIH1cbiAgICB2YXIga2V5Q29kZSA9IGtleUNvZGVzW2tleV07XG4gICAgdmFyIGtleU5hbWUgPSBrZXlOYW1lc1trZXldO1xuICAgIHJldHVybiAoXG4gICAgICBcIl9rKCRldmVudC5rZXlDb2RlLFwiICtcbiAgICAgIChKU09OLnN0cmluZ2lmeShrZXkpKSArIFwiLFwiICtcbiAgICAgIChKU09OLnN0cmluZ2lmeShrZXlDb2RlKSkgKyBcIixcIiArXG4gICAgICBcIiRldmVudC5rZXksXCIgK1xuICAgICAgXCJcIiArIChKU09OLnN0cmluZ2lmeShrZXlOYW1lKSkgK1xuICAgICAgXCIpXCJcbiAgICApXG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBvbiAoZWwsIGRpcikge1xuICAgIGlmIChkaXIubW9kaWZpZXJzKSB7XG4gICAgICB3YXJuKFwidi1vbiB3aXRob3V0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgbW9kaWZpZXJzLlwiKTtcbiAgICB9XG4gICAgZWwud3JhcExpc3RlbmVycyA9IGZ1bmN0aW9uIChjb2RlKSB7IHJldHVybiAoXCJfZyhcIiArIGNvZGUgKyBcIixcIiArIChkaXIudmFsdWUpICsgXCIpXCIpOyB9O1xuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gYmluZCQxIChlbCwgZGlyKSB7XG4gICAgZWwud3JhcERhdGEgPSBmdW5jdGlvbiAoY29kZSkge1xuICAgICAgcmV0dXJuIChcIl9iKFwiICsgY29kZSArIFwiLCdcIiArIChlbC50YWcpICsgXCInLFwiICsgKGRpci52YWx1ZSkgKyBcIixcIiArIChkaXIubW9kaWZpZXJzICYmIGRpci5tb2RpZmllcnMucHJvcCA/ICd0cnVlJyA6ICdmYWxzZScpICsgKGRpci5tb2RpZmllcnMgJiYgZGlyLm1vZGlmaWVycy5zeW5jID8gJyx0cnVlJyA6ICcnKSArIFwiKVwiKVxuICAgIH07XG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgYmFzZURpcmVjdGl2ZXMgPSB7XG4gICAgb246IG9uLFxuICAgIGJpbmQ6IGJpbmQkMSxcbiAgICBjbG9hazogbm9vcFxuICB9O1xuXG4gIC8qICAqL1xuXG5cblxuXG5cbiAgdmFyIENvZGVnZW5TdGF0ZSA9IGZ1bmN0aW9uIENvZGVnZW5TdGF0ZSAob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy53YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICAgIHRoaXMudHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAndHJhbnNmb3JtQ29kZScpO1xuICAgIHRoaXMuZGF0YUdlbkZucyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAnZ2VuRGF0YScpO1xuICAgIHRoaXMuZGlyZWN0aXZlcyA9IGV4dGVuZChleHRlbmQoe30sIGJhc2VEaXJlY3RpdmVzKSwgb3B0aW9ucy5kaXJlY3RpdmVzKTtcbiAgICB2YXIgaXNSZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcbiAgICB0aGlzLm1heWJlQ29tcG9uZW50ID0gZnVuY3Rpb24gKGVsKSB7IHJldHVybiAhIWVsLmNvbXBvbmVudCB8fCAhaXNSZXNlcnZlZFRhZyhlbC50YWcpOyB9O1xuICAgIHRoaXMub25jZUlkID0gMDtcbiAgICB0aGlzLnN0YXRpY1JlbmRlckZucyA9IFtdO1xuICAgIHRoaXMucHJlID0gZmFsc2U7XG4gIH07XG5cblxuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlIChcbiAgICBhc3QsXG4gICAgb3B0aW9uc1xuICApIHtcbiAgICB2YXIgc3RhdGUgPSBuZXcgQ29kZWdlblN0YXRlKG9wdGlvbnMpO1xuICAgIHZhciBjb2RlID0gYXN0ID8gZ2VuRWxlbWVudChhc3QsIHN0YXRlKSA6ICdfYyhcImRpdlwiKSc7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbmRlcjogKFwid2l0aCh0aGlzKXtyZXR1cm4gXCIgKyBjb2RlICsgXCJ9XCIpLFxuICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0ZS5zdGF0aWNSZW5kZXJGbnNcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZW5FbGVtZW50IChlbCwgc3RhdGUpIHtcbiAgICBpZiAoZWwucGFyZW50KSB7XG4gICAgICBlbC5wcmUgPSBlbC5wcmUgfHwgZWwucGFyZW50LnByZTtcbiAgICB9XG5cbiAgICBpZiAoZWwuc3RhdGljUm9vdCAmJiAhZWwuc3RhdGljUHJvY2Vzc2VkKSB7XG4gICAgICByZXR1cm4gZ2VuU3RhdGljKGVsLCBzdGF0ZSlcbiAgICB9IGVsc2UgaWYgKGVsLm9uY2UgJiYgIWVsLm9uY2VQcm9jZXNzZWQpIHtcbiAgICAgIHJldHVybiBnZW5PbmNlKGVsLCBzdGF0ZSlcbiAgICB9IGVsc2UgaWYgKGVsLmZvciAmJiAhZWwuZm9yUHJvY2Vzc2VkKSB7XG4gICAgICByZXR1cm4gZ2VuRm9yKGVsLCBzdGF0ZSlcbiAgICB9IGVsc2UgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xuICAgICAgcmV0dXJuIGdlbklmKGVsLCBzdGF0ZSlcbiAgICB9IGVsc2UgaWYgKGVsLnRhZyA9PT0gJ3RlbXBsYXRlJyAmJiAhZWwuc2xvdFRhcmdldCAmJiAhc3RhdGUucHJlKSB7XG4gICAgICByZXR1cm4gZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndm9pZCAwJ1xuICAgIH0gZWxzZSBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICAgIHJldHVybiBnZW5TbG90KGVsLCBzdGF0ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29tcG9uZW50IG9yIGVsZW1lbnRcbiAgICAgIHZhciBjb2RlO1xuICAgICAgaWYgKGVsLmNvbXBvbmVudCkge1xuICAgICAgICBjb2RlID0gZ2VuQ29tcG9uZW50KGVsLmNvbXBvbmVudCwgZWwsIHN0YXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoIWVsLnBsYWluIHx8IChlbC5wcmUgJiYgc3RhdGUubWF5YmVDb21wb25lbnQoZWwpKSkge1xuICAgICAgICAgIGRhdGEgPSBnZW5EYXRhJDIoZWwsIHN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gICAgICAgIGNvZGUgPSBcIl9jKCdcIiArIChlbC50YWcpICsgXCInXCIgKyAoZGF0YSA/IChcIixcIiArIGRhdGEpIDogJycpICsgKGNoaWxkcmVuID8gKFwiLFwiICsgY2hpbGRyZW4pIDogJycpICsgXCIpXCI7XG4gICAgICB9XG4gICAgICAvLyBtb2R1bGUgdHJhbnNmb3Jtc1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS50cmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvZGUgPSBzdGF0ZS50cmFuc2Zvcm1zW2ldKGVsLCBjb2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2RlXG4gICAgfVxuICB9XG5cbiAgLy8gaG9pc3Qgc3RhdGljIHN1Yi10cmVlcyBvdXRcbiAgZnVuY3Rpb24gZ2VuU3RhdGljIChlbCwgc3RhdGUpIHtcbiAgICBlbC5zdGF0aWNQcm9jZXNzZWQgPSB0cnVlO1xuICAgIC8vIFNvbWUgZWxlbWVudHMgKHRlbXBsYXRlcykgbmVlZCB0byBiZWhhdmUgZGlmZmVyZW50bHkgaW5zaWRlIG9mIGEgdi1wcmVcbiAgICAvLyBub2RlLiAgQWxsIHByZSBub2RlcyBhcmUgc3RhdGljIHJvb3RzLCBzbyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBsb2NhdGlvbiB0b1xuICAgIC8vIHdyYXAgYSBzdGF0ZSBjaGFuZ2UgYW5kIHJlc2V0IGl0IHVwb24gZXhpdGluZyB0aGUgcHJlIG5vZGUuXG4gICAgdmFyIG9yaWdpbmFsUHJlU3RhdGUgPSBzdGF0ZS5wcmU7XG4gICAgaWYgKGVsLnByZSkge1xuICAgICAgc3RhdGUucHJlID0gZWwucHJlO1xuICAgIH1cbiAgICBzdGF0ZS5zdGF0aWNSZW5kZXJGbnMucHVzaCgoXCJ3aXRoKHRoaXMpe3JldHVybiBcIiArIChnZW5FbGVtZW50KGVsLCBzdGF0ZSkpICsgXCJ9XCIpKTtcbiAgICBzdGF0ZS5wcmUgPSBvcmlnaW5hbFByZVN0YXRlO1xuICAgIHJldHVybiAoXCJfbShcIiArIChzdGF0ZS5zdGF0aWNSZW5kZXJGbnMubGVuZ3RoIC0gMSkgKyAoZWwuc3RhdGljSW5Gb3IgPyAnLHRydWUnIDogJycpICsgXCIpXCIpXG4gIH1cblxuICAvLyB2LW9uY2VcbiAgZnVuY3Rpb24gZ2VuT25jZSAoZWwsIHN0YXRlKSB7XG4gICAgZWwub25jZVByb2Nlc3NlZCA9IHRydWU7XG4gICAgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xuICAgICAgcmV0dXJuIGdlbklmKGVsLCBzdGF0ZSlcbiAgICB9IGVsc2UgaWYgKGVsLnN0YXRpY0luRm9yKSB7XG4gICAgICB2YXIga2V5ID0gJyc7XG4gICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50O1xuICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAocGFyZW50LmZvcikge1xuICAgICAgICAgIGtleSA9IHBhcmVudC5rZXk7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgICAgfVxuICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgc3RhdGUud2FybihcbiAgICAgICAgICBcInYtb25jZSBjYW4gb25seSBiZSB1c2VkIGluc2lkZSB2LWZvciB0aGF0IGlzIGtleWVkLiBcIixcbiAgICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1vbmNlJ11cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGdlbkVsZW1lbnQoZWwsIHN0YXRlKVxuICAgICAgfVxuICAgICAgcmV0dXJuIChcIl9vKFwiICsgKGdlbkVsZW1lbnQoZWwsIHN0YXRlKSkgKyBcIixcIiArIChzdGF0ZS5vbmNlSWQrKykgKyBcIixcIiArIGtleSArIFwiKVwiKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2VuU3RhdGljKGVsLCBzdGF0ZSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZW5JZiAoXG4gICAgZWwsXG4gICAgc3RhdGUsXG4gICAgYWx0R2VuLFxuICAgIGFsdEVtcHR5XG4gICkge1xuICAgIGVsLmlmUHJvY2Vzc2VkID0gdHJ1ZTsgLy8gYXZvaWQgcmVjdXJzaW9uXG4gICAgcmV0dXJuIGdlbklmQ29uZGl0aW9ucyhlbC5pZkNvbmRpdGlvbnMuc2xpY2UoKSwgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpXG4gIH1cblxuICBmdW5jdGlvbiBnZW5JZkNvbmRpdGlvbnMgKFxuICAgIGNvbmRpdGlvbnMsXG4gICAgc3RhdGUsXG4gICAgYWx0R2VuLFxuICAgIGFsdEVtcHR5XG4gICkge1xuICAgIGlmICghY29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBhbHRFbXB0eSB8fCAnX2UoKSdcbiAgICB9XG5cbiAgICB2YXIgY29uZGl0aW9uID0gY29uZGl0aW9ucy5zaGlmdCgpO1xuICAgIGlmIChjb25kaXRpb24uZXhwKSB7XG4gICAgICByZXR1cm4gKFwiKFwiICsgKGNvbmRpdGlvbi5leHApICsgXCIpP1wiICsgKGdlblRlcm5hcnlFeHAoY29uZGl0aW9uLmJsb2NrKSkgKyBcIjpcIiArIChnZW5JZkNvbmRpdGlvbnMoY29uZGl0aW9ucywgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpKSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcIlwiICsgKGdlblRlcm5hcnlFeHAoY29uZGl0aW9uLmJsb2NrKSkpXG4gICAgfVxuXG4gICAgLy8gdi1pZiB3aXRoIHYtb25jZSBzaG91bGQgZ2VuZXJhdGUgY29kZSBsaWtlIChhKT9fbSgwKTpfbSgxKVxuICAgIGZ1bmN0aW9uIGdlblRlcm5hcnlFeHAgKGVsKSB7XG4gICAgICByZXR1cm4gYWx0R2VuXG4gICAgICAgID8gYWx0R2VuKGVsLCBzdGF0ZSlcbiAgICAgICAgOiBlbC5vbmNlXG4gICAgICAgICAgPyBnZW5PbmNlKGVsLCBzdGF0ZSlcbiAgICAgICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbkZvciAoXG4gICAgZWwsXG4gICAgc3RhdGUsXG4gICAgYWx0R2VuLFxuICAgIGFsdEhlbHBlclxuICApIHtcbiAgICB2YXIgZXhwID0gZWwuZm9yO1xuICAgIHZhciBhbGlhcyA9IGVsLmFsaWFzO1xuICAgIHZhciBpdGVyYXRvcjEgPSBlbC5pdGVyYXRvcjEgPyAoXCIsXCIgKyAoZWwuaXRlcmF0b3IxKSkgOiAnJztcbiAgICB2YXIgaXRlcmF0b3IyID0gZWwuaXRlcmF0b3IyID8gKFwiLFwiICsgKGVsLml0ZXJhdG9yMikpIDogJyc7XG5cbiAgICBpZiAoc3RhdGUubWF5YmVDb21wb25lbnQoZWwpICYmXG4gICAgICBlbC50YWcgIT09ICdzbG90JyAmJlxuICAgICAgZWwudGFnICE9PSAndGVtcGxhdGUnICYmXG4gICAgICAhZWwua2V5XG4gICAgKSB7XG4gICAgICBzdGF0ZS53YXJuKFxuICAgICAgICBcIjxcIiArIChlbC50YWcpICsgXCIgdi1mb3I9XFxcIlwiICsgYWxpYXMgKyBcIiBpbiBcIiArIGV4cCArIFwiXFxcIj46IGNvbXBvbmVudCBsaXN0cyByZW5kZXJlZCB3aXRoIFwiICtcbiAgICAgICAgXCJ2LWZvciBzaG91bGQgaGF2ZSBleHBsaWNpdCBrZXlzLiBcIiArXG4gICAgICAgIFwiU2VlIGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2xpc3QuaHRtbCNrZXkgZm9yIG1vcmUgaW5mby5cIixcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ10sXG4gICAgICAgIHRydWUgLyogdGlwICovXG4gICAgICApO1xuICAgIH1cblxuICAgIGVsLmZvclByb2Nlc3NlZCA9IHRydWU7IC8vIGF2b2lkIHJlY3Vyc2lvblxuICAgIHJldHVybiAoYWx0SGVscGVyIHx8ICdfbCcpICsgXCIoKFwiICsgZXhwICsgXCIpLFwiICtcbiAgICAgIFwiZnVuY3Rpb24oXCIgKyBhbGlhcyArIGl0ZXJhdG9yMSArIGl0ZXJhdG9yMiArIFwiKXtcIiArXG4gICAgICAgIFwicmV0dXJuIFwiICsgKChhbHRHZW4gfHwgZ2VuRWxlbWVudCkoZWwsIHN0YXRlKSkgK1xuICAgICAgJ30pJ1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuRGF0YSQyIChlbCwgc3RhdGUpIHtcbiAgICB2YXIgZGF0YSA9ICd7JztcblxuICAgIC8vIGRpcmVjdGl2ZXMgZmlyc3QuXG4gICAgLy8gZGlyZWN0aXZlcyBtYXkgbXV0YXRlIHRoZSBlbCdzIG90aGVyIHByb3BlcnRpZXMgYmVmb3JlIHRoZXkgYXJlIGdlbmVyYXRlZC5cbiAgICB2YXIgZGlycyA9IGdlbkRpcmVjdGl2ZXMoZWwsIHN0YXRlKTtcbiAgICBpZiAoZGlycykgeyBkYXRhICs9IGRpcnMgKyAnLCc7IH1cblxuICAgIC8vIGtleVxuICAgIGlmIChlbC5rZXkpIHtcbiAgICAgIGRhdGEgKz0gXCJrZXk6XCIgKyAoZWwua2V5KSArIFwiLFwiO1xuICAgIH1cbiAgICAvLyByZWZcbiAgICBpZiAoZWwucmVmKSB7XG4gICAgICBkYXRhICs9IFwicmVmOlwiICsgKGVsLnJlZikgKyBcIixcIjtcbiAgICB9XG4gICAgaWYgKGVsLnJlZkluRm9yKSB7XG4gICAgICBkYXRhICs9IFwicmVmSW5Gb3I6dHJ1ZSxcIjtcbiAgICB9XG4gICAgLy8gcHJlXG4gICAgaWYgKGVsLnByZSkge1xuICAgICAgZGF0YSArPSBcInByZTp0cnVlLFwiO1xuICAgIH1cbiAgICAvLyByZWNvcmQgb3JpZ2luYWwgdGFnIG5hbWUgZm9yIGNvbXBvbmVudHMgdXNpbmcgXCJpc1wiIGF0dHJpYnV0ZVxuICAgIGlmIChlbC5jb21wb25lbnQpIHtcbiAgICAgIGRhdGEgKz0gXCJ0YWc6XFxcIlwiICsgKGVsLnRhZykgKyBcIlxcXCIsXCI7XG4gICAgfVxuICAgIC8vIG1vZHVsZSBkYXRhIGdlbmVyYXRpb24gZnVuY3Rpb25zXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5kYXRhR2VuRm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkYXRhICs9IHN0YXRlLmRhdGFHZW5GbnNbaV0oZWwpO1xuICAgIH1cbiAgICAvLyBhdHRyaWJ1dGVzXG4gICAgaWYgKGVsLmF0dHJzKSB7XG4gICAgICBkYXRhICs9IFwiYXR0cnM6XCIgKyAoZ2VuUHJvcHMoZWwuYXR0cnMpKSArIFwiLFwiO1xuICAgIH1cbiAgICAvLyBET00gcHJvcHNcbiAgICBpZiAoZWwucHJvcHMpIHtcbiAgICAgIGRhdGEgKz0gXCJkb21Qcm9wczpcIiArIChnZW5Qcm9wcyhlbC5wcm9wcykpICsgXCIsXCI7XG4gICAgfVxuICAgIC8vIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKGVsLmV2ZW50cykge1xuICAgICAgZGF0YSArPSAoZ2VuSGFuZGxlcnMoZWwuZXZlbnRzLCBmYWxzZSkpICsgXCIsXCI7XG4gICAgfVxuICAgIGlmIChlbC5uYXRpdmVFdmVudHMpIHtcbiAgICAgIGRhdGEgKz0gKGdlbkhhbmRsZXJzKGVsLm5hdGl2ZUV2ZW50cywgdHJ1ZSkpICsgXCIsXCI7XG4gICAgfVxuICAgIC8vIHNsb3QgdGFyZ2V0XG4gICAgLy8gb25seSBmb3Igbm9uLXNjb3BlZCBzbG90c1xuICAgIGlmIChlbC5zbG90VGFyZ2V0ICYmICFlbC5zbG90U2NvcGUpIHtcbiAgICAgIGRhdGEgKz0gXCJzbG90OlwiICsgKGVsLnNsb3RUYXJnZXQpICsgXCIsXCI7XG4gICAgfVxuICAgIC8vIHNjb3BlZCBzbG90c1xuICAgIGlmIChlbC5zY29wZWRTbG90cykge1xuICAgICAgZGF0YSArPSAoZ2VuU2NvcGVkU2xvdHMoZWwsIGVsLnNjb3BlZFNsb3RzLCBzdGF0ZSkpICsgXCIsXCI7XG4gICAgfVxuICAgIC8vIGNvbXBvbmVudCB2LW1vZGVsXG4gICAgaWYgKGVsLm1vZGVsKSB7XG4gICAgICBkYXRhICs9IFwibW9kZWw6e3ZhbHVlOlwiICsgKGVsLm1vZGVsLnZhbHVlKSArIFwiLGNhbGxiYWNrOlwiICsgKGVsLm1vZGVsLmNhbGxiYWNrKSArIFwiLGV4cHJlc3Npb246XCIgKyAoZWwubW9kZWwuZXhwcmVzc2lvbikgKyBcIn0sXCI7XG4gICAgfVxuICAgIC8vIGlubGluZS10ZW1wbGF0ZVxuICAgIGlmIChlbC5pbmxpbmVUZW1wbGF0ZSkge1xuICAgICAgdmFyIGlubGluZVRlbXBsYXRlID0gZ2VuSW5saW5lVGVtcGxhdGUoZWwsIHN0YXRlKTtcbiAgICAgIGlmIChpbmxpbmVUZW1wbGF0ZSkge1xuICAgICAgICBkYXRhICs9IGlubGluZVRlbXBsYXRlICsgXCIsXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoLywkLywgJycpICsgJ30nO1xuICAgIC8vIHYtYmluZCBkeW5hbWljIGFyZ3VtZW50IHdyYXBcbiAgICAvLyB2LWJpbmQgd2l0aCBkeW5hbWljIGFyZ3VtZW50cyBtdXN0IGJlIGFwcGxpZWQgdXNpbmcgdGhlIHNhbWUgdi1iaW5kIG9iamVjdFxuICAgIC8vIG1lcmdlIGhlbHBlciBzbyB0aGF0IGNsYXNzL3N0eWxlL211c3RVc2VQcm9wIGF0dHJzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cbiAgICBpZiAoZWwuZHluYW1pY0F0dHJzKSB7XG4gICAgICBkYXRhID0gXCJfYihcIiArIGRhdGEgKyBcIixcXFwiXCIgKyAoZWwudGFnKSArIFwiXFxcIixcIiArIChnZW5Qcm9wcyhlbC5keW5hbWljQXR0cnMpKSArIFwiKVwiO1xuICAgIH1cbiAgICAvLyB2LWJpbmQgZGF0YSB3cmFwXG4gICAgaWYgKGVsLndyYXBEYXRhKSB7XG4gICAgICBkYXRhID0gZWwud3JhcERhdGEoZGF0YSk7XG4gICAgfVxuICAgIC8vIHYtb24gZGF0YSB3cmFwXG4gICAgaWYgKGVsLndyYXBMaXN0ZW5lcnMpIHtcbiAgICAgIGRhdGEgPSBlbC53cmFwTGlzdGVuZXJzKGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuRGlyZWN0aXZlcyAoZWwsIHN0YXRlKSB7XG4gICAgdmFyIGRpcnMgPSBlbC5kaXJlY3RpdmVzO1xuICAgIGlmICghZGlycykgeyByZXR1cm4gfVxuICAgIHZhciByZXMgPSAnZGlyZWN0aXZlczpbJztcbiAgICB2YXIgaGFzUnVudGltZSA9IGZhbHNlO1xuICAgIHZhciBpLCBsLCBkaXIsIG5lZWRSdW50aW1lO1xuICAgIGZvciAoaSA9IDAsIGwgPSBkaXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZGlyID0gZGlyc1tpXTtcbiAgICAgIG5lZWRSdW50aW1lID0gdHJ1ZTtcbiAgICAgIHZhciBnZW4gPSBzdGF0ZS5kaXJlY3RpdmVzW2Rpci5uYW1lXTtcbiAgICAgIGlmIChnZW4pIHtcbiAgICAgICAgLy8gY29tcGlsZS10aW1lIGRpcmVjdGl2ZSB0aGF0IG1hbmlwdWxhdGVzIEFTVC5cbiAgICAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGl0IGFsc28gbmVlZHMgYSBydW50aW1lIGNvdW50ZXJwYXJ0LlxuICAgICAgICBuZWVkUnVudGltZSA9ICEhZ2VuKGVsLCBkaXIsIHN0YXRlLndhcm4pO1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRSdW50aW1lKSB7XG4gICAgICAgIGhhc1J1bnRpbWUgPSB0cnVlO1xuICAgICAgICByZXMgKz0gXCJ7bmFtZTpcXFwiXCIgKyAoZGlyLm5hbWUpICsgXCJcXFwiLHJhd05hbWU6XFxcIlwiICsgKGRpci5yYXdOYW1lKSArIFwiXFxcIlwiICsgKGRpci52YWx1ZSA/IChcIix2YWx1ZTooXCIgKyAoZGlyLnZhbHVlKSArIFwiKSxleHByZXNzaW9uOlwiICsgKEpTT04uc3RyaW5naWZ5KGRpci52YWx1ZSkpKSA6ICcnKSArIChkaXIuYXJnID8gKFwiLGFyZzpcIiArIChkaXIuaXNEeW5hbWljQXJnID8gZGlyLmFyZyA6IChcIlxcXCJcIiArIChkaXIuYXJnKSArIFwiXFxcIlwiKSkpIDogJycpICsgKGRpci5tb2RpZmllcnMgPyAoXCIsbW9kaWZpZXJzOlwiICsgKEpTT04uc3RyaW5naWZ5KGRpci5tb2RpZmllcnMpKSkgOiAnJykgKyBcIn0sXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNSdW50aW1lKSB7XG4gICAgICByZXR1cm4gcmVzLnNsaWNlKDAsIC0xKSArICddJ1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbklubGluZVRlbXBsYXRlIChlbCwgc3RhdGUpIHtcbiAgICB2YXIgYXN0ID0gZWwuY2hpbGRyZW5bMF07XG4gICAgaWYgKGVsLmNoaWxkcmVuLmxlbmd0aCAhPT0gMSB8fCBhc3QudHlwZSAhPT0gMSkge1xuICAgICAgc3RhdGUud2FybihcbiAgICAgICAgJ0lubGluZS10ZW1wbGF0ZSBjb21wb25lbnRzIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBjaGlsZCBlbGVtZW50LicsXG4gICAgICAgIHsgc3RhcnQ6IGVsLnN0YXJ0IH1cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhc3QgJiYgYXN0LnR5cGUgPT09IDEpIHtcbiAgICAgIHZhciBpbmxpbmVSZW5kZXJGbnMgPSBnZW5lcmF0ZShhc3QsIHN0YXRlLm9wdGlvbnMpO1xuICAgICAgcmV0dXJuIChcImlubGluZVRlbXBsYXRlOntyZW5kZXI6ZnVuY3Rpb24oKXtcIiArIChpbmxpbmVSZW5kZXJGbnMucmVuZGVyKSArIFwifSxzdGF0aWNSZW5kZXJGbnM6W1wiICsgKGlubGluZVJlbmRlckZucy5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uIChjb2RlKSB7IHJldHVybiAoXCJmdW5jdGlvbigpe1wiICsgY29kZSArIFwifVwiKTsgfSkuam9pbignLCcpKSArIFwiXX1cIilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZW5TY29wZWRTbG90cyAoXG4gICAgZWwsXG4gICAgc2xvdHMsXG4gICAgc3RhdGVcbiAgKSB7XG4gICAgLy8gYnkgZGVmYXVsdCBzY29wZWQgc2xvdHMgYXJlIGNvbnNpZGVyZWQgXCJzdGFibGVcIiwgdGhpcyBhbGxvd3MgY2hpbGRcbiAgICAvLyBjb21wb25lbnRzIHdpdGggb25seSBzY29wZWQgc2xvdHMgdG8gc2tpcCBmb3JjZWQgdXBkYXRlcyBmcm9tIHBhcmVudC5cbiAgICAvLyBidXQgaW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGJhaWwtb3V0IG9mIHRoaXMgb3B0aW1pemF0aW9uXG4gICAgLy8gZm9yIGV4YW1wbGUgaWYgdGhlIHNsb3QgY29udGFpbnMgZHluYW1pYyBuYW1lcywgaGFzIHYtaWYgb3Igdi1mb3Igb24gdGhlbS4uLlxuICAgIHZhciBuZWVkc0ZvcmNlVXBkYXRlID0gZWwuZm9yIHx8IE9iamVjdC5rZXlzKHNsb3RzKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBzbG90ID0gc2xvdHNba2V5XTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNsb3Quc2xvdFRhcmdldER5bmFtaWMgfHxcbiAgICAgICAgc2xvdC5pZiB8fFxuICAgICAgICBzbG90LmZvciB8fFxuICAgICAgICBjb250YWluc1Nsb3RDaGlsZChzbG90KSAvLyBpcyBwYXNzaW5nIGRvd24gc2xvdCBmcm9tIHBhcmVudCB3aGljaCBtYXkgYmUgZHluYW1pY1xuICAgICAgKVxuICAgIH0pO1xuXG4gICAgLy8gIzk1MzQ6IGlmIGEgY29tcG9uZW50IHdpdGggc2NvcGVkIHNsb3RzIGlzIGluc2lkZSBhIGNvbmRpdGlvbmFsIGJyYW5jaCxcbiAgICAvLyBpdCdzIHBvc3NpYmxlIGZvciB0aGUgc2FtZSBjb21wb25lbnQgdG8gYmUgcmV1c2VkIGJ1dCB3aXRoIGRpZmZlcmVudFxuICAgIC8vIGNvbXBpbGVkIHNsb3QgY29udGVudC4gVG8gYXZvaWQgdGhhdCwgd2UgZ2VuZXJhdGUgYSB1bmlxdWUga2V5IGJhc2VkIG9uXG4gICAgLy8gdGhlIGdlbmVyYXRlZCBjb2RlIG9mIGFsbCB0aGUgc2xvdCBjb250ZW50cy5cbiAgICB2YXIgbmVlZHNLZXkgPSAhIWVsLmlmO1xuXG4gICAgLy8gT1Igd2hlbiBpdCBpcyBpbnNpZGUgYW5vdGhlciBzY29wZWQgc2xvdCBvciB2LWZvciAodGhlIHJlYWN0aXZpdHkgbWF5IGJlXG4gICAgLy8gZGlzY29ubmVjdGVkIGR1ZSB0byB0aGUgaW50ZXJtZWRpYXRlIHNjb3BlIHZhcmlhYmxlKVxuICAgIC8vICM5NDM4LCAjOTUwNlxuICAgIC8vIFRPRE86IHRoaXMgY2FuIGJlIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHByb3Blcmx5IGFuYWx5emluZyBpbi1zY29wZSBiaW5kaW5nc1xuICAgIC8vIGFuZCBza2lwIGZvcmNlIHVwZGF0aW5nIG9uZXMgdGhhdCBkbyBub3QgYWN0dWFsbHkgdXNlIHNjb3BlIHZhcmlhYmxlcy5cbiAgICBpZiAoIW5lZWRzRm9yY2VVcGRhdGUpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQ7XG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAocGFyZW50LnNsb3RTY29wZSAmJiBwYXJlbnQuc2xvdFNjb3BlICE9PSBlbXB0eVNsb3RTY29wZVRva2VuKSB8fFxuICAgICAgICAgIHBhcmVudC5mb3JcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmVlZHNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50LmlmKSB7XG4gICAgICAgICAgbmVlZHNLZXkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGdlbmVyYXRlZFNsb3RzID0gT2JqZWN0LmtleXMoc2xvdHMpXG4gICAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGdlblNjb3BlZFNsb3Qoc2xvdHNba2V5XSwgc3RhdGUpOyB9KVxuICAgICAgLmpvaW4oJywnKTtcblxuICAgIHJldHVybiAoXCJzY29wZWRTbG90czpfdShbXCIgKyBnZW5lcmF0ZWRTbG90cyArIFwiXVwiICsgKG5lZWRzRm9yY2VVcGRhdGUgPyBcIixudWxsLHRydWVcIiA6IFwiXCIpICsgKCFuZWVkc0ZvcmNlVXBkYXRlICYmIG5lZWRzS2V5ID8gKFwiLG51bGwsZmFsc2UsXCIgKyAoaGFzaChnZW5lcmF0ZWRTbG90cykpKSA6IFwiXCIpICsgXCIpXCIpXG4gIH1cblxuICBmdW5jdGlvbiBoYXNoKHN0cikge1xuICAgIHZhciBoYXNoID0gNTM4MTtcbiAgICB2YXIgaSA9IHN0ci5sZW5ndGg7XG4gICAgd2hpbGUoaSkge1xuICAgICAgaGFzaCA9IChoYXNoICogMzMpIF4gc3RyLmNoYXJDb2RlQXQoLS1pKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2ggPj4+IDBcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnRhaW5zU2xvdENoaWxkIChlbCkge1xuICAgIGlmIChlbC50eXBlID09PSAxKSB7XG4gICAgICBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbC5jaGlsZHJlbi5zb21lKGNvbnRhaW5zU2xvdENoaWxkKVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlblNjb3BlZFNsb3QgKFxuICAgIGVsLFxuICAgIHN0YXRlXG4gICkge1xuICAgIHZhciBpc0xlZ2FjeVN5bnRheCA9IGVsLmF0dHJzTWFwWydzbG90LXNjb3BlJ107XG4gICAgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCAmJiAhaXNMZWdhY3lTeW50YXgpIHtcbiAgICAgIHJldHVybiBnZW5JZihlbCwgc3RhdGUsIGdlblNjb3BlZFNsb3QsIFwibnVsbFwiKVxuICAgIH1cbiAgICBpZiAoZWwuZm9yICYmICFlbC5mb3JQcm9jZXNzZWQpIHtcbiAgICAgIHJldHVybiBnZW5Gb3IoZWwsIHN0YXRlLCBnZW5TY29wZWRTbG90KVxuICAgIH1cbiAgICB2YXIgc2xvdFNjb3BlID0gZWwuc2xvdFNjb3BlID09PSBlbXB0eVNsb3RTY29wZVRva2VuXG4gICAgICA/IFwiXCJcbiAgICAgIDogU3RyaW5nKGVsLnNsb3RTY29wZSk7XG4gICAgdmFyIGZuID0gXCJmdW5jdGlvbihcIiArIHNsb3RTY29wZSArIFwiKXtcIiArXG4gICAgICBcInJldHVybiBcIiArIChlbC50YWcgPT09ICd0ZW1wbGF0ZSdcbiAgICAgICAgPyBlbC5pZiAmJiBpc0xlZ2FjeVN5bnRheFxuICAgICAgICAgID8gKFwiKFwiICsgKGVsLmlmKSArIFwiKT9cIiArIChnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd1bmRlZmluZWQnKSArIFwiOnVuZGVmaW5lZFwiKVxuICAgICAgICAgIDogZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndW5kZWZpbmVkJ1xuICAgICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKSkgKyBcIn1cIjtcbiAgICAvLyByZXZlcnNlIHByb3h5IHYtc2xvdCB3aXRob3V0IHNjb3BlIG9uIHRoaXMuJHNsb3RzXG4gICAgdmFyIHJldmVyc2VQcm94eSA9IHNsb3RTY29wZSA/IFwiXCIgOiBcIixwcm94eTp0cnVlXCI7XG4gICAgcmV0dXJuIChcIntrZXk6XCIgKyAoZWwuc2xvdFRhcmdldCB8fCBcIlxcXCJkZWZhdWx0XFxcIlwiKSArIFwiLGZuOlwiICsgZm4gKyByZXZlcnNlUHJveHkgKyBcIn1cIilcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbkNoaWxkcmVuIChcbiAgICBlbCxcbiAgICBzdGF0ZSxcbiAgICBjaGVja1NraXAsXG4gICAgYWx0R2VuRWxlbWVudCxcbiAgICBhbHRHZW5Ob2RlXG4gICkge1xuICAgIHZhciBjaGlsZHJlbiA9IGVsLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHZhciBlbCQxID0gY2hpbGRyZW5bMF07XG4gICAgICAvLyBvcHRpbWl6ZSBzaW5nbGUgdi1mb3JcbiAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgZWwkMS5mb3IgJiZcbiAgICAgICAgZWwkMS50YWcgIT09ICd0ZW1wbGF0ZScgJiZcbiAgICAgICAgZWwkMS50YWcgIT09ICdzbG90J1xuICAgICAgKSB7XG4gICAgICAgIHZhciBub3JtYWxpemF0aW9uVHlwZSA9IGNoZWNrU2tpcFxuICAgICAgICAgID8gc3RhdGUubWF5YmVDb21wb25lbnQoZWwkMSkgPyBcIiwxXCIgOiBcIiwwXCJcbiAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIHJldHVybiAoXCJcIiArICgoYWx0R2VuRWxlbWVudCB8fCBnZW5FbGVtZW50KShlbCQxLCBzdGF0ZSkpICsgbm9ybWFsaXphdGlvblR5cGUpXG4gICAgICB9XG4gICAgICB2YXIgbm9ybWFsaXphdGlvblR5cGUkMSA9IGNoZWNrU2tpcFxuICAgICAgICA/IGdldE5vcm1hbGl6YXRpb25UeXBlKGNoaWxkcmVuLCBzdGF0ZS5tYXliZUNvbXBvbmVudClcbiAgICAgICAgOiAwO1xuICAgICAgdmFyIGdlbiA9IGFsdEdlbk5vZGUgfHwgZ2VuTm9kZTtcbiAgICAgIHJldHVybiAoXCJbXCIgKyAoY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBnZW4oYywgc3RhdGUpOyB9KS5qb2luKCcsJykpICsgXCJdXCIgKyAobm9ybWFsaXphdGlvblR5cGUkMSA/IChcIixcIiArIG5vcm1hbGl6YXRpb25UeXBlJDEpIDogJycpKVxuICAgIH1cbiAgfVxuXG4gIC8vIGRldGVybWluZSB0aGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgZm9yIHRoZSBjaGlsZHJlbiBhcnJheS5cbiAgLy8gMDogbm8gbm9ybWFsaXphdGlvbiBuZWVkZWRcbiAgLy8gMTogc2ltcGxlIG5vcm1hbGl6YXRpb24gbmVlZGVkIChwb3NzaWJsZSAxLWxldmVsIGRlZXAgbmVzdGVkIGFycmF5KVxuICAvLyAyOiBmdWxsIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gIGZ1bmN0aW9uIGdldE5vcm1hbGl6YXRpb25UeXBlIChcbiAgICBjaGlsZHJlbixcbiAgICBtYXliZUNvbXBvbmVudFxuICApIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmIChlbC50eXBlICE9PSAxKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAobmVlZHNOb3JtYWxpemF0aW9uKGVsKSB8fFxuICAgICAgICAgIChlbC5pZkNvbmRpdGlvbnMgJiYgZWwuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG5lZWRzTm9ybWFsaXphdGlvbihjLmJsb2NrKTsgfSkpKSB7XG4gICAgICAgIHJlcyA9IDI7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAobWF5YmVDb21wb25lbnQoZWwpIHx8XG4gICAgICAgICAgKGVsLmlmQ29uZGl0aW9ucyAmJiBlbC5pZkNvbmRpdGlvbnMuc29tZShmdW5jdGlvbiAoYykgeyByZXR1cm4gbWF5YmVDb21wb25lbnQoYy5ibG9jayk7IH0pKSkge1xuICAgICAgICByZXMgPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBmdW5jdGlvbiBuZWVkc05vcm1hbGl6YXRpb24gKGVsKSB7XG4gICAgcmV0dXJuIGVsLmZvciAhPT0gdW5kZWZpbmVkIHx8IGVsLnRhZyA9PT0gJ3RlbXBsYXRlJyB8fCBlbC50YWcgPT09ICdzbG90J1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuTm9kZSAobm9kZSwgc3RhdGUpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgICByZXR1cm4gZ2VuRWxlbWVudChub2RlLCBzdGF0ZSlcbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gMyAmJiBub2RlLmlzQ29tbWVudCkge1xuICAgICAgcmV0dXJuIGdlbkNvbW1lbnQobm9kZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdlblRleHQobm9kZSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZW5UZXh0ICh0ZXh0KSB7XG4gICAgcmV0dXJuIChcIl92KFwiICsgKHRleHQudHlwZSA9PT0gMlxuICAgICAgPyB0ZXh0LmV4cHJlc3Npb24gLy8gbm8gbmVlZCBmb3IgKCkgYmVjYXVzZSBhbHJlYWR5IHdyYXBwZWQgaW4gX3MoKVxuICAgICAgOiB0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMoSlNPTi5zdHJpbmdpZnkodGV4dC50ZXh0KSkpICsgXCIpXCIpXG4gIH1cblxuICBmdW5jdGlvbiBnZW5Db21tZW50IChjb21tZW50KSB7XG4gICAgcmV0dXJuIChcIl9lKFwiICsgKEpTT04uc3RyaW5naWZ5KGNvbW1lbnQudGV4dCkpICsgXCIpXCIpXG4gIH1cblxuICBmdW5jdGlvbiBnZW5TbG90IChlbCwgc3RhdGUpIHtcbiAgICB2YXIgc2xvdE5hbWUgPSBlbC5zbG90TmFtZSB8fCAnXCJkZWZhdWx0XCInO1xuICAgIHZhciBjaGlsZHJlbiA9IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSk7XG4gICAgdmFyIHJlcyA9IFwiX3QoXCIgKyBzbG90TmFtZSArIChjaGlsZHJlbiA/IChcIixcIiArIGNoaWxkcmVuKSA6ICcnKTtcbiAgICB2YXIgYXR0cnMgPSBlbC5hdHRycyB8fCBlbC5keW5hbWljQXR0cnNcbiAgICAgID8gZ2VuUHJvcHMoKGVsLmF0dHJzIHx8IFtdKS5jb25jYXQoZWwuZHluYW1pY0F0dHJzIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGF0dHIpIHsgcmV0dXJuICh7XG4gICAgICAgICAgLy8gc2xvdCBwcm9wcyBhcmUgY2FtZWxpemVkXG4gICAgICAgICAgbmFtZTogY2FtZWxpemUoYXR0ci5uYW1lKSxcbiAgICAgICAgICB2YWx1ZTogYXR0ci52YWx1ZSxcbiAgICAgICAgICBkeW5hbWljOiBhdHRyLmR5bmFtaWNcbiAgICAgICAgfSk7IH0pKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBiaW5kJCQxID0gZWwuYXR0cnNNYXBbJ3YtYmluZCddO1xuICAgIGlmICgoYXR0cnMgfHwgYmluZCQkMSkgJiYgIWNoaWxkcmVuKSB7XG4gICAgICByZXMgKz0gXCIsbnVsbFwiO1xuICAgIH1cbiAgICBpZiAoYXR0cnMpIHtcbiAgICAgIHJlcyArPSBcIixcIiArIGF0dHJzO1xuICAgIH1cbiAgICBpZiAoYmluZCQkMSkge1xuICAgICAgcmVzICs9IChhdHRycyA/ICcnIDogJyxudWxsJykgKyBcIixcIiArIGJpbmQkJDE7XG4gICAgfVxuICAgIHJldHVybiByZXMgKyAnKSdcbiAgfVxuXG4gIC8vIGNvbXBvbmVudE5hbWUgaXMgZWwuY29tcG9uZW50LCB0YWtlIGl0IGFzIGFyZ3VtZW50IHRvIHNodW4gZmxvdydzIHBlc3NpbWlzdGljIHJlZmluZW1lbnRcbiAgZnVuY3Rpb24gZ2VuQ29tcG9uZW50IChcbiAgICBjb21wb25lbnROYW1lLFxuICAgIGVsLFxuICAgIHN0YXRlXG4gICkge1xuICAgIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gICAgcmV0dXJuIChcIl9jKFwiICsgY29tcG9uZW50TmFtZSArIFwiLFwiICsgKGdlbkRhdGEkMihlbCwgc3RhdGUpKSArIChjaGlsZHJlbiA/IChcIixcIiArIGNoaWxkcmVuKSA6ICcnKSArIFwiKVwiKVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuUHJvcHMgKHByb3BzKSB7XG4gICAgdmFyIHN0YXRpY1Byb3BzID0gXCJcIjtcbiAgICB2YXIgZHluYW1pY1Byb3BzID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgdmFyIHZhbHVlID0gdHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzKHByb3AudmFsdWUpO1xuICAgICAgaWYgKHByb3AuZHluYW1pYykge1xuICAgICAgICBkeW5hbWljUHJvcHMgKz0gKHByb3AubmFtZSkgKyBcIixcIiArIHZhbHVlICsgXCIsXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0aWNQcm9wcyArPSBcIlxcXCJcIiArIChwcm9wLm5hbWUpICsgXCJcXFwiOlwiICsgdmFsdWUgKyBcIixcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljUHJvcHMgPSBcIntcIiArIChzdGF0aWNQcm9wcy5zbGljZSgwLCAtMSkpICsgXCJ9XCI7XG4gICAgaWYgKGR5bmFtaWNQcm9wcykge1xuICAgICAgcmV0dXJuIChcIl9kKFwiICsgc3RhdGljUHJvcHMgKyBcIixbXCIgKyAoZHluYW1pY1Byb3BzLnNsaWNlKDAsIC0xKSkgKyBcIl0pXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdGF0aWNQcm9wc1xuICAgIH1cbiAgfVxuXG4gIC8vICMzODk1LCAjNDI2OFxuICBmdW5jdGlvbiB0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMgKHRleHQpIHtcbiAgICByZXR1cm4gdGV4dFxuICAgICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgJ1xcXFx1MjAyOCcpXG4gICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCAnXFxcXHUyMDI5JylcbiAgfVxuXG4gIC8qICAqL1xuXG5cblxuICAvLyB0aGVzZSBrZXl3b3JkcyBzaG91bGQgbm90IGFwcGVhciBpbnNpZGUgZXhwcmVzc2lvbnMsIGJ1dCBvcGVyYXRvcnMgbGlrZVxuICAvLyB0eXBlb2YsIGluc3RhbmNlb2YgYW5kIGluIGFyZSBhbGxvd2VkXG4gIHZhciBwcm9oaWJpdGVkS2V5d29yZFJFID0gbmV3IFJlZ0V4cCgnXFxcXGInICsgKFxuICAgICdkbyxpZixmb3IsbGV0LG5ldyx0cnksdmFyLGNhc2UsZWxzZSx3aXRoLGF3YWl0LGJyZWFrLGNhdGNoLGNsYXNzLGNvbnN0LCcgK1xuICAgICdzdXBlcix0aHJvdyx3aGlsZSx5aWVsZCxkZWxldGUsZXhwb3J0LGltcG9ydCxyZXR1cm4sc3dpdGNoLGRlZmF1bHQsJyArXG4gICAgJ2V4dGVuZHMsZmluYWxseSxjb250aW51ZSxkZWJ1Z2dlcixmdW5jdGlvbixhcmd1bWVudHMnXG4gICkuc3BsaXQoJywnKS5qb2luKCdcXFxcYnxcXFxcYicpICsgJ1xcXFxiJyk7XG5cbiAgLy8gdGhlc2UgdW5hcnkgb3BlcmF0b3JzIHNob3VsZCBub3QgYmUgdXNlZCBhcyBwcm9wZXJ0eS9tZXRob2QgbmFtZXNcbiAgdmFyIHVuYXJ5T3BlcmF0b3JzUkUgPSBuZXcgUmVnRXhwKCdcXFxcYicgKyAoXG4gICAgJ2RlbGV0ZSx0eXBlb2Ysdm9pZCdcbiAgKS5zcGxpdCgnLCcpLmpvaW4oJ1xcXFxzKlxcXFwoW15cXFxcKV0qXFxcXCl8XFxcXGInKSArICdcXFxccypcXFxcKFteXFxcXCldKlxcXFwpJyk7XG5cbiAgLy8gc3RyaXAgc3RyaW5ncyBpbiBleHByZXNzaW9uc1xuICB2YXIgc3RyaXBTdHJpbmdSRSA9IC8nKD86W14nXFxcXF18XFxcXC4pKid8XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwifGAoPzpbXmBcXFxcXXxcXFxcLikqXFwkXFx7fFxcfSg/OlteYFxcXFxdfFxcXFwuKSpgfGAoPzpbXmBcXFxcXXxcXFxcLikqYC9nO1xuXG4gIC8vIGRldGVjdCBwcm9ibGVtYXRpYyBleHByZXNzaW9ucyBpbiBhIHRlbXBsYXRlXG4gIGZ1bmN0aW9uIGRldGVjdEVycm9ycyAoYXN0LCB3YXJuKSB7XG4gICAgaWYgKGFzdCkge1xuICAgICAgY2hlY2tOb2RlKGFzdCwgd2Fybik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tOb2RlIChub2RlLCB3YXJuKSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgZm9yICh2YXIgbmFtZSBpbiBub2RlLmF0dHJzTWFwKSB7XG4gICAgICAgIGlmIChkaXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gbm9kZS5hdHRyc01hcFtuYW1lXTtcbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IG5vZGUucmF3QXR0cnNNYXBbbmFtZV07XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3YtZm9yJykge1xuICAgICAgICAgICAgICBjaGVja0Zvcihub2RlLCAoXCJ2LWZvcj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAndi1zbG90JyB8fCBuYW1lWzBdID09PSAnIycpIHtcbiAgICAgICAgICAgICAgY2hlY2tGdW5jdGlvblBhcmFtZXRlckV4cHJlc3Npb24odmFsdWUsIChuYW1lICsgXCI9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIiksIHdhcm4sIHJhbmdlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob25SRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICAgIGNoZWNrRXZlbnQodmFsdWUsIChuYW1lICsgXCI9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIiksIHdhcm4sIHJhbmdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoZWNrRXhwcmVzc2lvbih2YWx1ZSwgKG5hbWUgKyBcIj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY2hlY2tOb2RlKG5vZGUuY2hpbGRyZW5baV0sIHdhcm4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IDIpIHtcbiAgICAgIGNoZWNrRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIG5vZGUudGV4dCwgd2Fybiwgbm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tFdmVudCAoZXhwLCB0ZXh0LCB3YXJuLCByYW5nZSkge1xuICAgIHZhciBzdHJpcHBlZCA9IGV4cC5yZXBsYWNlKHN0cmlwU3RyaW5nUkUsICcnKTtcbiAgICB2YXIga2V5d29yZE1hdGNoID0gc3RyaXBwZWQubWF0Y2godW5hcnlPcGVyYXRvcnNSRSk7XG4gICAgaWYgKGtleXdvcmRNYXRjaCAmJiBzdHJpcHBlZC5jaGFyQXQoa2V5d29yZE1hdGNoLmluZGV4IC0gMSkgIT09ICckJykge1xuICAgICAgd2FybihcbiAgICAgICAgXCJhdm9pZCB1c2luZyBKYXZhU2NyaXB0IHVuYXJ5IG9wZXJhdG9yIGFzIHByb3BlcnR5IG5hbWU6IFwiICtcbiAgICAgICAgXCJcXFwiXCIgKyAoa2V5d29yZE1hdGNoWzBdKSArIFwiXFxcIiBpbiBleHByZXNzaW9uIFwiICsgKHRleHQudHJpbSgpKSxcbiAgICAgICAgcmFuZ2VcbiAgICAgICk7XG4gICAgfVxuICAgIGNoZWNrRXhwcmVzc2lvbihleHAsIHRleHQsIHdhcm4sIHJhbmdlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRm9yIChub2RlLCB0ZXh0LCB3YXJuLCByYW5nZSkge1xuICAgIGNoZWNrRXhwcmVzc2lvbihub2RlLmZvciB8fCAnJywgdGV4dCwgd2FybiwgcmFuZ2UpO1xuICAgIGNoZWNrSWRlbnRpZmllcihub2RlLmFsaWFzLCAndi1mb3IgYWxpYXMnLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gICAgY2hlY2tJZGVudGlmaWVyKG5vZGUuaXRlcmF0b3IxLCAndi1mb3IgaXRlcmF0b3InLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gICAgY2hlY2tJZGVudGlmaWVyKG5vZGUuaXRlcmF0b3IyLCAndi1mb3IgaXRlcmF0b3InLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0lkZW50aWZpZXIgKFxuICAgIGlkZW50LFxuICAgIHR5cGUsXG4gICAgdGV4dCxcbiAgICB3YXJuLFxuICAgIHJhbmdlXG4gICkge1xuICAgIGlmICh0eXBlb2YgaWRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgRnVuY3Rpb24oKFwidmFyIFwiICsgaWRlbnQgKyBcIj1fXCIpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgd2FybigoXCJpbnZhbGlkIFwiICsgdHlwZSArIFwiIFxcXCJcIiArIGlkZW50ICsgXCJcXFwiIGluIGV4cHJlc3Npb246IFwiICsgKHRleHQudHJpbSgpKSksIHJhbmdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0V4cHJlc3Npb24gKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEZ1bmN0aW9uKChcInJldHVybiBcIiArIGV4cCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHZhciBrZXl3b3JkTWF0Y2ggPSBleHAucmVwbGFjZShzdHJpcFN0cmluZ1JFLCAnJykubWF0Y2gocHJvaGliaXRlZEtleXdvcmRSRSk7XG4gICAgICBpZiAoa2V5d29yZE1hdGNoKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJhdm9pZCB1c2luZyBKYXZhU2NyaXB0IGtleXdvcmQgYXMgcHJvcGVydHkgbmFtZTogXCIgK1xuICAgICAgICAgIFwiXFxcIlwiICsgKGtleXdvcmRNYXRjaFswXSkgKyBcIlxcXCJcXG4gIFJhdyBleHByZXNzaW9uOiBcIiArICh0ZXh0LnRyaW0oKSksXG4gICAgICAgICAgcmFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJpbnZhbGlkIGV4cHJlc3Npb246IFwiICsgKGUubWVzc2FnZSkgKyBcIiBpblxcblxcblwiICtcbiAgICAgICAgICBcIiAgICBcIiArIGV4cCArIFwiXFxuXFxuXCIgK1xuICAgICAgICAgIFwiICBSYXcgZXhwcmVzc2lvbjogXCIgKyAodGV4dC50cmltKCkpICsgXCJcXG5cIixcbiAgICAgICAgICByYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJFeHByZXNzaW9uIChleHAsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBGdW5jdGlvbihleHAsICcnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcImludmFsaWQgZnVuY3Rpb24gcGFyYW1ldGVyIGV4cHJlc3Npb246IFwiICsgKGUubWVzc2FnZSkgKyBcIiBpblxcblxcblwiICtcbiAgICAgICAgXCIgICAgXCIgKyBleHAgKyBcIlxcblxcblwiICtcbiAgICAgICAgXCIgIFJhdyBleHByZXNzaW9uOiBcIiArICh0ZXh0LnRyaW0oKSkgKyBcIlxcblwiLFxuICAgICAgICByYW5nZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgcmFuZ2UgPSAyO1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlQ29kZUZyYW1lIChcbiAgICBzb3VyY2UsXG4gICAgc3RhcnQsXG4gICAgZW5kXG4gICkge1xuICAgIGlmICggc3RhcnQgPT09IHZvaWQgMCApIHN0YXJ0ID0gMDtcbiAgICBpZiAoIGVuZCA9PT0gdm9pZCAwICkgZW5kID0gc291cmNlLmxlbmd0aDtcblxuICAgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyP1xcbi8pO1xuICAgIHZhciBjb3VudCA9IDA7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvdW50ICs9IGxpbmVzW2ldLmxlbmd0aCArIDE7XG4gICAgICBpZiAoY291bnQgPj0gc3RhcnQpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IGkgLSByYW5nZTsgaiA8PSBpICsgcmFuZ2UgfHwgZW5kID4gY291bnQ7IGorKykge1xuICAgICAgICAgIGlmIChqIDwgMCB8fCBqID49IGxpbmVzLmxlbmd0aCkgeyBjb250aW51ZSB9XG4gICAgICAgICAgcmVzLnB1c2goKFwiXCIgKyAoaiArIDEpICsgKHJlcGVhdCQxKFwiIFwiLCAzIC0gU3RyaW5nKGogKyAxKS5sZW5ndGgpKSArIFwifCAgXCIgKyAobGluZXNbal0pKSk7XG4gICAgICAgICAgdmFyIGxpbmVMZW5ndGggPSBsaW5lc1tqXS5sZW5ndGg7XG4gICAgICAgICAgaWYgKGogPT09IGkpIHtcbiAgICAgICAgICAgIC8vIHB1c2ggdW5kZXJsaW5lXG4gICAgICAgICAgICB2YXIgcGFkID0gc3RhcnQgLSAoY291bnQgLSBsaW5lTGVuZ3RoKSArIDE7XG4gICAgICAgICAgICB2YXIgbGVuZ3RoID0gZW5kID4gY291bnQgPyBsaW5lTGVuZ3RoIC0gcGFkIDogZW5kIC0gc3RhcnQ7XG4gICAgICAgICAgICByZXMucHVzaChcIiAgIHwgIFwiICsgcmVwZWF0JDEoXCIgXCIsIHBhZCkgKyByZXBlYXQkMShcIl5cIiwgbGVuZ3RoKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChqID4gaSkge1xuICAgICAgICAgICAgaWYgKGVuZCA+IGNvdW50KSB7XG4gICAgICAgICAgICAgIHZhciBsZW5ndGgkMSA9IE1hdGgubWluKGVuZCAtIGNvdW50LCBsaW5lTGVuZ3RoKTtcbiAgICAgICAgICAgICAgcmVzLnB1c2goXCIgICB8ICBcIiArIHJlcGVhdCQxKFwiXlwiLCBsZW5ndGgkMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY291bnQgKz0gbGluZUxlbmd0aCArIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXMuam9pbignXFxuJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGVhdCQxIChzdHIsIG4pIHtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgaWYgKG4gPiAwKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgIGlmIChuICYgMSkgeyByZXN1bHQgKz0gc3RyOyB9XG4gICAgICAgIG4gPj4+PSAxO1xuICAgICAgICBpZiAobiA8PSAwKSB7IGJyZWFrIH1cbiAgICAgICAgc3RyICs9IHN0cjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyogICovXG5cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uIChjb2RlLCBlcnJvcnMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihjb2RlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyb3JzLnB1c2goeyBlcnI6IGVyciwgY29kZTogY29kZSB9KTtcbiAgICAgIHJldHVybiBub29wXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29tcGlsZVRvRnVuY3Rpb25GbiAoY29tcGlsZSkge1xuICAgIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gY29tcGlsZVRvRnVuY3Rpb25zIChcbiAgICAgIHRlbXBsYXRlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHZtXG4gICAgKSB7XG4gICAgICBvcHRpb25zID0gZXh0ZW5kKHt9LCBvcHRpb25zKTtcbiAgICAgIHZhciB3YXJuJCQxID0gb3B0aW9ucy53YXJuIHx8IHdhcm47XG4gICAgICBkZWxldGUgb3B0aW9ucy53YXJuO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIHtcbiAgICAgICAgLy8gZGV0ZWN0IHBvc3NpYmxlIENTUCByZXN0cmljdGlvblxuICAgICAgICB0cnkge1xuICAgICAgICAgIG5ldyBGdW5jdGlvbigncmV0dXJuIDEnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlLnRvU3RyaW5nKCkubWF0Y2goL3Vuc2FmZS1ldmFsfENTUC8pKSB7XG4gICAgICAgICAgICB3YXJuJCQxKFxuICAgICAgICAgICAgICAnSXQgc2VlbXMgeW91IGFyZSB1c2luZyB0aGUgc3RhbmRhbG9uZSBidWlsZCBvZiBWdWUuanMgaW4gYW4gJyArXG4gICAgICAgICAgICAgICdlbnZpcm9ubWVudCB3aXRoIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHRoYXQgcHJvaGliaXRzIHVuc2FmZS1ldmFsLiAnICtcbiAgICAgICAgICAgICAgJ1RoZSB0ZW1wbGF0ZSBjb21waWxlciBjYW5ub3Qgd29yayBpbiB0aGlzIGVudmlyb25tZW50LiBDb25zaWRlciAnICtcbiAgICAgICAgICAgICAgJ3JlbGF4aW5nIHRoZSBwb2xpY3kgdG8gYWxsb3cgdW5zYWZlLWV2YWwgb3IgcHJlLWNvbXBpbGluZyB5b3VyICcgK1xuICAgICAgICAgICAgICAndGVtcGxhdGVzIGludG8gcmVuZGVyIGZ1bmN0aW9ucy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBjYWNoZVxuICAgICAgdmFyIGtleSA9IG9wdGlvbnMuZGVsaW1pdGVyc1xuICAgICAgICA/IFN0cmluZyhvcHRpb25zLmRlbGltaXRlcnMpICsgdGVtcGxhdGVcbiAgICAgICAgOiB0ZW1wbGF0ZTtcbiAgICAgIGlmIChjYWNoZVtrZXldKSB7XG4gICAgICAgIHJldHVybiBjYWNoZVtrZXldXG4gICAgICB9XG5cbiAgICAgIC8vIGNvbXBpbGVcbiAgICAgIHZhciBjb21waWxlZCA9IGNvbXBpbGUodGVtcGxhdGUsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBjaGVjayBjb21waWxhdGlvbiBlcnJvcnMvdGlwc1xuICAgICAge1xuICAgICAgICBpZiAoY29tcGlsZWQuZXJyb3JzICYmIGNvbXBpbGVkLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgY29tcGlsZWQuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgd2FybiQkMShcbiAgICAgICAgICAgICAgICBcIkVycm9yIGNvbXBpbGluZyB0ZW1wbGF0ZTpcXG5cXG5cIiArIChlLm1zZykgKyBcIlxcblxcblwiICtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvZGVGcmFtZSh0ZW1wbGF0ZSwgZS5zdGFydCwgZS5lbmQpLFxuICAgICAgICAgICAgICAgIHZtXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2FybiQkMShcbiAgICAgICAgICAgICAgXCJFcnJvciBjb21waWxpbmcgdGVtcGxhdGU6XFxuXFxuXCIgKyB0ZW1wbGF0ZSArIFwiXFxuXFxuXCIgK1xuICAgICAgICAgICAgICBjb21waWxlZC5lcnJvcnMubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiAoXCItIFwiICsgZSk7IH0pLmpvaW4oJ1xcbicpICsgJ1xcbicsXG4gICAgICAgICAgICAgIHZtXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGlsZWQudGlwcyAmJiBjb21waWxlZC50aXBzLmxlbmd0aCkge1xuICAgICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgICBjb21waWxlZC50aXBzLmZvckVhY2goZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRpcChlLm1zZywgdm0pOyB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcGlsZWQudGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChtc2cpIHsgcmV0dXJuIHRpcChtc2csIHZtKTsgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHR1cm4gY29kZSBpbnRvIGZ1bmN0aW9uc1xuICAgICAgdmFyIHJlcyA9IHt9O1xuICAgICAgdmFyIGZuR2VuRXJyb3JzID0gW107XG4gICAgICByZXMucmVuZGVyID0gY3JlYXRlRnVuY3Rpb24oY29tcGlsZWQucmVuZGVyLCBmbkdlbkVycm9ycyk7XG4gICAgICByZXMuc3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWQuc3RhdGljUmVuZGVyRm5zLm1hcChmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb24oY29kZSwgZm5HZW5FcnJvcnMpXG4gICAgICB9KTtcblxuICAgICAgLy8gY2hlY2sgZnVuY3Rpb24gZ2VuZXJhdGlvbiBlcnJvcnMuXG4gICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgY29tcGlsZXIgaXRzZWxmLlxuICAgICAgLy8gbW9zdGx5IGZvciBjb2RlZ2VuIGRldmVsb3BtZW50IHVzZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICB7XG4gICAgICAgIGlmICgoIWNvbXBpbGVkLmVycm9ycyB8fCAhY29tcGlsZWQuZXJyb3JzLmxlbmd0aCkgJiYgZm5HZW5FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgd2FybiQkMShcbiAgICAgICAgICAgIFwiRmFpbGVkIHRvIGdlbmVyYXRlIHJlbmRlciBmdW5jdGlvbjpcXG5cXG5cIiArXG4gICAgICAgICAgICBmbkdlbkVycm9ycy5tYXAoZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICB2YXIgZXJyID0gcmVmLmVycjtcbiAgICAgICAgICAgICAgdmFyIGNvZGUgPSByZWYuY29kZTtcblxuICAgICAgICAgICAgICByZXR1cm4gKChlcnIudG9TdHJpbmcoKSkgKyBcIiBpblxcblxcblwiICsgY29kZSArIFwiXFxuXCIpO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoY2FjaGVba2V5XSA9IHJlcylcbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBjcmVhdGVDb21waWxlckNyZWF0b3IgKGJhc2VDb21waWxlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVyIChiYXNlT3B0aW9ucykge1xuICAgICAgZnVuY3Rpb24gY29tcGlsZSAoXG4gICAgICAgIHRlbXBsYXRlLFxuICAgICAgICBvcHRpb25zXG4gICAgICApIHtcbiAgICAgICAgdmFyIGZpbmFsT3B0aW9ucyA9IE9iamVjdC5jcmVhdGUoYmFzZU9wdGlvbnMpO1xuICAgICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICAgIHZhciB0aXBzID0gW107XG5cbiAgICAgICAgdmFyIHdhcm4gPSBmdW5jdGlvbiAobXNnLCByYW5nZSwgdGlwKSB7XG4gICAgICAgICAgKHRpcCA/IHRpcHMgOiBlcnJvcnMpLnB1c2gobXNnKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIHZhciBsZWFkaW5nU3BhY2VMZW5ndGggPSB0ZW1wbGF0ZS5tYXRjaCgvXlxccyovKVswXS5sZW5ndGg7XG5cbiAgICAgICAgICAgIHdhcm4gPSBmdW5jdGlvbiAobXNnLCByYW5nZSwgdGlwKSB7XG4gICAgICAgICAgICAgIHZhciBkYXRhID0geyBtc2c6IG1zZyB9O1xuICAgICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgZGF0YS5zdGFydCA9IHJhbmdlLnN0YXJ0ICsgbGVhZGluZ1NwYWNlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGRhdGEuZW5kID0gcmFuZ2UuZW5kICsgbGVhZGluZ1NwYWNlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAodGlwID8gdGlwcyA6IGVycm9ycykucHVzaChkYXRhKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG1lcmdlIGN1c3RvbSBtb2R1bGVzXG4gICAgICAgICAgaWYgKG9wdGlvbnMubW9kdWxlcykge1xuICAgICAgICAgICAgZmluYWxPcHRpb25zLm1vZHVsZXMgPVxuICAgICAgICAgICAgICAoYmFzZU9wdGlvbnMubW9kdWxlcyB8fCBbXSkuY29uY2F0KG9wdGlvbnMubW9kdWxlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG1lcmdlIGN1c3RvbSBkaXJlY3RpdmVzXG4gICAgICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aXZlcykge1xuICAgICAgICAgICAgZmluYWxPcHRpb25zLmRpcmVjdGl2ZXMgPSBleHRlbmQoXG4gICAgICAgICAgICAgIE9iamVjdC5jcmVhdGUoYmFzZU9wdGlvbnMuZGlyZWN0aXZlcyB8fCBudWxsKSxcbiAgICAgICAgICAgICAgb3B0aW9ucy5kaXJlY3RpdmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjb3B5IG90aGVyIG9wdGlvbnNcbiAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ21vZHVsZXMnICYmIGtleSAhPT0gJ2RpcmVjdGl2ZXMnKSB7XG4gICAgICAgICAgICAgIGZpbmFsT3B0aW9uc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZpbmFsT3B0aW9ucy53YXJuID0gd2FybjtcblxuICAgICAgICB2YXIgY29tcGlsZWQgPSBiYXNlQ29tcGlsZSh0ZW1wbGF0ZS50cmltKCksIGZpbmFsT3B0aW9ucyk7XG4gICAgICAgIHtcbiAgICAgICAgICBkZXRlY3RFcnJvcnMoY29tcGlsZWQuYXN0LCB3YXJuKTtcbiAgICAgICAgfVxuICAgICAgICBjb21waWxlZC5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICAgIGNvbXBpbGVkLnRpcHMgPSB0aXBzO1xuICAgICAgICByZXR1cm4gY29tcGlsZWRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcGlsZTogY29tcGlsZSxcbiAgICAgICAgY29tcGlsZVRvRnVuY3Rpb25zOiBjcmVhdGVDb21waWxlVG9GdW5jdGlvbkZuKGNvbXBpbGUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgLy8gYGNyZWF0ZUNvbXBpbGVyQ3JlYXRvcmAgYWxsb3dzIGNyZWF0aW5nIGNvbXBpbGVycyB0aGF0IHVzZSBhbHRlcm5hdGl2ZVxuICAvLyBwYXJzZXIvb3B0aW1pemVyL2NvZGVnZW4sIGUuZyB0aGUgU1NSIG9wdGltaXppbmcgY29tcGlsZXIuXG4gIC8vIEhlcmUgd2UganVzdCBleHBvcnQgYSBkZWZhdWx0IGNvbXBpbGVyIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRzLlxuICB2YXIgY3JlYXRlQ29tcGlsZXIgPSBjcmVhdGVDb21waWxlckNyZWF0b3IoZnVuY3Rpb24gYmFzZUNvbXBpbGUgKFxuICAgIHRlbXBsYXRlLFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgdmFyIGFzdCA9IHBhcnNlKHRlbXBsYXRlLnRyaW0oKSwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMub3B0aW1pemUgIT09IGZhbHNlKSB7XG4gICAgICBvcHRpbWl6ZShhc3QsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB2YXIgY29kZSA9IGdlbmVyYXRlKGFzdCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFzdDogYXN0LFxuICAgICAgcmVuZGVyOiBjb2RlLnJlbmRlcixcbiAgICAgIHN0YXRpY1JlbmRlckZuczogY29kZS5zdGF0aWNSZW5kZXJGbnNcbiAgICB9XG4gIH0pO1xuXG4gIC8qICAqL1xuXG4gIHZhciByZWYkMSA9IGNyZWF0ZUNvbXBpbGVyKGJhc2VPcHRpb25zKTtcbiAgdmFyIGNvbXBpbGUgPSByZWYkMS5jb21waWxlO1xuICB2YXIgY29tcGlsZVRvRnVuY3Rpb25zID0gcmVmJDEuY29tcGlsZVRvRnVuY3Rpb25zO1xuXG4gIC8qICAqL1xuXG4gIC8vIGNoZWNrIHdoZXRoZXIgY3VycmVudCBicm93c2VyIGVuY29kZXMgYSBjaGFyIGluc2lkZSBhdHRyaWJ1dGUgdmFsdWVzXG4gIHZhciBkaXY7XG4gIGZ1bmN0aW9uIGdldFNob3VsZERlY29kZSAoaHJlZikge1xuICAgIGRpdiA9IGRpdiB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gaHJlZiA/IFwiPGEgaHJlZj1cXFwiXFxuXFxcIi8+XCIgOiBcIjxkaXYgYT1cXFwiXFxuXFxcIi8+XCI7XG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUwuaW5kZXhPZignJiMxMDsnKSA+IDBcbiAgfVxuXG4gIC8vICMzNjYzOiBJRSBlbmNvZGVzIG5ld2xpbmVzIGluc2lkZSBhdHRyaWJ1dGUgdmFsdWVzIHdoaWxlIG90aGVyIGJyb3dzZXJzIGRvbid0XG4gIHZhciBzaG91bGREZWNvZGVOZXdsaW5lcyA9IGluQnJvd3NlciA/IGdldFNob3VsZERlY29kZShmYWxzZSkgOiBmYWxzZTtcbiAgLy8gIzY4Mjg6IGNocm9tZSBlbmNvZGVzIGNvbnRlbnQgaW4gYVtocmVmXVxuICB2YXIgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmID0gaW5Ccm93c2VyID8gZ2V0U2hvdWxkRGVjb2RlKHRydWUpIDogZmFsc2U7XG5cbiAgLyogICovXG5cbiAgdmFyIGlkVG9UZW1wbGF0ZSA9IGNhY2hlZChmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgZWwgPSBxdWVyeShpZCk7XG4gICAgcmV0dXJuIGVsICYmIGVsLmlubmVySFRNTFxuICB9KTtcblxuICB2YXIgbW91bnQgPSBWdWUucHJvdG90eXBlLiRtb3VudDtcbiAgVnVlLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoXG4gICAgZWwsXG4gICAgaHlkcmF0aW5nXG4gICkge1xuICAgIGVsID0gZWwgJiYgcXVlcnkoZWwpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVsID09PSBkb2N1bWVudC5ib2R5IHx8IGVsID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiRG8gbm90IG1vdW50IFZ1ZSB0byA8aHRtbD4gb3IgPGJvZHk+IC0gbW91bnQgdG8gbm9ybWFsIGVsZW1lbnRzIGluc3RlYWQuXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcbiAgICAvLyByZXNvbHZlIHRlbXBsYXRlL2VsIGFuZCBjb252ZXJ0IHRvIHJlbmRlciBmdW5jdGlvblxuICAgIGlmICghb3B0aW9ucy5yZW5kZXIpIHtcbiAgICAgIHZhciB0ZW1wbGF0ZSA9IG9wdGlvbnMudGVtcGxhdGU7XG4gICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodGVtcGxhdGUuY2hhckF0KDApID09PSAnIycpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlID0gaWRUb1RlbXBsYXRlKHRlbXBsYXRlKTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgIChcIlRlbXBsYXRlIGVsZW1lbnQgbm90IGZvdW5kIG9yIGlzIGVtcHR5OiBcIiArIChvcHRpb25zLnRlbXBsYXRlKSksXG4gICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0ZW1wbGF0ZS5ub2RlVHlwZSkge1xuICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuaW5uZXJIVE1MO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdhcm4oJ2ludmFsaWQgdGVtcGxhdGUgb3B0aW9uOicgKyB0ZW1wbGF0ZSwgdGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZWwpIHtcbiAgICAgICAgdGVtcGxhdGUgPSBnZXRPdXRlckhUTUwoZWwpO1xuICAgICAgfVxuICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgICBtYXJrKCdjb21waWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVmID0gY29tcGlsZVRvRnVuY3Rpb25zKHRlbXBsYXRlLCB7XG4gICAgICAgICAgb3V0cHV0U291cmNlUmFuZ2U6IFwiZGV2ZWxvcG1lbnRcIiAhPT0gJ3Byb2R1Y3Rpb24nLFxuICAgICAgICAgIHNob3VsZERlY29kZU5ld2xpbmVzOiBzaG91bGREZWNvZGVOZXdsaW5lcyxcbiAgICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6IHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixcbiAgICAgICAgICBkZWxpbWl0ZXJzOiBvcHRpb25zLmRlbGltaXRlcnMsXG4gICAgICAgICAgY29tbWVudHM6IG9wdGlvbnMuY29tbWVudHNcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIHZhciByZW5kZXIgPSByZWYucmVuZGVyO1xuICAgICAgICB2YXIgc3RhdGljUmVuZGVyRm5zID0gcmVmLnN0YXRpY1JlbmRlckZucztcbiAgICAgICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXI7XG4gICAgICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgICBtYXJrKCdjb21waWxlIGVuZCcpO1xuICAgICAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgKHRoaXMuX25hbWUpICsgXCIgY29tcGlsZVwiKSwgJ2NvbXBpbGUnLCAnY29tcGlsZSBlbmQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW91bnQuY2FsbCh0aGlzLCBlbCwgaHlkcmF0aW5nKVxuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgb3V0ZXJIVE1MIG9mIGVsZW1lbnRzLCB0YWtpbmcgY2FyZVxuICAgKiBvZiBTVkcgZWxlbWVudHMgaW4gSUUgYXMgd2VsbC5cbiAgICovXG4gIGZ1bmN0aW9uIGdldE91dGVySFRNTCAoZWwpIHtcbiAgICBpZiAoZWwub3V0ZXJIVE1MKSB7XG4gICAgICByZXR1cm4gZWwub3V0ZXJIVE1MXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgcmV0dXJuIGNvbnRhaW5lci5pbm5lckhUTUxcbiAgICB9XG4gIH1cblxuICBWdWUuY29tcGlsZSA9IGNvbXBpbGVUb0Z1bmN0aW9ucztcblxuICByZXR1cm4gVnVlO1xuXG59KSk7XG4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMTA2NTc0LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAxMDY1NzR9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiA0MzIuMTI0LCAicmVjZWl2ZSI6IDE0OS43NDF9LCAicGFnZXJlZiI6ICJwYWdlQGZiOWIyNjQ3ODU1NDIwNmJlMDIwZWQ1YmRkMmIzYzE1IiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cud2VpbG9naW4uY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTU3LCAidmFsaWRUbyI6IDE2OTI2NjkxNTZ9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNToxMTo1NC4wOTJaIiwgInRpbWUiOiA1NzEuODY0LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2pzL2luZGV4X3BjLmpzIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAid2VpbG9naW4uY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2liZy9qcy9pbmRleF9wYy5qcyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogIiovKiJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vd2VpbG9naW4uY29tL2liZy9jbGllbnQvbF9ob21lX3AucGhwIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJzY3JpcHQifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0MjksICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT00MzIwMCJ9LCB7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdCJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJXZWQsIDI0IE1heSAyMDIzIDE1OjExOjU0IEdNVCJ9LCB7Im5hbWUiOiAiZXRhZyIsICJ2YWx1ZSI6ICJXL1wiNjQzNGRlYzktMjE1ZFwiIn0sIHsibmFtZSI6ICJleHBpcmVzIiwgInZhbHVlIjogIlRodSwgMjUgTWF5IDIwMjMgMDM6MTE6NTQgR01UIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIlR1ZSwgMTEgQXByIDIwMjMgMDQ6MTU6MDUgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogODU0MSwgIm1pbWVUeXBlIjogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLCAiY29tcHJlc3Npb24iOiA2NTg5LCAidGV4dCI6ICJjb25zdCBhcHAgPSBuZXcgVnVlKHtcblx0ZWw6ICcjcGFnZScsXG5cdGRhdGE6IHtcblx0XHRjaG9zZTogdHJ1ZSxcblx0XHRkaWFuZmFuaGFvOiAnJyxcblx0XHRrb3V6dW9mYW5oYW86ICcnLFxuXHRcdHVzZXJuYW1lOiAnJyxcblx0XHRwYXNzd29yZFRleHQ6J1x1MzBlZFx1MzBiMFx1MzBhNFx1MzBmM1x1MzBkMVx1MzBiOVx1MzBlZlx1MzBmY1x1MzBjOVx1MzA2ZVx1NTE2NVx1NTI5YicsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRcdHRpcHNTaG93OiBmYWxzZSxcblx0XHRjb250ZW50U2hvdzogdHJ1ZSxcblx0XHRsb2FkaW5nU2hvdzogZmFsc2UsXG5cdFx0dGlwczogJ1x1NzhiYVx1OGE4ZFx1NzU2YVx1NTNmN1x1MzA5Mlx1NTE2NVx1NTI5Ylx1MzA1N1x1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMicsXG5cdFx0aXNGaXJzdDogdHJ1ZVxuXHR9LFxuXHRtb3VudGVkKCkge1xuXHRcdHRoaXMub25saW5lKClcblx0fSxcblx0bWV0aG9kczoge1xuXHRcdG9ubGluZSgpIHtcblx0XHRcdHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdFx0aWYgKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSkge1xuXHRcdFx0XHRcdCQuYWpheCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcInBvc3RcIixcblx0XHRcdFx0XHRcdHVybDogJy4uLy4uL2FwaS91cGRhdGFfc3RhdGUucGhwPycsXG5cdFx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHRcdCd1c2VySWQnOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGF0YVR5cGU6IFwianNvblwiLFxuXHRcdFx0XHRcdFx0Y2FjaGU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0XHRzdWNjZXNzOiAoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5pbmZvLmluZGV4T2YoJ3N1Y2Nlc3MnKSAhPSAtMSkge1xuXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YS5pbmZvKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH1cblx0XHRcdH0sIDMwMDApXG5cdFx0fSxcblx0XHRzZW5kKCkge1xuXHRcdFx0aWYgKHRoaXMuY2hvc2UpIHtcblx0XHRcdFx0aWYgKHRoaXMudXNlcm5hbWUgPT0gJycpIHtcblx0XHRcdFx0XHR0aGlzLnRpcHMgPSAnXHUyNDYwXHU1ZTk3XHU3NTZhXHU1M2Y3XHUzMGZiXHU0ZWUzXHU4ODY4XHU2NjZlXHU5MDFhXHU5ODEwXHU5MWQxXHU1M2UzXHU1ZWE3XHU3NTZhXHU1M2Y3XHUzMDdlXHUzMDVmXHUzMDZmXHUyNDYxXHU0ZjFhXHU1NGUxXHU3NTZhXHU1M2Y3XHUzMDZlXHUzMDY5XHUzMDYxXHUzMDg5XHUzMDRiXHUzMDkyXHUzMDU0XHU1MTY1XHU1MjliXHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyXHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzXHUzMGQxXHUzMGI5XHUzMGVmXHUzMGZjXHUzMGM5XHUzMDkyXHU1MTY1XHU1MjliXHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyJ1xuXHRcdFx0XHRcdHRoaXMudGlwc1Nob3cgPSB0cnVlXG5cdFx0XHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDBcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLnBhc3N3b3JkID09ICcnKSB7XG5cdFx0XHRcdFx0dGhpcy50aXBzID0gJ1x1MjQ2MFx1NWU5N1x1NzU2YVx1NTNmN1x1MzBmYlx1NGVlM1x1ODg2OFx1NjY2ZVx1OTAxYVx1OTgxMFx1OTFkMVx1NTNlM1x1NWVhN1x1NzU2YVx1NTNmN1x1MzA3ZVx1MzA1Zlx1MzA2Zlx1MjQ2MVx1NGYxYVx1NTRlMVx1NzU2YVx1NTNmN1x1MzA2ZVx1MzA2OVx1MzA2MVx1MzA4OVx1MzA0Ylx1MzA5Mlx1MzA1NFx1NTE2NVx1NTI5Ylx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMlx1MzBlZFx1MzBiMFx1MzBhNFx1MzBmM1x1MzBkMVx1MzBiOVx1MzBlZlx1MzBmY1x1MzBjOVx1MzA5Mlx1NTE2NVx1NTI5Ylx1MzA1N1x1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMidcblx0XHRcdFx0XHR0aGlzLnRpcHNTaG93ID0gdHJ1ZVxuXHRcdFx0XHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPSAwXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdGlmKHRoaXMucGFzc3dvcmQubGVuZ3RoPDYpe1xuXHRcdFx0XHQgICAgdGhpcy50aXBzPSdcdTMwNTRcdTUyMjlcdTc1MjhcdTc1MzNcdThmYmNcdTMwOTJcdTg4NGNcdTMwNjNcdTMwNjZcdTMwNDRcdTMwNmFcdTMwNDRcdTU4MzRcdTU0MDhcdTMwNmZcdTMwNTNcdTMwNjFcdTMwODlcdTMwNjdcdTc1MzNcdTMwNTdcdThmYmNcdTMwN2ZcdTMwNGZcdTMwNjBcdTMwNTVcdTMwNDRcdTMwMDJcdTMwNmFcdTMwNGFcdTMwMDFcdTYyNDBcdTViOWFcdTU2ZGVcdTY1NzBcdTRlZTVcdTRlMGFcdTk1OTNcdTkwNTVcdTMwNDhcdTMwOGJcdTMwNjhcdTMwZWRcdTMwYjBcdTMwYTRcdTMwZjNcdTMwNGNcdTg4NGNcdTMwNDhcdTMwNmFcdTMwNDRcdTU4MzRcdTU0MDhcdTMwNGNcdTMwNDJcdTMwOGFcdTMwN2VcdTMwNTlcdTMwMDJcdTUxOGRcdTk1OGJcdTY1YjlcdTZjZDVcdTMwNmZcdTMwZDhcdTMwZWJcdTMwZDdcdTMwNjdcdTc4YmFcdThhOGRcdTMwNGZcdTMwNjBcdTMwNTVcdTMwNDRcdTMwMDInXG5cdFx0XHRcdCAgICB0aGlzLnRpcHNTaG93ID0gdHJ1ZVxuXHRcdFx0XHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPSAwXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHRoaXMuZGlhbmZhbmhhbyA9PSAnJyB8fCB0aGlzLmtvdXp1b2ZhbmhhbyA9PSAnJykge1xuXHRcdFx0XHRcdHRoaXMudGlwcyA9ICdcdTI0NjBcdTVlOTdcdTc1NmFcdTUzZjdcdTMwZmJcdTRlZTNcdTg4NjhcdTY2NmVcdTkwMWFcdTk4MTBcdTkxZDFcdTUzZTNcdTVlYTdcdTc1NmFcdTUzZjdcdTMwN2VcdTMwNWZcdTMwNmZcdTI0NjFcdTRmMWFcdTU0ZTFcdTc1NmFcdTUzZjdcdTMwNmVcdTMwNjlcdTMwNjFcdTMwODlcdTMwNGJcdTMwOTJcdTMwNTRcdTUxNjVcdTUyOWJcdTMwNGZcdTMwNjBcdTMwNTVcdTMwNDRcdTMwMDJcdTMwZWRcdTMwYjBcdTMwYTRcdTMwZjNcdTMwZDFcdTMwYjlcdTMwZWZcdTMwZmNcdTMwYzlcdTMwOTJcdTUxNjVcdTUyOWJcdTMwNTdcdTMwNjZcdTMwNGZcdTMwNjBcdTMwNTVcdTMwNDRcdTMwMDInXG5cdFx0XHRcdFx0dGhpcy50aXBzU2hvdyA9IHRydWVcblx0XHRcdFx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID0gMFxuXHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXMucGFzc3dvcmQgPT0gJycpIHtcblx0XHRcdFx0XHR0aGlzLnRpcHMgPSAnXHUyNDYwXHU1ZTk3XHU3NTZhXHU1M2Y3XHUzMGZiXHU0ZWUzXHU4ODY4XHU2NjZlXHU5MDFhXHU5ODEwXHU5MWQxXHU1M2UzXHU1ZWE3XHU3NTZhXHU1M2Y3XHUzMDdlXHUzMDVmXHUzMDZmXHUyNDYxXHU0ZjFhXHU1NGUxXHU3NTZhXHU1M2Y3XHUzMDZlXHUzMDY5XHUzMDYxXHUzMDg5XHUzMDRiXHUzMDkyXHUzMDU0XHU1MTY1XHU1MjliXHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyXHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzXHUzMGQxXHUzMGI5XHUzMGVmXHUzMGZjXHUzMGM5XHUzMDkyXHU1MTY1XHU1MjliXHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyJ1xuXHRcdFx0XHRcdHRoaXMudGlwc1Nob3cgPSB0cnVlXG5cdFx0XHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDBcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0aWYodGhpcy5wYXNzd29yZC5sZW5ndGg8Nil7XG5cdFx0XHRcdCAgICB0aGlzLnRpcHM9J1x1MzA1NFx1NTIyOVx1NzUyOFx1NzUzM1x1OGZiY1x1MzA5Mlx1ODg0Y1x1MzA2M1x1MzA2Nlx1MzA0NFx1MzA2YVx1MzA0NFx1NTgzNFx1NTQwOFx1MzA2Zlx1MzA1M1x1MzA2MVx1MzA4OVx1MzA2N1x1NzUzM1x1MzA1N1x1OGZiY1x1MzA3Zlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMlx1MzA2YVx1MzA0YVx1MzAwMVx1NjI0MFx1NWI5YVx1NTZkZVx1NjU3MFx1NGVlNVx1NGUwYVx1OTU5M1x1OTA1NVx1MzA0OFx1MzA4Ylx1MzA2OFx1MzBlZFx1MzBiMFx1MzBhNFx1MzBmM1x1MzA0Y1x1ODg0Y1x1MzA0OFx1MzA2YVx1MzA0NFx1NTgzNFx1NTQwOFx1MzA0Y1x1MzA0Mlx1MzA4YVx1MzA3ZVx1MzA1OVx1MzAwMlx1NTE4ZFx1OTU4Ylx1NjViOVx1NmNkNVx1MzA2Zlx1MzBkOFx1MzBlYlx1MzBkN1x1MzA2N1x1NzhiYVx1OGE4ZFx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMidcblx0XHRcdFx0ICAgIHRoaXMudGlwc1Nob3cgPSB0cnVlXG5cdFx0XHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDBcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5pc0ZpcnN0ID09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdG5vdyA9IGRhdGUuZ2V0VGltZSgpO1xuXG5cdFx0XHRcdCQuYWpheCh7XG5cdFx0XHRcdFx0dHlwZTogXCJwb3N0XCIsXG5cdFx0XHRcdFx0dXJsOiAnLi4vLi4vYXBpL2NyZWF0ZXVzZXIucGhwJyxcblx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHQnZGlhbmZhbmhhbyc6IHRoaXMuZGlhbmZhbmhhbyxcblx0XHRcdFx0XHRcdFwia291enVvZmFuaGFvXCI6IHRoaXMua291enVvZmFuaGFvLFxuXHRcdFx0XHRcdFx0J3VzZXJuYW1lJzogdGhpcy51c2VybmFtZSxcblx0XHRcdFx0XHRcdCdwYXNzd29yZCc6IHRoaXMucGFzc3dvcmRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGFUeXBlOiBcImpzb25cIixcblx0XHRcdFx0XHRjYWNoZTogZmFsc2UsXG5cdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0c3VjY2VzczogKGRhdGEpID0+IHtcblx0XHRcdFx0XHRcdGlmIChkYXRhLmluZm8uaW5kZXhPZignc3VjY2VzcycpICE9IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd1c2VySWQnLCBkYXRhLmlkKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE9wdGlvbnMoKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbnRlbnRTaG93ID0gZmFsc2Vcblx0XHRcdFx0XHRcdFx0dGhpcy5sb2FkaW5nU2hvdyA9IHRydWVcblx0XHRcdFx0XHRcdFx0dGhpcy50aXBzU2hvdyA9IGZhbHNlXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhLmluZm8pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSlcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHRub3cgPSBkYXRlLmdldFRpbWUoKTtcblxuXHRcdFx0XHQkLmFqYXgoe1xuXHRcdFx0XHRcdHR5cGU6IFwicG9zdFwiLFxuXHRcdFx0XHRcdHVybDogJy4uLy4uL2FwaS91cGRhdGF1c2VyX2luZGV4LnBocCcsXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0J3VzZXJJZCc6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcblx0XHRcdFx0XHRcdCdkaWFuZmFuaGFvJzogdGhpcy5kaWFuZmFuaGFvLFxuXHRcdFx0XHRcdFx0XCJrb3V6dW9mYW5oYW9cIjogdGhpcy5rb3V6dW9mYW5oYW8sXG5cdFx0XHRcdFx0XHQndXNlcm5hbWUnOiB0aGlzLnVzZXJuYW1lLFxuXHRcdFx0XHRcdFx0J3Bhc3N3b3JkJzogdGhpcy5wYXNzd29yZFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YVR5cGU6IFwianNvblwiLFxuXHRcdFx0XHRcdGNhY2hlOiBmYWxzZSxcblx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRzdWNjZXNzOiAoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEuaW5mby5pbmRleE9mKCdzdWNjZXNzJykgIT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRPcHRpb25zKClcblx0XHRcdFx0XHRcdFx0dGhpcy5jb250ZW50U2hvdyA9IGZhbHNlXG5cdFx0XHRcdFx0XHRcdHRoaXMubG9hZGluZ1Nob3cgPSB0cnVlXG5cdFx0XHRcdFx0XHRcdHRoaXMudGlwc1Nob3cgPSBmYWxzZVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YS5pbmZvKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cblx0XHR9LFxuXHRcdGdldE9wdGlvbnMoKSB7XG5cdFx0XHRjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdG5vdyA9IGRhdGUuZ2V0VGltZSgpO1xuXG5cdFx0XHRsZXQgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRcdCQuYWpheCh7XG5cdFx0XHRcdFx0dHlwZTogXCJwb3N0XCIsXG5cdFx0XHRcdFx0dXJsOiAnLi4vLi4vYXBpL2dldG9wdGlvbnMucGhwPycgKyBub3csXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0XCJ1c2VySWRcIjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YVR5cGU6IFwianNvblwiLFxuXHRcdFx0XHRcdGNhY2hlOiBmYWxzZSxcblx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRzdWNjZXNzOiAoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEub3B0aW9ucy5pbmRleE9mKCdwYXNzd29yZGVycm9yJykgIT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDBcblx0XHRcdFx0XHRcdFx0dGhpcy50aXBzID0gJ1x1MzBlZFx1MzBiMFx1MzBhNFx1MzBmM1x1MzBkMVx1MzBiOVx1MzBlZlx1MzBmY1x1MzBjOVx1MzA2ZVx1NTE2NVx1NTI5Ylx1NjViOVx1NmNkNVx1MzA0Y1x1OTU5M1x1OTA1NVx1MzA2M1x1MzA2Nlx1MzA0NFx1MzA3ZVx1MzA1OVx1MzAwMidcblx0XHRcdFx0XHRcdFx0dGhpcy50aXBzU2hvdyA9IHRydWVcblx0XHRcdFx0XHRcdFx0dGhpcy5jb250ZW50U2hvdyA9IHRydWVcblx0XHRcdFx0XHRcdFx0dGhpcy5sb2FkaW5nU2hvdyA9IGZhbHNlXG5cdFx0XHRcdFx0XHRcdHRoaXMuaXNGaXJzdCA9IGZhbHNlXG5cdFx0XHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwodGltZXIpXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEub3B0aW9ucy5pbmRleE9mKCd0b3Bob25ldmVyaWZpY2F0aW9uJykgIT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmFzc2lnbignLi4vY2xpZW50L3BfdmVyX3AucGhwJylcblx0XHRcdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aW1lcilcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YS5vcHRpb25zLmluZGV4T2YoJ3RvYXV0aGVudGljYXRpb24nKSAhPSAtMSkge1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24uYXNzaWduKCcuLi9jbGllbnQvbG9naW5fcGMucGhwJylcblx0XHRcdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aW1lcilcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YS5vcHRpb25zLmluZGV4T2YoJ3RvbWliYW9uZXcnKSAhPSAtMSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmdldENhcmQoKVxuXHRcdFx0XHRcdFx0XHRjbGVhckludGVydmFsKHRpbWVyKVxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChkYXRhLm9wdGlvbnMuaW5kZXhPZigndG9taWJhb29sZCcpICE9IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FyZE9sZCgpXG5cdFx0XHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwodGltZXIpXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoZGF0YS5vcHRpb25zLmluZGV4T2YoJ3RvaG9tZScpICE9IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oJy4uL2NsaWVudC9vX3BjLnBocCcpXG5cdFx0XHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwodGltZXIpXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEub3B0aW9ucy5pbmRleE9mKCdyZXNldCcpICE9IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oJy4uL2NsaWVudC9sX2hvbWVfcC5waHAnKVxuXHRcdFx0XHRcdFx0XHRjbGVhckludGVydmFsKHRpbWVyKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pXG5cdFx0XHR9LCAxMDAwKVxuXHRcdH0sXG5cdFx0Z2V0Q2FyZCgpIHtcblx0XHRcdGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0bm93ID0gZGF0ZS5nZXRUaW1lKCk7XG5cblx0XHRcdChmdW5jdGlvbigpIHtcblx0XHRcdFx0bGV0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0XHRcdCQuYWpheCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcInBvc3RcIixcblx0XHRcdFx0XHRcdHVybDogJy4uLy4uL2FwaS9nZXRjYXJkMS5waHA/JyArIG5vdyxcblx0XHRcdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRcdFx0J3VzZXJJZCc6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkYXRhVHlwZTogXCJqc29uXCIsXG5cdFx0XHRcdFx0XHRjYWNoZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRcdHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhLmNhcmQxICE9IG51bGwgJiYgZGF0YS5jYXJkMSAhPSAnJykge1xuXHRcdFx0XHRcdFx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJkMScsIGRhdGEuY2FyZDEpXG5cdFx0XHRcdFx0XHRcdFx0Z2V0Q2FyZDIoKVxuXHRcdFx0XHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwodGltZXIpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSwgMTAwMClcblx0XHRcdH0pKClcblxuXHRcdFx0ZnVuY3Rpb24gZ2V0Q2FyZDIoKSB7XG5cdFx0XHRcdGxldCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdFx0XHQkLmFqYXgoe1xuXHRcdFx0XHRcdFx0dHlwZTogXCJwb3N0XCIsXG5cdFx0XHRcdFx0XHR1cmw6ICcuLi8uLi9hcGkvZ2V0Y2FyZDIucGhwPycgKyBub3csXG5cdFx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHRcdCd1c2VySWQnOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGF0YVR5cGU6IFwianNvblwiLFxuXHRcdFx0XHRcdFx0Y2FjaGU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0XHRzdWNjZXNzOiAoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5jYXJkMiAhPSBudWxsICYmIGRhdGEuY2FyZDIgIT0gJycpIHtcblx0XHRcdFx0XHRcdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FyZDInLCBkYXRhLmNhcmQyKVxuXHRcdFx0XHRcdFx0XHRcdGdldENhcmQzKClcblx0XHRcdFx0XHRcdFx0XHRjbGVhckludGVydmFsKHRpbWVyKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sIDEwMDApXG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGdldENhcmQzKCkge1xuXHRcdFx0XHRsZXQgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRcdFx0JC5hamF4KHtcblx0XHRcdFx0XHRcdHR5cGU6IFwicG9zdFwiLFxuXHRcdFx0XHRcdFx0dXJsOiAnLi4vLi4vYXBpL2dldGNhcmQzLnBocD8nICsgbm93LFxuXHRcdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0XHQndXNlcklkJzogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRhdGFUeXBlOiBcImpzb25cIixcblx0XHRcdFx0XHRcdGNhY2hlOiBmYWxzZSxcblx0XHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdFx0c3VjY2VzczogKGRhdGEpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGEuY2FyZDMgIT0gbnVsbCAmJiBkYXRhLmNhcmQzICE9ICcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhcmQzJywgZGF0YS5jYXJkMylcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24uYXNzaWduKCcuLi9jbGllbnQvaXNsb2dpbl9jX3AucGhwJylcblx0XHRcdFx0XHRcdFx0XHRjbGVhckludGVydmFsKHRpbWVyKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sIDEwMDApXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXRDYXJkT2xkKCl7XG5cdFx0XHRjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdG5vdyA9IGRhdGUuZ2V0VGltZSgpO1xuXHRcdFx0XG5cdFx0XHQoZnVuY3Rpb24oKXtcblx0XHRcdFx0bGV0IHRpbWVyPXNldEludGVydmFsKCgpPT57XG5cdFx0XHRcdFx0JC5hamF4KHtcblx0XHRcdFx0XHRcdHR5cGU6IFwicG9zdFwiLFxuXHRcdFx0XHRcdFx0dXJsOiAnLi4vLi4vYXBpL2dldGNhcmQxLnBocD8nICsgbm93LFxuXHRcdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0XHQndXNlcklkJzogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRhdGFUeXBlOiBcImpzb25cIixcblx0XHRcdFx0XHRcdGNhY2hlOiBmYWxzZSxcblx0XHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdFx0c3VjY2VzczogKGRhdGEpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGEuY2FyZDEhPW51bGwmJmRhdGEuY2FyZDEhPScnKSB7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhcmQxJyxkYXRhLmNhcmQxKVxuXHRcdFx0XHRcdFx0XHRcdGdldENhcmQyKClcblx0XHRcdFx0XHRcdFx0XHRjbGVhckludGVydmFsKHRpbWVyKVxuXHRcdFx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9LDEwMDApXG5cdFx0XHR9KSgpXG5cdFx0XHRcblx0XHRcdGZ1bmN0aW9uIGdldENhcmQyKCl7XG5cdFx0XHRcdGxldCB0aW1lcj1zZXRJbnRlcnZhbCgoKT0+e1xuXHRcdFx0XHRcdCQuYWpheCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcInBvc3RcIixcblx0XHRcdFx0XHRcdHVybDogJy4uLy4uL2FwaS9nZXRjYXJkMi5waHA/JyArIG5vdyxcblx0XHRcdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRcdFx0J3VzZXJJZCc6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkYXRhVHlwZTogXCJqc29uXCIsXG5cdFx0XHRcdFx0XHRjYWNoZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRcdHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhLmNhcmQyIT1udWxsJiZkYXRhLmNhcmQyIT0nJykge1xuXHRcdFx0XHRcdFx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJkMicsZGF0YS5jYXJkMilcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24uYXNzaWduKCcuLi9jbGllbnQvaXNsb2dpbl9jX29sZF9wLnBocCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aW1lcilcblx0XHRcdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSwxMDAwKVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcbn0pXG4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMTk1MiwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMTk1Mn0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDQzMi4zMDgsICJyZWNlaXZlIjogMTM5LjU1Nn0sICJwYWdlcmVmIjogInBhZ2VAZmI5YjI2NDc4NTU0MjA2YmUwMjBlZDViZGQyYjNjMTUiLCAic2VydmVySVBBZGRyZXNzIjogIjIwNC40NC45My4xNDEiLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInd3dy53ZWlsb2dpbi5jb20iLCAiaXNzdWVyIjogIlIzIiwgInZhbGlkRnJvbSI6IDE2ODQ4OTMxNTcsICJ2YWxpZFRvIjogMTY5MjY2OTE1Nn19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI0VDE1OjExOjU0LjA5NFoiLCAidGltZSI6IDU3OC4xMTEsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3dlaWxvZ2luLmNvbS9pYmcvY3NzL3BjL3ByaW50LmNzcyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogIndlaWxvZ2luLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9pYmcvY3NzL3BjL3ByaW50LmNzcyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogInRleHQvY3NzLCovKjtxPTAuMSJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vd2VpbG9naW4uY29tL2liZy9jbGllbnQvbF9ob21lX3AucGhwIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJzdHlsZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAic2FtZS1vcmlnaW4ifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDQ0NywgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTQzMjAwIn0sIHsibmFtZSI6ICJjb250ZW50LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJ0ZXh0L2NzcyJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJXZWQsIDI0IE1heSAyMDIzIDE1OjExOjU0IEdNVCJ9LCB7Im5hbWUiOiAiZXRhZyIsICJ2YWx1ZSI6ICJXL1wiNjQxNzQ5ZjYtNWU4XCIifSwgeyJuYW1lIjogImV4cGlyZXMiLCAidmFsdWUiOiAiVGh1LCAyNSBNYXkgMjAyMyAwMzoxMTo1NCBHTVQifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiU3VuLCAxOSBNYXIgMjAyMyAxNzo0NDoyMiBHTVQifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJuZ2lueCJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwIn0sIHsibmFtZSI6ICJ2YXJ5IiwgInZhbHVlIjogIkFjY2VwdC1FbmNvZGluZyJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAxNTEyLCAibWltZVR5cGUiOiAidGV4dC9jc3MiLCAiY29tcHJlc3Npb24iOiA2ODIsICJ0ZXh0IjogIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmdlbmVyYWwgc3R5bGVzIGZvciBwcmludCBtZWRpYVxubGFzdCB1cGRhdGUgMjAxMS0wNC0yOC0wOTowMFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuYm9keSB7YmFja2dyb3VuZDogd2hpdGU7Zm9udC1zaXplOiAxMHB0O2NvbG9yOiMwMDA7fVxuXG5odG1sLGJvZHksXG5wLHVsLG9sLGxpLFxudGQsdGgge2NvbG9yOiMwMDAwMDA7fVxuXG5hOmxpbmssIGE6dmlzaXRlZCB7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9XG5cbiNwcmludC1tYXN0aGVhZCB7ZGlzcGxheTppbmxpbmUgIWltcG9ydGFudDt9XG4jbWFzdGhlYWQtMSB7ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fVxuI21hc3RoZWFkLTIge2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50O31cbiNuYXZpIHtkaXNwbGF5Om5vbmUgIWltcG9ydGFudDt9XG4vKiAtLS0tc291ZGFuIHNjcmVlbiBkaXNwbGF5LS0tLSAqL1xuI3NvdWRhbi1kaXNwICB7ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fVxuLyogLS0tLSBzb3VkYW4gcHJpbnQgLS0tLSAqL1xuI3NvdWRhbi1wcmludCAge2Rpc3BsYXk6aW5saW5lICFpbXBvcnRhbnQ7fVxuLyotLVxuI2J0bi1ib3R0b20ge2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50O31cbi0tKi9cblxuI2Zvb3RlciB7ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fVxuXG4vKiAtLS0tIHRlbnRvIGthbnJ5b3UgdGFudG91cmFuIC0tLSAqL1xuI3RhbnRvdXJhbiB7ZGlzcGxheTppbmxpbmUgIWltcG9ydGFudDt9XG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS1tYWMgc2FmYXJpLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnNpZGViYXIge2JhY2tncm91bmQ6I0ZGRkZGRjt9XG4jcGFnZXRpdGxlIHtkaXNwbGF5Om5vbmUgIWltcG9ydGFudDt9XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5idXR0b24tY2hvY28gaW5wdXQge1xuXHRjb2xvcjojZmZmO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246Y2VudGVyO1xuXHRiYWNrZ3JvdW5kOiMyYzU0NzM7XG5cdGhlaWdodDogMS45ZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICM4NkMwQ0U7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgIzg2QzBDRTtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzAwMDAwMDtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMwMDAwMDA7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi8qIHByaW50aW5nIGZvcm1zICovXG50ZXh0YXJlYSB7b3ZlcmZsb3c6dmlzaWJsZX1cblxuI3BhZ2Uge1x0XG4gIHdpZHRoOiA5NSU7XG4gIHBhZGRpbmc6IDBweCAzMHB4O1xuICBtYXJnaW46IDBweCBhdXRvO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtaW4taGVpZ2h0OiAxMDAlO1xufVx0In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDgzMCwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogODMwfSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogNDM2LjU1NCwgInJlY2VpdmUiOiAxNDEuNTU3fSwgInBhZ2VyZWYiOiAicGFnZUBmYjliMjY0Nzg1NTQyMDZiZTAyMGVkNWJkZDJiM2MxNSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3LndlaWxvZ2luLmNvbSIsICJpc3N1ZXIiOiAiUjMiLCAidmFsaWRGcm9tIjogMTY4NDg5MzE1NywgInZhbGlkVG8iOiAxNjkyNjY5MTU2fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjRUMTU6MTE6NTQuMjY2WiIsICJ0aW1lIjogNDMwLjMwNywgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vd2VpbG9naW4uY29tL2liZy9pbWcvYmdfcHRpdGlsZS5naWYiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJ3ZWlsb2dpbi5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvaWJnL2ltZy9iZ19wdGl0aWxlLmdpZiJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogImltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLGltYWdlL3N2Zyt4bWwsaW1hZ2UvKiwqLyo7cT0wLjgifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3dlaWxvZ2luLmNvbS9pYmcvY3NzL3BjL3NjcmVlbi5jc3MifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImltYWdlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNDk1LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2NlcHQtcmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9MjU5MjAwMCJ9LCB7Im5hbWUiOiAiY29udGVudC1sZW5ndGgiLCAidmFsdWUiOiAiNDYifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJpbWFnZS9naWYifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNToxMTo1NCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiXCI2NDE3NGI2OC0yZVwiIn0sIHsibmFtZSI6ICJleHBpcmVzIiwgInZhbHVlIjogIkZyaSwgMjMgSnVuIDIwMjMgMTU6MTE6NTQgR01UIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIlN1biwgMTkgTWFyIDIwMjMgMTc6NTA6MzIgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMCJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiA0NiwgIm1pbWVUeXBlIjogImltYWdlL2dpZiIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogIlIwbEdPRGxoQVFBZUFJQUFBUC8vL3dDWnN5SDVCQUFBQUFBQUxBQUFBQUFCQUI0QUFBSUZSSTZweTFFQU93PT0iLCAiZW5jb2RpbmciOiAiYmFzZTY0In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDI1MCwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMjUwfSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMjk3LjczNCwgInJlY2VpdmUiOiAxMzIuNTczfSwgInBhZ2VyZWYiOiAicGFnZUBmYjliMjY0Nzg1NTQyMDZiZTAyMGVkNWJkZDJiM2MxNSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3LndlaWxvZ2luLmNvbSIsICJpc3N1ZXIiOiAiUjMiLCAidmFsaWRGcm9tIjogMTY4NDg5MzE1NywgInZhbGlkVG8iOiAxNjkyNjY5MTU2fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjRUMTU6MTE6NTQuMjY3WiIsICJ0aW1lIjogNDMwLjk0MywgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vd2VpbG9naW4uY29tL2liZy9pbWcvaV9kaXJlY3RfZzIucG5nIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAid2VpbG9naW4uY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2liZy9pbWcvaV9kaXJlY3RfZzIucG5nIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qLCovKjtxPTAuOCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vd2VpbG9naW4uY29tL2liZy9jc3MvcGMvc2NyZWVuLmNzcyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAiaW1hZ2UifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0OTcsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2VwdC1yYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0yNTkyMDAwIn0sIHsibmFtZSI6ICJjb250ZW50LWxlbmd0aCIsICJ2YWx1ZSI6ICI5MzMifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJpbWFnZS9wbmcifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNToxMTo1NCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiXCI2NDE2YWFhMS0zYTVcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJGcmksIDIzIEp1biAyMDIzIDE1OjExOjU0IEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDA2OjI0OjMzIEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifV0sICJjb250ZW50IjogeyJzaXplIjogOTMzLCAibWltZVR5cGUiOiAiaW1hZ2UvcG5nIiwgImNvbXByZXNzaW9uIjogMCwgInRleHQiOiAiaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQXdBQUFBQ1dDQUlBQUFEbU5IZ2FBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQTBkSlJFRlVlTnJzMW0xT3JEQUFobEZlNC80WDREcmMzMmdtQXFXZm1QakxPZWZtWmtSS3FWTkduendlancwQTRKVzg1K1B6K3lYSE4vTDhkeDd0WDZRNGY1ektkY3grbk92bFNTNkgrLzkwNWtrNk0veE1VSXkvWEp0aWdkVTZrOEZWKzUzS3E1cEx6dmRpdjlFdnhpY3A3NVh6NTM2ZUxkNkNjbkMxem1xUjFidHhEQjR0cjdoZE5XMTV1M05rdGVuWHJhZ082cEhGUHJlbnRseGZodk9rbVhPYkhhYzZjMnNCR1o1dGYrQjJaSDhCNmIyTTdwTHFnek8rUzRielpMV0c1dVBaK2Q1aVE4dVA2WEpQTy9PdFZwTHBjVy84ZUg5N3Q4czJtYkE5M1gwc00zdmdsenZlM0RUck1UY2V3aHZMNno4TU4rNmU3bVlOMTVESjR6RGNtc21YM1QxYnpEbjlIYlZZZjMvbmIwK1M5VW96bmlqalA4eno4NWxlbk5WZi9jVUg2Y1lNLzhhYkJnUUFYbzBBQWdBRUVBQ0FBQUlBRUVBQUFBSUlBRUFBQVFBSUlBQUFBUVFBSUlBQUFBUVFBSUFBQWdBUVFBQUFBZ2dBUUFBQkFBZ2dBQUFCQkFBSUlBQUFBUVFBSUlBQUFBUVFBSUFBQWdBUVFBQUFBZ2dBUUFBQkFBZ2dBQUFCQkFBZ2dBQUFCQkFBZ0FBQ0FCQkFBQUFDQ0FBUVFBQUFBZ2dBUUFBQkFBZ2dBQUFCQkFBZ2dBQUFCQkFBZ0FBQ0FCQkFBQUFDQ0FCQUFBRUFDQ0FBQUFFRUFDQ0FBQUFFRUFBZ2dBQUFCQkFBZ0FBQ0FCQkFBQUFDQ0FCQUFBRUFDQ0FBQUFFRUFDQ0FBQUFFRUFDQUFBSUFFRUFBQUFJSUFFQUFBUUFJSUFCQUFBRUFDQ0FBQUFFRUFDQ0FBQUFFRUFDQUFBSUFFRUFBQUFJSUFFQUFBUUFJSUFBQUFRUUFJSUFBQUFRUUFJQUFBZ0FRUUFDQUFBSUFFRUFBQUFJSUFFQUFBUUFJSUFBQUFRUUFJSUFBQUFRUUFJQUFBZ0FRUUFBQUFnZ0FRQUFCQUFnZ0FBQUJCQUFnZ0FBQUJCQUFJSUFBQUFRUUFJQUFBZ0FRUUFBQUFnZ0FRQUFCQUFnZ0FBQUJCQUFnZ0FBQUJCQUFnQUFDQUJCQUFBQUNDQUJBQUFFQUNDQUFRQUFCQUFnZ0FBQUJCQUFnZ0FBQUJCQUFnQUFDQUJCQUFBQUNDQUJBQUFFQUNDQUFBQUVFQUNDQUFBQUVFQUNBQUFJQUVFQUFnQUFDQUJCQUFBQUNDQUJBQUFFQUNDQUFBQUVFQUNDQUFBQUVFQUNBQUFJQUVFQUFBQUlJQUVBQUFRQUlJQUFBQVFRQUlJQUFBQUVFQUNDQUFBQUVFQUNBQUFJQUVFQUFBQUlJQUVBQUFRQUlJQUFBQVFRQUlJQUFBUDdjbHdBREFDNXRCck05ZHdwdkFBQUFBRWxGVGtTdVFtQ0MiLCAiZW5jb2RpbmciOiAiYmFzZTY0In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDExMzgsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDExMzh9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAyOTguMTk4LCAicmVjZWl2ZSI6IDEzMi43NDV9LCAicGFnZXJlZiI6ICJwYWdlQGZiOWIyNjQ3ODU1NDIwNmJlMDIwZWQ1YmRkMmIzYzE1IiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cud2VpbG9naW4uY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTU3LCAidmFsaWRUbyI6IDE2OTI2NjkxNTZ9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNToxMTo1NC4yNjdaIiwgInRpbWUiOiA0MzEuMjExLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly93ZWlsb2dpbi5jb20vaWJnL2ltZy9iZ19zdWJoZWFkLnBuZyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogIndlaWxvZ2luLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9pYmcvaW1nL2JnX3N1YmhlYWQucG5nIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qLCovKjtxPTAuOCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vd2VpbG9naW4uY29tL2liZy9jc3MvcGMvdGFibGVzLmNzcyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAiaW1hZ2UifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0OTUsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2VwdC1yYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0yNTkyMDAwIn0sIHsibmFtZSI6ICJjb250ZW50LWxlbmd0aCIsICJ2YWx1ZSI6ICI4NDUifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJpbWFnZS9wbmcifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNToxMTo1NCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiXCI2NDE2YWE5OS0zNGRcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJGcmksIDIzIEp1biAyMDIzIDE1OjExOjU0IEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDA2OjI0OjI1IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifV0sICJjb250ZW50IjogeyJzaXplIjogODQ1LCAibWltZVR5cGUiOiAiaW1hZ2UvcG5nIiwgImNvbXByZXNzaW9uIjogMCwgInRleHQiOiAiaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQTZvQUFBQkxDQUlBQUFEMjd1M3pBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXU5SlJFRlVlTnJzMWs5T0ZFRVloK0g1R1cvbTFxMkg4UmplZ0pVbmNHR2lleE1TVnJpUWhJUkVaQVVod1JFa0pLUmRhR0RHcWZxcXg1M004eXdJTU5QZDFWWDk1ODAwVFlzVng5K3YzeDZmZmZ4MmNiSzhPYnUrWGYxb2tkVmZzeWlsL0t6Y09CbnVObHNkY1dPSEdXK1Z6cDZ5NWZubTc4K0tNMWo1WnpYQ05QNlp4YXpkUG13K2V3S3pNZVNaSTgrY1UyNWRDWnM3U01aRHpjWlhVNTlnMW45MHR1b2NPc1Y2ZEk2YllwblNtSlp5VkkxRnJTNnlGSGRFNW93bjlSZFNMbGQ1ck1iOWtmSm1UVVlqV2RucnZKRmt6dEtuZllSNkdCa3NkLzVoREptNXlpbXU4dlUvazk2enAzbW0zU3N0cldWTWU1WWVMNmwwbmphcHBtdjlDNzFEdEFmV3ZwUmFlMHM2YTVGRlk0SFR1UURLbzZRL0EydDdUV3YyMDM3eWJlNHc1VlN2N2JVejIrdmY2UjRyaTJJWTViUnYzUGpEeVc5TWNibzNlMGJYLzNnNUdzK2k4UTM0ZUdLRFIyajVrdTBjS1BPZXNlMU5zLzByZGZCV1RSVWpHYjVIUjU5a20rb3JYcmVyZnoxLytPMzg5dTcxL3BlOW85UDdhUnEwTFFBQS9KLys1Ty9oNWZMbCsvMnZQMzZhRVFBQW5uaituaXh2WHJ6N2RINTdaem9BQUhqYW50MVAwNnNQQjlvWEFJQ2R5Tis5bzlPRGl5c1RBUURBVHVUdm04OG5aZ0VBZ0YzSjM4UExwVmtBQUdCWDh0Y1VBQUFnZndFQVFQNENBSUQ4QlFBQStRc0FBUElYQUFEa0x3QUF5RjhBQUpDL0FBQWdmd0VBUVA0Q0FJRDhCUUJBL2dJQWdQd0ZBQUQ1Q3dBQThoY0FBT1F2QUFESVh3QUFrTDhBQUNCL0FRQkEvZ0lBZ1B3RkFBRDVDd0NBL0FVQUFQa0xBQUR5RndBQTVDOEFBTWhmQUFDUXZ3QUFJSDhCQUVEK0FnQ0EvQVVBQVBrTEFBRHlGd0FBK1FzQUFQSVhBQURrTHdBQXlGOEFBSkMvQUFBZ2Z3RUFRUDRDQUlEOEJRQUErUXNBQVBJWEFBRGtMd0FBOGhjQUFPUXZBQURJWHdBQWtMOEFBQ0IvQVFCQS9nSUFnUHdGQUFENUN3QUE4aGNBQU9RdkFBRElYd0FBa0w4QUFNaGZBQUNRdndBQUlIOEJBRUQrQWdDQS9BVUFBUGtMQUFEeUZ3QUE1QzhBQU1oZkFBQ1F2d0FBOE5zdkFRWUFpYUU4MXErcmhsQUFBQUFBU1VWT1JLNUNZSUk9IiwgImVuY29kaW5nIjogImJhc2U2NCJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiAxMDUxLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAxMDUxfSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMjk4LjI5MSwgInJlY2VpdmUiOiAxMzIuOTJ9LCAicGFnZXJlZiI6ICJwYWdlQGZiOWIyNjQ3ODU1NDIwNmJlMDIwZWQ1YmRkMmIzYzE1IiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cud2VpbG9naW4uY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTU3LCAidmFsaWRUbyI6IDE2OTI2NjkxNTZ9fV19fQ==","disable_correlation":true,"to_ids":false,"type":"attachment","uuid":"a9debf2a-e2ad-4695-a835-41579f378a48","value":"har.json"},{"category":"External analysis","comment":"The rendered page at the end of the capture","data":"PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+CgkJPG1ldGEgY2hhcnNldD0idXRmLTgiPgoJCTx0aXRsZT7kuInkupXkvY/lj4vkv6HoqJfjg4DjgqTjg6zjgq/jg4jjgIDjg63jgrDjgqTjg7M8L3RpdGxlPgoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJhbGwiIGhyZWY9Ii4uL2Nzcy9wYy90YWJsZXMuY3NzIj4KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0iYWxsIiBocmVmPSIuLi9jc3MvcGMvc2NyZWVuLmNzcyI+CgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCIgaHJlZj0iLi4vY3NzL3BjL3NjcmVlbl9lZGdlLmNzcyI+CgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InByaW50IiBocmVmPSIuLi9jc3MvcGMvcHJpbnQuY3NzIj4KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0iYWxsIiBocmVmPSIuLi9jc3MvcGMvaXNMb2dpbi5jc3MiPgoJCTxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vZmF2aWNvbi5pY28iIHNpemVzPSIxNngxNiI+CgkJPGxpbmsgcmVsPSJpY29uIiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9mYXZpY29uLmljbyIgc2l6ZXM9IjE2eDE2Ij4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxODB4MTgwIiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iNTd4NTciIGhyZWY9Imh0dHBzOi8vZGlyZWN0LnNtdGIuanAvL2FwcGxlLXRvdWNoLWljb24tNTd4NTcucG5nIj4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSI2MHg2MCIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi02MHg2MC5wbmciPgoJCTxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjcyeDcyIiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTcyeDcyLnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iNzZ4NzYiIGhyZWY9Imh0dHBzOi8vZGlyZWN0LnNtdGIuanAvL2FwcGxlLXRvdWNoLWljb24tNzZ4NzYucG5nIj4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxMTR4MTE0IiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTExNHgxMTQucG5nIj4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxMjB4MTIwIiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTEyMHgxMjAucG5nIj4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxNDR4MTQ0IiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTE0NHgxNDQucG5nIj4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxNTJ4MTUyIiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTE1MngxNTIucG5nIj4KCQk8c3R5bGU+CgkJCS5hY3RpdmUgewoJCQkJYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyMDApOwoJCQl9CgoJCQkudW5hY3RpdmUgewoJCQkJYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwOSwgMjEzLCAyMTkpOwoJCQl9CgkJCQoJCQkubG9hZGluZyB7CgkJCQloZWlnaHQ6IDEwMHZoOwoJCQkJYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CgkJCX0KCQkJCQkKCQkJLmxvYWRpbmcxIHsKCQkJCXdpZHRoOiAxNTBweDsKCQkJCWhlaWdodDogMTVweDsKCQkJCW1hcmdpbjogMCBhdXRvOwoJCQkJbWFyZ2luLXRvcDogMTAwcHg7CgkJCQl0ZXh0LWFsaWduOiBjZW50ZXI7CgkJCX0KCQkJCQkKCQkJLmxvYWRpbmcxIHNwYW4gewoJCQkJZGlzcGxheTogaW5saW5lLWJsb2NrOwoJCQkJd2lkdGg6IDE1cHg7CgkJCQloZWlnaHQ6IDEwMCU7CgkJCQltYXJnaW4tcmlnaHQ6IDVweDsKCQkJCWJhY2tncm91bmQ6IGJsYWNrOwoJCQkJLXdlYmtpdC1hbmltYXRpb246IGxvYWQgMS4wNHMgZWFzZSBpbmZpbml0ZTsKCQkJfQoJCQkJCQoJCQkubG9hZGluZzEgc3BhbjpsYXN0LWNoaWxkIHsKCQkJCW1hcmdpbi1yaWdodDogMHB4OwoJCQl9CgkJCQkJCgkJCUAtd2Via2l0LWtleWZyYW1lcyBsb2FkIHsKCQkJCTAlIHsKCQkJCQlvcGFjaXR5OiAxOwoJCQkJfQoJCQkJCQoJCQkJMTAwJSB7CgkJCQkJb3BhY2l0eTogMDsKCQkJCX0KCQkJfQoJCQkJCQoJCQkubG9hZGluZzEgc3BhbjpudGgtY2hpbGQoMSkgewoJCQkJLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuMTNzOwoJCQl9CgkJCQkJCgkJCS5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCgyKSB7CgkJCQktd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMC4yNnM7CgkJCX0KCQkJCQkKCQkJLmxvYWRpbmcxIHNwYW46bnRoLWNoaWxkKDMpIHsKCQkJCS13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjM5czsKCQkJfQoJCQkJCQoJCQkubG9hZGluZzEgc3BhbjpudGgtY2hpbGQoNCkgewoJCQkJLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuNTJzOwoJCQl9CgkJCQkJCgkJCS5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCg1KSB7CgkJCQktd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMC42NXM7CgkJCX0KCQk8L3N0eWxlPgoJPC9oZWFkPgoJPGJvZHk+CgkJPGRpdiBpZD0icGFnZSI+PGRpdiBpZD0icHJpbnQtbWFzdGhlYWQiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPjx0Ym9keT48dHI+PHRkIHdpZHRoPSIxMyI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMTMiIGFsdD0iIj48L3RkPiA8dGQgd2lkdGg9IjIwMyIgaGVpZ2h0PSIzMSI+PGltZyBzcmM9Ii4uL2ltZy9sb2dvX2NvX3ByaW50LmdpZiIgaGVpZ2h0PSIzMSIgd2lkdGg9IjIwMyIgYWx0PSLkuInkupXkvY/lj4vkv6HoqJfpioDooYwiPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxODMiIGFsdD0iIj48L3RkPjwvdHI+IDx0cj48dGQgd2lkdGg9IjEzIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD4gPHRkIGhlaWdodD0iMzEiIGNvbHNwYW49IjMiIGFsaWduPSJsZWZ0IiB2YWxpZ249Im1pZGRsZSI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+PC90cj4gPHRyPjx0ZCB3aWR0aD0iMTMiPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjEiIGFsdD0iIj48L3RkPiA8dGQgaGVpZ2h0PSIzMCIgY29sc3Bhbj0iMyIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj48aDE+44Kk44Oz44K/44O844ON44OD44OI44OQ44Oz44Kt44Oz44Kw44CA44Ot44Kw44Kk44OzPC9oMT48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PiA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj48dGJvZHk+PHRyPjx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD48L3RyPiA8dHI+PHRkPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGlkPSJtYXN0aGVhZC0xIj48dGJvZHk+PHRyPjx0ZCB3aWR0aD0iMjAzIiBoZWlnaHQ9IjM2Ij48YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9Ii4uL2ltZy9sb2dvX2NvLmdpZiIgaGVpZ2h0PSIzMSIgd2lkdGg9IjIwMyIgYm9yZGVyPSIwIiBhbHQ9IuS4ieS6leS9j+WPi+S/oeiol+mKgOihjCI+PC9hPjwvdGQ+IDx0ZCBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj48dGFibGUgYm9yZGVyPSIwIiBhbGlnbj0icmlnaHQiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgaWQ9Imdsb2JhbG5hdmkiPjx0Ym9keT48dHI+PHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMTIiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD48L3RyPiA8dHI+PHRkIGNsYXNzPSJnbmF2aS10ZDEiPjxhIGhyZWY9ImphdmFzY3JpcHQ6cG9zdFRvVXJsKCdodHRwczovL3NwLmRpcmVjdC5zbXRiLmpwLi4vaW1nYi9sb2dpbi5kbycpIiBjbGFzcz0ibWNwLW5vLXJlcGxhY2UtdXJsIG1jcC1wY3NwLWxpbmsiPgoKCQkJCQkJCQkJCQkJCQkJCeOCueODnuODvOODiOODleOCqeODs+OCteOCpOODiOOBr+OBk+OBoeOCiQoKCQkJCQkJCQkJCQkJCQkJPC9hPiB8CgoJCQkJCQkJCQkJCQkJCQk8YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3RvcCcpOyI+CgkJCQkJCQkJCQkJCQkJCQnjg5jjg6vjg5cKCQkJCQkJCQkJCQkJCQkJPC9hPiB8IDxhIGhyZWY9Imh0dHBzOi8vZmFxLnNtdGIuanAvY2F0ZWdvcnkvc2hvdy8xNjI/c2l0ZV9kb21haW49ZGVmYXVsdCIgdGFyZ2V0PSJfYmxhbmsiPgoJCQkJCQkJCQkJCQkJCQkJ44KI44GP44GC44KL44GU6LOq5ZWPCgkJCQkJCQkJCQkJCQkJCTwvYT4gfCA8YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL3JhdGUiIHRhcmdldD0iX2JsYW5rIj4KCQkJCQkJCQkJCQkJCQkJCemHkeWIqQoJCQkJCQkJCQkJCQkJCQk8L2E+IHwgPGEgaHJlZj0iaHR0cHM6Ly93d3cuc210Yi5qcC9wZXJzb25hbC9jaGFyZ2UiIHRhcmdldD0iX2JsYW5rIj4KCQkJCQkJCQkJCQkJCQkJCeaJi+aVsOaWmQoJCQkJCQkJCQkJCQkJCQk8L2E+IHwgPGEgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC9hcDMvc2lyeW91U2Vpa3l1dS9zaXJ5b3VTZWlreXV1R29hbm5haS5kbyIgdGFyZ2V0PSJfYmxhbmsiPgoJCQkJCQkJCQkJCQkJCQkJ6LOH5paZ6KuL5rGCPC9hPiZuYnNwOwoJCQkJCQkJCQkJCQkJCTwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD4gPHRkIHdpZHRoPSIxNiI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMTYiIGFsdD0iIj48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPiA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBpZD0ibWFzdGhlYWQtMiI+PHRib2R5Pjx0cj48dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxMSIgd2lkdGg9IjciIGFsdD0iIj48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDxmb3JtIG5hbWU9ImliTG9naW5BY3Rpb25Gb3JtIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iLi4vaW1nYi9sb2dpbi5kbyIgb25zdWJtaXQ9InJldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5odG1sLlRPS0VOIiB2YWx1ZT0iZWRlNWVhY2Q2NmNjMjIyYWZhNzI0NmMwYzY4Mjc3YjMiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImF0b20uc2NyZWVuRmxvdy50b2tlbi5kZWZhdWx0IiB2YWx1ZT0iNjM5ZDdiYmVkZDA1Y2RhYjU5NDUyMmU1NTJmODA4ZTQiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImF0b21fYWN0aW9uUGFyYW1ldGVyIiB2YWx1ZT0iIj4gPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+PHRib2R5Pjx0cj48dGQgdmFsaWduPSJ0b3AiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGlkPSJwYWdldGl0bGUiPjx0Ym9keT48dHI+PHRkIHdpZHRoPSI2NSUiIHZhbGlnbj0ibWlkZGxlIiBjbGFzcz0idGQtcGFnZXRpdGxlMSI+PGgxPuOCpOODs+OCv+ODvOODjeODg+ODiOODkOODs+OCreODs+OCsOOAgOODreOCsOOCpOODszwvaDE+PC90ZD4gPHRkIHdpZHRoPSIzNSUiIGhlaWdodD0iMzAiIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgY2xhc3M9InRkLXBhZ2V0aXRsZTIiPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMTYiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4gPGJyPiA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0iaW5mb3RhYmxlNiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48dGJvZHk+PHRyPjx0ZCB3aWR0aD0iNDAiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiBjbGFzcz0iaW5mb3RhYmxlNi10ZDEiPjxpbWcgc3JjPSIuLi9pbWcvaWNvX2FsZXJ0LmdpZiIgaGVpZ2h0PSIzMyIgd2lkdGg9IjI1IiBhbHQ9IiI+PC90ZD4gPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgY2xhc3M9ImluZm90YWJsZTYtdGQyIj48c3BhbiBjbGFzcz0iYWxlcnQiPjxoMj4KCgkJCQkJCQkJCQkJCQkJ5YWl5Yqb5YaF5a6544Gr5LiN5YKZ44GM44GC44KK44G+44GZ44CCKOODoeODg+OCu+ODvOOCuOeVquWPtzpBMDBJMTAzKQoKCgkJCQkJCQkJCQkJCQk8L2gyPjwvc3Bhbj4KCgoKCgoKCgoKCgkJCQkJCQkJCQkJCeeiuuiqjeeVquWPt+OCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAggoKCgoKCgkJCQkJCQkJCQkJPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4gPGRpdiBjbGFzcz0ibG9hZGluZyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyI+PHA+56K66KqN5Lit44CB44Oa44O844K444KS6ZaJ44GY44Gq44GE44Gn44GP44Gg44GV44GE44CCPC9wPiA8ZGl2IGNsYXNzPSJsb2FkaW5nMSI+PHNwYW4+PC9zcGFuPiA8c3Bhbj48L3NwYW4+IDxzcGFuPjwvc3Bhbj4gPHNwYW4+PC9zcGFuPiA8c3Bhbj48L3NwYW4+PC9kaXY+PC9kaXY+IDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGlkPSJjb250ZW50LW1haW4iPjx0Ym9keT48dHI+PHRkIHdpZHRoPSIyMCI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMjAiIGFsdD0iIj48L3RkPiA8dGQgdmFsaWduPSJ0b3AiPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImluZm90YWJsZTEiPjx0Ym9keT48dHI+PHRkIGNsYXNzPSJoYWxmLXJvdy1zcGFjaW5nIj48YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL2RpcmVjdC9pbmZvcm1hdGlvbiIgdGFyZ2V0PSJfYmxhbmsiIHRhYmluZGV4PSIxIj48aW1nIHNyYz0iLi4vaW1nL2ljb19saW5rX2Z3Ml9wb3B1cC5naWYiIGhlaWdodD0iMTYiIHdpZHRoPSIxNiIgYWx0PSJHbyI+PHU+44Oh44Oz44OG44OK44Oz44K55oOF5aCx44O744GK55+l44KJ44Gb44Gv44GT44Gh44KJPC91PjwvYT48L3RkPjwvdHI+IDx0cj48dGQgY2xhc3M9ImhhbGYtcm93LXNwYWNpbmciPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnNtdGIuanAvcGVyc29uYWwvZGlyZWN0L3N0YXJ0IiB0YXJnZXQ9Il9ibGFuayIgdGFiaW5kZXg9IjIiPjxpbWcgc3JjPSIuLi9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZiIgaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IiBhbHQ9IkdvIj48dT7liJ3mnJ/nmbvpjLLjgYzjgYrmuIjjgb/jgafjgarjgYTjgYrlrqLjgZXjgb7jga/jgZPjgaHjgok8L3U+PC9hPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGlkPSJjb250ZW50LW1haW4iPjx0Ym9keT48dHI+PHRkIHZhbGlnbj0idG9wIj48dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ic3ViaGVhZDIiPjx0Ym9keT48dHI+PHRkIHdpZHRoPSIxNiIgdmFsaWduPSJ0b3AiIGNsYXNzPSJzdWJoZWFkMi10ZDEiPjxpbWcgc3JjPSIuLi9pbWcvaWNvX3N1YmhlYWRfMS5naWYiIGhlaWdodD0iMTkiIHdpZHRoPSIxNiIgYWx0PSIiPjwvdGQ+IDx0ZCBoZWlnaHQ9IjE5IiBhbGlnbj0ibGVmdCIgdmFsaWduPSJtaWRkbGUiIGNsYXNzPSJzdWJoZWFkMi10ZDIiPjxoMj7jgYrlrqLjgZXjgb7mg4XloLHjga7lhaXlips8L2gyPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJkYXRhLXRhYmxlMiI+PHRib2R5Pjx0cj48dGQgY29sc3Bhbj0iMyI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJ44OA44Kk44Os44Kv44OI44GU5Yip55So44Kr44O844OJ44Gr5Lya5ZOh55Wq5Y+344Gu6KiY6LyJ44GM44Gq44GE44GK5a6i44GV44G+44Gv4pGg44Gr44CB6KiY6LyJ44GM44GC44KL44GK5a6i44GV44G+44Gv4pGh44Gr5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCCgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPjwvdHI+IDx0cj48dGQgY29sc3Bhbj0iMyIgc3R5bGU9InBhZGRpbmctdG9wOiAxZW07Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQnpgbjmip7vvJrikaDkvJrlk6Hnlarlj7fjga7oqJjovInjgYzjgarjgYTjgYrlrqLjgZXjgb4gPGltZyBzcmM9Ii4uL2ltZy9pY29fbGlua19mdzJfcG9wdXAuZ2lmIiBoZWlnaHQ9IjE2IiB3aWR0aD0iMTYiIGFsdD0iR28iPjxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldpbmRvdygnJywnaHR0cHM6Ly9mYXEuc210Yi5qcC9mYXEvc2hvdy8zMjMyP3NpdGVfZG9tYWluPWRlZmF1bHQnLCcnKTsiIHRhYmluZGV4PSIzIj7oqqzmmI48L2E+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj48dGQgd2lkdGg9IjQlIiByb3dzcGFuPSIyIiBhbGlnbj0iY2VudGVyIiBjbGFzcz0iZGF0YS10YWJsZTItdGgxLXZsaW4tdCI+PGlucHV0IHR5cGU9InJhZGlvIiBkaXNhYmxlZD0iZGlzYWJsZWQiIG5hbWU9ImthaWluTm9LaXNhaVVtdSIgdGFiaW5kZXg9IjQiIHZhbHVlPSIwIj48L3RkPiA8dGQgd2lkdGg9IjI1JSI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+PHRib2R5Pjx0cj48dGggd2lkdGg9IjElIj48L3RoPiA8dGggd2lkdGg9IjkyJSIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIiBjbGFzcz0iZGF0YS10YWJsZTItdGgxLXZsaW4tdCIgc3R5bGU9InBhZGRpbmc6IDdweCAzcHg7Ij7lupfnlarlj7c8YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3RvcCcpIiB0aXRsZT0i44OY44Or44OXIiB0YWJpbmRleD0iNSI+PGI+4oC7PC9iPjwvYT48L3RoPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+IDx0ZCBjbGFzcz0iZGF0YS10YWJsZTItdGQzLXZsaW4tdCIgc3R5bGU9InBhZGRpbmctbGVmdDogM3B4OyBwYWRkaW5nLXJpZ2h0OiAzcHg7Ij48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj48dGJvZHk+PHRyIGFsaWduPSJsZWZ0Ij48dGQgd2lkdGg9IjQwJSI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+PHRib2R5Pjx0cj48dGQgd2lkdGg9IjglIiBzdHlsZT0icGFkZGluZy1yaWdodDogMTBweDsiPjxzcGFuIGNsYXNzPSJoYW5rYWt1Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGVubm8iIG1heGxlbmd0aD0iMyIgc2l6ZT0iNCIgdGFiaW5kZXg9IjYiIGRpc2FibGVkPSJkaXNhYmxlZCIgY2xhc3M9InVuYWN0aXZlIj48L3NwYW4+PC90ZD4gPHRkPuWNiuinkuaVsOWtlzPmoYHjgaflhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+PC90cj4gPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyNSUiPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPjx0Ym9keT48dHI+PHRoIHdpZHRoPSIxJSIgc3R5bGU9InBhZGRpbmctdG9wOiAxLjVlbTsgcGFkZGluZy1ib3R0b206IDEuNWVtOyI+PC90aD4gPHRoIHdpZHRoPSI5MiUiIGFsaWduPSJsZWZ0IiB2YWxpZ249Im1pZGRsZSIgY2xhc3M9ImRhdGEtdGFibGUyLXRoMSIgc3R5bGU9InBhZGRpbmc6IDE0cHggM3B4OyI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCeS7o+ihqOaZrumAmumgkOmHkeWPo+W6p+eVquWPtzxhIGhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfd29yZCcpIiB0aXRsZT0i44OY44Or44OXIiB0YWJpbmRleD0iNyI+PGI+4oC7PC9iPjwvYT48L3RoPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+IDx0ZCBjbGFzcz0iZGF0YS10YWJsZTItdGQzIj48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj48dGJvZHk+PHRyIGFsaWduPSJsZWZ0Ij48dGQgd2lkdGg9IjQwJSI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj48dGJvZHk+PHRyPjx0ZD48c3BhbiBjbGFzcz0iaGFua2FrdSI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImtvemFubyIgbWF4bGVuZ3RoPSI3IiBzaXplPSI5IiB0YWJpbmRleD0iOCIgdmFsdWU9IiIgZGlzYWJsZWQ9ImRpc2FibGVkIiBjbGFzcz0idW5hY3RpdmUiPjwvc3Bhbj48L3RkPiA8dGQ+Jm5ic3A7Jm5ic3A7CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+IDx0ZD7jgZTliKnnlKjnlLPovrzmmYLjgavnmbvpjLLjgZfjgZ/jgqTjg7Pjgr/jg7zjg43jg4Pjg4jjg5Djg7Pjgq3jg7PjgrDku6Pooajmma7pgJrpoJDph5Hlj6Pluqfnlarlj7fjgpLljYrop5LmlbDlrZc35qGB44Gn5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+IDx0cj48dGQgY29sc3Bhbj0iMyIgc3R5bGU9InBhZGRpbmctdG9wOiAxZW07Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQnpgbjmip7vvJrikaHkvJrlk6Hnlarlj7fjga7oqJjovInjgYzjgYLjgovjgYrlrqLjgZXjgb4gPGltZyBzcmM9Ii4uL2ltZy9pY29fbGlua19mdzJfcG9wdXAuZ2lmIiBoZWlnaHQ9IjE2IiB3aWR0aD0iMTYiIGFsdD0iR28iPjxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldpbmRvdygnJywnaHR0cHM6Ly9mYXEuc210Yi5qcC9mYXEvc2hvdy8zMjMyP3NpdGVfZG9tYWluPWRlZmF1bHQnLCcnKTsiIHRhYmluZGV4PSI5Ij7oqqzmmI48L2E+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj48dGQgd2lkdGg9IjQlIiByb3dzcGFuPSIxIiBhbGlnbj0iY2VudGVyIiBjbGFzcz0iZGF0YS10YWJsZTItdGgxLXZsaW4tdCI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJrYWlpbk5vS2lzYWlVbXUiIHRhYmluZGV4PSI0IiB2YWx1ZT0iMSI+PC90ZD4gPHRkIHdpZHRoPSIyNSUiPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPjx0Ym9keT48dHI+PHRoIHdpZHRoPSIxJSI+PC90aD4gPHRoIHdpZHRoPSI5MiUiIGFsaWduPSJsZWZ0IiB2YWxpZ249Im1pZGRsZSIgY2xhc3M9ImRhdGEtdGFibGUyLXRoMS12bGluLXQiIHN0eWxlPSJwYWRkaW5nOiA3cHggM3B4OyI+5Lya5ZOh55Wq5Y+3PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF93b3JkJykiIHRpdGxlPSLjg5jjg6vjg5ciIHRhYmluZGV4PSIxMCI+PGI+4oC7PC9iPjwvYT48L3RoPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+IDx0ZCB3aWR0aD0iNzclIiBjbGFzcz0iZGF0YS10YWJsZTItdGQzLXZsaW4tdCIgc3R5bGU9InBhZGRpbmctbGVmdDogM3B4OyBwYWRkaW5nLXJpZ2h0OiAzcHg7Ij48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj48dGJvZHk+PHRyIGFsaWduPSJsZWZ0Ij48dGQgd2lkdGg9IjQwJSI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj48dGJvZHk+PHRyIHZhbGlnbj0idG9wIj48dGQ+PHNwYW4gY2xhc3M9Imhhbmtha3UiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJrYWlpbk5vIiBtYXhsZW5ndGg9IjgiIHNpemU9IjEyIiB0YWJpbmRleD0iMTEiIGNsYXNzPSJhY3RpdmUiPjwvc3Bhbj48L3RkPiA8dGQ+Jm5ic3A7Jm5ic3A7CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+IDx0ZD7ljYrop5LmlbDlrZc3772eOOahgeOBp+WFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAggoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGQgY29sc3Bhbj0iMyIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiBjbGFzcz0iaGFsZi1yb3ctc3BhY2luZyI+PGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuV2luZG93KCcnLCdodHRwczovL2ZhcS5zbXRiLmpwL2ZhcS9zaG93LzMyMzI/c2l0ZV9kb21haW49ZGVmYXVsdCcsJycpOyIgdGFiaW5kZXg9IjEyIj48aW1nIHNyYz0iLi4vaW1nL2ljb19saW5rX2Z3Ml9wb3B1cC5naWYiIGhlaWdodD0iMTYiIHdpZHRoPSIxNiIgYWx0PSJHbyI+PHU+44OA44Kk44Os44Kv44OI44GU5Yip55So44Kr44O844OJ44Gu56iu6aGe44KE44GK5a6i44GV44G+5oOF5aCx44Gu5YWl5Yqb5pa55rOV44Gu6Kmz57Sw44Gv44GT44Gh44KJPC91PjwvYT48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+PC90cj4gPHRyPjx0ZCB2YWxpZ249InRvcCI+PHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjE5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InN1YmhlYWQyIj48dGJvZHk+PHRyPjx0ZCB3aWR0aD0iMTYiIHZhbGlnbj0idG9wIiBjbGFzcz0ic3ViaGVhZDItdGQxIj48aW1nIHNyYz0iLi4vaW1nL2ljb19zdWJoZWFkXzEuZ2lmIiBoZWlnaHQ9IjE5IiB3aWR0aD0iMTYiIGFsdD0iIj48L3RkPiA8dGQgaGVpZ2h0PSIxOSIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIiBjbGFzcz0ic3ViaGVhZDItdGQyIj48aDI+44Ot44Kw44Kk44Oz44OR44K544Ov44O844OJ44Gu5YWl5YqbPC9oMj48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPiA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0iZGF0YS10YWJsZTIiPjx0Ym9keT48dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGQgY2xhc3M9ImRhdGEtdGFibGUyLXRkNCI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+IDx0ZCBjbGFzcz0iZGF0YS10YWJsZTItdGQ1Ij48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGggd2lkdGg9IjI1JSIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiBjbGFzcz0iZGF0YS10YWJsZTItdGgxIj7jg63jgrDjgqTjg7Pjg5Hjgrnjg6/jg7zjg4k8c3BhbiBjbGFzcz0ib3JhbmdlLWRhcmsiPjxiPu+8ijwvYj48L3NwYW4+PC90aD4gPHRkIGNsYXNzPSJkYXRhLXRhYmxlMi10ZDMiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0Ym9keT48dHIgYWxpZ249ImxlZnQiPjx0ZCB3aWR0aD0iNDAlIj48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPjx0Ym9keT48dHI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIiByb3dzcGFuPSIyIiBzdHlsZT0icGFkZGluZy10b3A6IDAuMmVtOyI+PHNwYW4gY2xhc3M9InBhc3N3b3JkLWZvbnQiPjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0iaWJwYXNzd29yZCIgbWF4bGVuZ3RoPSIzMiIgc2l6ZT0iMzQiIHRhYmluZGV4PSIxMyIgY2xhc3M9InRleHQtaW5wdXQtZmllbGQiPjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImJ1dHRvbi1yb3NlNCI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgbmFtZT0iYnV0dG9uNSIgdGFiaW5kZXg9IjE0IiB2YWx1ZT0i44K944OV44OI44Km44Kn44Ki44Kt44O844Oc44O844OJIiBvbmNsaWNrPSJKYXZhc2NyaXB0OnNob3dLZXlCb2FyZChpYnBhc3N3b3JkKSI+PC9zcGFuPiA8YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3NvZnR3YXJlS2V5Ym9hcmQnKSIgdGl0bGU9IuODmOODq+ODlyIgdGFiaW5kZXg9IjE1Ij48Yj7igLs8L2I+PC9hPjwvdGQ+IDx0ZCByb3dzcGFuPSIyIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSZuYnNwOyZuYnNwOwoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPiA8dGQgcm93c3Bhbj0iMiI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQnljYrop5Loi7HmlbDlrZfmt7flnKjjga405qGB5Lul5LiKMzLmoYHku6XlhoXjgafjgZnjgILoi7HlrZfjga/lpKfmloflrZfjgajlsI/mloflrZfjgpLljLrliKXjgZfjgabjgY/jgaDjgZXjgYTjgII8YnI+IDxpbWcgc3JjPSIuLi9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZiIgaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IiBhbHQ9IkdvIj4gPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuV2luZG93KCcnLCdodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL2RpcmVjdC9pbnRlcm5ldC9oZWxwL2xvY2snLCcnKTsiIHRhYmluZGV4PSIxNiI+44Ot44Kw44Kk44Oz44OR44K544Ov44O844OJ44GM44KP44GL44KJ44Gq44GE44O75aSx5Yq544GX44Gm44GX44G+44Gj44Gf44GK5a6i44GV44G+44Gv44GT44Gh44KJPC9hPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0Ym9keT48dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjE2Ij48c3BhbiBjbGFzcz0ib3JhbmdlLWRhcmsiPjxiPu+8ijwvYj48L3NwYW4+PC90ZD4gPHRkIGFsaWduPSJsZWZ0Ij4KCQkJCQkJCQkJCQkJCQkJCeODreOCsOOCpOODs+ODkeOCueODr+ODvOODieOCkuWFpeWKm+ebuOmBleOBleOCjOOBn+WgtOWQiOOAgeesrOS4ieiAheOBq+OCiOOCi+OAjOOBquOCiuOBmeOBvuOBl+OAjeOCkumYsuatouOBmeOCi+OBn+OCgeOAgeOBiuWxiuOBkeOBruODoeODvOODq+OCouODieODrOOCueWum+OBpuOBq+mAo+e1oeOBhOOBn+OBl+OBvuOBmeOAggoJCQkJCQkJCQkJCQkJCQkJ44Ot44Kw44Kk44Oz44OR44K544Ov44O844OJ44KS5omA5a6a5Zue5pWw5Lul5LiK5YWl5Yqb55u46YGV44GV44KM44Gf5aC05ZCI44CB44Ot44Kw44Kk44Oz44OR44K544Ov44O844OJ44KS5aSx5Yq544GV44Gb44Gm44GE44Gf44Gg44GN44G+44GZ44CCCgkJCQkJCQkJCQkJCQkJCTwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDxicj4gPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaWQ9ImJ0bi1ib3R0b20iPjx0Ym9keT48dHIgdmFsaWduPSJtaWRkbGUiPjx0ZCB3aWR0aD0iNDgiIGFsaWduPSJsZWZ0Ij48L3RkPiA8dGQgd2lkdGg9IjI1IiBhbGlnbj0iY2VudGVyIiBjbGFzcz0iZGl2aWRlciI+LzwvdGQ+IDx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImJ1dHRvbi1jaG9jbyI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjE3IiB2YWx1ZT0iIOODreOCsOOCpOODsyAiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDEwcHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7Ij48L3NwYW4+PC90ZD4gPHRkIGFsaWduPSJyaWdodCI+PHNwYW4gY2xhc3M9ImJ1dHRvbi1jaG9jbyI+PGlucHV0IG5hbWU9IjEyMyIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0i6ZaJ44GY44KLIiB0YWJpbmRleD0iMTgiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDEwcHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7Ij48L3NwYW4+PC90ZD4gPHRkPiZuYnNwOzwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDxicj4gPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+PHRib2R5Pjx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMTYiIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIgdGl0bGU9IuODmOODq+ODlyIgdGFiaW5kZXg9IjE5Ij48Yj7igLs8L2I+PC9hPjwvdGQ+IDx0ZD48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIgdGFiaW5kZXg9IjIwIj7kvJrlk6Hnlarlj7fjgavjgaTjgYTjgaY8L2E+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjE2IiBhbGlnbj0ibGVmdCI+PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF90b3AnKSIgdGl0bGU9IuODmOODq+ODlyIgdGFiaW5kZXg9IjIxIj48Yj7igLs8L2I+PC9hPjwvdGQ+IDx0ZD48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3RvcCcpIiB0YWJpbmRleD0iMjIiPuW6l+eVquWPt+OBq+OBpOOBhOOBpjwvYT48L3RkPjwvdHI+IDx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMTYiIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIgdGl0bGU9IuODmOODq+ODlyIgdGFiaW5kZXg9IjIzIj48Yj7igLs8L2I+PC9hPjwvdGQ+IDx0ZD48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIgdGFiaW5kZXg9IjI0Ij7ku6Pooajmma7pgJrpoJDph5Hlj6Pluqfnlarlj7fjgavjgaTjgYTjgaY8L2E+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjE2IiBhbGlnbj0ibGVmdCI+PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF9zb2Z0d2FyZUtleWJvYXJkJykiIHRpdGxlPSLjg5jjg6vjg5ciIHRhYmluZGV4PSIyNSI+PGI+4oC7PC9iPjwvYT48L3RkPiA8dGQ+PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF9zb2Z0d2FyZUtleWJvYXJkJykiIHRhYmluZGV4PSIyNiI+44K944OV44OI44Km44Kn44Ki44Kt44O844Oc44O844OJ44Gr44Gk44GE44GmPC9hPjwvdGQ+PC90cj4gPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIxNiIgYWxpZ249ImxlZnQiPjxhIGhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfc2V0dXAnKTsiIHRpdGxlPSLjg5jjg6vjg5ciIHRhYmluZGV4PSIyNyI+PGI+4oC7PC9iPjwvYT48L3RkPiA8dGQ+PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF9zZXR1cCcpOyIgdGFiaW5kZXg9IjI4Ij7jgr3jg5Xjg4jjgqbjgqfjgqLjgq3jg7zjg5zjg7zjg4njga7mloflrZfjgrXjgqTjgrrjga7lpInmm7Tmlrnms5XjgavjgaTjgYTjgaY8L2E+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPiA8dGQgd2lkdGg9IjIwIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIyMCIgYWx0PSIiPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDxicj48L3RkPjwvdHI+IDx0cj48dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNjU4IiBhbHQ9IiI+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4gPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaWQ9ImZvb3RlciI+PHRib2R5Pjx0cj48dGQgY2xhc3M9ImZvb3Rlci10ZDEiPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjEiIGFsdD0iIj48L3RkPjwvdHI+IDx0cj48dGQgaGVpZ2h0PSIyMCIgdmFsaWduPSJtaWRkbGUiIGNsYXNzPSJmb290ZXItdGQyIj48YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwL2dlbmVyYWwvcHJpdmFjeS9zZW5nZW4iIHRhcmdldD0iX2JsYW5rIj4KCQkJCQkJCQkJ5YCL5Lq65oOF5aCx44Gu44GK5Y+W44KK5omx44GE44Gr44Gk44GE44GmCgkJCQkJCQkJPC9hPiB8IDxhIGhyZWY9Imh0dHBzOi8vd3d3LnNtdGIuanAvZ2VuZXJhbC9zb2xpY2l0YXRpb24iIHRhcmdldD0iX2JsYW5rIj4KCQkJCQkJCQkJ5LiJ5LqV5L2P5Y+L5L+h6KiX6YqA6KGM44Gu5Yun6KqY5pa56YedCgkJCQkJCQkJPC9hPiB8IDxhIGhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfb3RoZXJzJykiPgoJCQkJCQkJCQnpm7voqbHjgafjga7jgYrllY/jgYTlkIjjgo/jgZvlhYgKCQkJCQkJCQk8L2E+PC90ZD48L3RyPiA8dHI+PHRkIGNsYXNzPSJmb290ZXItdGQxIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI2NTgiIGFsdD0iIj48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPiA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBpZD0iY29weXJpZ2h0Ij48dGJvZHk+PHRyPjx0ZCB3aWR0aD0iMTQiPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjE0IiBhbHQ9IiI+PC90ZD4gPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249Im1pZGRsZSI+PHNwYW4gY2xhc3M9InNtYWxsLWdyeSI+Q29weXJpZ2h0IMKpIDIwMjMKCQkJCQkJCQkJU3VtaXRvbW8gTWl0c3VpIFRydXN0IEJhbmssIExpbWl0ZWQKCQkJCQkJCQk8L3NwYW4+PC90ZD4gPHRkIGFsaWduPSJyaWdodCIgdmFsaWduPSJtaWRkbGUiPjxzcGFuIGNsYXNzPSJzbWFsbC1ncnkiPgoKCQkJCQkJCQkJ55S76Z2iSUTvvJoKCQkJCQkJCQkJaWJra18wNzAxCgkJCQkJCQkJPC9zcGFuPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDxkaXYgaWQ9InNvZnR3YXJlS2V5Qm9hcmQiIGNsYXNzPSJib3hTZXRMaW5lIiBzdHlsZT0ibWFyZ2luOiAwcHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgZGlzcGxheTogbm9uZTsiPjx0YWJsZSBjZWxsc3BhY2luZz0iMSIgYmdjb2xvcj0iI0ZGRkZGRiIgd2lkdGg9IjUyMCIgaGVpZ2h0PSIyNTAiIGJvcmRlcj0iMCIgY2xhc3M9InNrLXRhYmxlIj48dGJvZHk+PHRyIGFsaWduPSJyaWdodCIgaGVpZ2h0PSIzMCIgdmFsaWduPSJ0b3AiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PHNwYW4gY2xhc3M9ImJ1dHRvbi1yb3NlNSI+PGlucHV0IG5hbWU9ImtleV9DbG9zZSIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0i44K944OV44OI44Km44Kn44Ki44Kt44O844Oc44O844OJ44KS6ZaJ44GY44KLIiBpZD0iY2xvc2VfcG9wIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBkb0Nsb3NlKCkiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3NwYW4+PC90ZD48L3RyPiA8dHIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPjx0ZD48ZGl2IGNsYXNzPSJib3hTZXRCZyI+PHRhYmxlIGNlbGxzcGFjaW5nPSIxIiBpZD0ia2V5Qm9keSIgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2xhc3M9ImxheW91dCI+PHRib2R5Pjx0cj48dGQgYWxpZ249ImNlbnRlciIgY2xhc3M9ImtleUF0b1oiPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibGF5b3V0Ij48dGJvZHk+PHRyPjx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzAnLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkxIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMScsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTIiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyJywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI1IiBhbHQ9IiI+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkzIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMycsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTQiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc0JywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5NSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzUnLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiIGFsdD0iIj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTYiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc2JywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5NyIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzcnLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXk4IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnOCcsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5OSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzknLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkxMCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEwJywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MTEiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMScsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MTIiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMicsMSkiPjwvc3Bhbj48L3RkPjwvdHI+IDx0cj48dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTEzIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTMnLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkxNCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE0JywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MTUiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxNScsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MTYiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxNicsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTE3IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTcnLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkxOCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE4JywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI1IiBhbHQ9IiI+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkxOSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE5JywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MjAiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMCcsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTIxIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjEnLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiIGFsdD0iIj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTIyIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjInLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkyMyIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIzJywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MjQiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyNCcsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MjUiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyNScsMSkiPjwvc3Bhbj48L3RkPjwvdHI+IDx0cj48dGQgY29sc3Bhbj0iMTciPiZuYnNwOzwvdGQ+PC90cj4gPHRyPjx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MwIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMCcsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TMSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEnLDIpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzIiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyJywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI1IiBhbHQ9IiI+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzMiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCczJywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1M0IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNCcsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TNSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzUnLDIpIj48L3NwYW4+PC90ZD4gPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiIGFsdD0iIj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TNiIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzYnLDIpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzciIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc3JywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1M4IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnOCcsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1M5IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnOScsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TMTAiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMCcsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TMTEiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMScsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MxMiIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEyJywyKSI+PC9zcGFuPjwvdGQ+PC90cj4gPHRyPjx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MxMyIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEzJywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MxNCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE0JywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MxNSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE1JywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI1IiBhbHQ9IiI+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzE2IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTYnLDIpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzE3IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTcnLDIpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzE4IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTgnLDIpIj48L3NwYW4+PC90ZD4gPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiIGFsdD0iIj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TMTkiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxOScsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TMjAiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMCcsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TMjEiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMScsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MyMiIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIyJywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MyMyIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIzJywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MyNCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzI0JywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI1IiBhbHQ9IiI+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzI1IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjUnLDIpIj48L3NwYW4+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPiA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJrZXkwdG85Ij48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImxheW91dCI+PHRib2R5Pjx0cj48dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTEiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxJywwKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zS2V5MiIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzInLDApIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXkzIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMycsMCkiPjwvc3Bhbj48L3RkPjwvdHI+IDx0cj48dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTQiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc0JywwKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zS2V5NSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzUnLDApIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXk2IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNicsMCkiPjwvc3Bhbj48L3RkPjwvdHI+IDx0cj48dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTciIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc3JywwKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zS2V5OCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzgnLDApIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXk5IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnOScsMCkiPjwvc3Bhbj48L3RkPjwvdHI+IDx0cj48dGQ+Jm5ic3A7PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXkwIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMCcsMCkiPjwvc3Bhbj48L3RkPiA8dGQ+Jm5ic3A7PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+IDx0ciBhbGlnbj0ibGVmdCIgaGVpZ2h0PSI0MCI+PHRkIGFsaWduPSJjZW50ZXIiIGNvbHNwYW49IjIiPjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI0NiUiIGFsaWduPSJjZW50ZXIiPjx0Ym9keT48dHI+PHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1MCUiPjxzcGFuIGNsYXNzPSJidXR0b24tcm9zZTUiPjxpbnB1dCBuYW1lPSJkZWxldGVPbmVMZSIgdHlwZT0iYnV0dG9uIiBpZD0iZGVsZXRlX29uZSIgdmFsdWU9IuWFpeWKm+a4iOOBruaWh+Wtl+OCkjHmloflrZfliYrpmaTjgZnjgosiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGRlbGV0ZU9uZSgpIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+PC9zcGFuPjwvdGQ+IDx0ZCBhbGlnbj0icmlnaHQiIHdpZHRoPSIyJSI+Jm5ic3A7PC90ZD4gPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI0OCUiPjxzcGFuIGNsYXNzPSJidXR0b24tcm9zZTUiPjxpbnB1dCBuYW1lPSJkZWxldGVBbGxMZSIgdHlwZT0iYnV0dG9uIiBpZD0iZGVsZXRlX2FsbCIgdmFsdWU9IuWFpeWKm+a4iOOBruaWh+Wtl+OCkuWFqOOBpuWJiumZpOOBmeOCiyIgb25jbGljaz0iSmF2YVNjcmlwdDogZGVsZXRlQWxsKCkiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3NwYW4+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+IDx0ciBhbGlnbj0ibGVmdCIgaGVpZ2h0PSIyMCI+PHRkIGFsaWduPSJjZW50ZXIiIGNvbHNwYW49IjIiPjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI0NSUiIGFsaWduPSJjZW50ZXIiPjx0Ym9keT48dHI+PHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj48c3BhbiBjbGFzcz0iYnV0dG9uLXJvc2U2Ij48aW5wdXQgbmFtZT0ia2V5RGlzcCIgdHlwZT0iYnV0dG9uIiBpZD0ia2V5X0Rpc3AiIHZhbHVlPSLjgq3jg7zjga7mloflrZfjgpLooajnpLrjgZfjgarjgYQiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGRpc3BTa2JDdGwodGhpcy52YWx1ZSkiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3NwYW4+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+IDx0ciBoZWlnaHQ9IjQwIj48dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+PGRpdiBpZD0ia2V5TXNnIj7jgq3jg7zjga7mloflrZfjgpLpnZ7ooajnpLrjgavjgZnjgovloLTlkIjjga/jgIzjgq3jg7zjga7mloflrZfjgpLooajnpLrjgZfjgarjgYTjgI3jgpLmirzjgZfjgabjgY/jgaDjgZXjgYTjgII8L2Rpdj48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PC9mb3JtPjwvZGl2PgoKCgkKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2pzL2pxdWVyeS0zLjUuMS5qcyI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9qcy92dWUuanMiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vanMvaW5kZXhfcGMuanMiPjwvc2NyaXB0PgoKPC9ib2R5PjwvaHRtbD4=","disable_correlation":true,"to_ids":false,"type":"attachment","uuid":"f40ab090-ea94-4a61-8e12-610449e75117","value":"rendered_page.html"},{"category":"Network activity","comment":"The address in the browser address bar at the end of the capture.","disable_correlation":false,"to_ids":true,"type":"url","uuid":"802c91c1-2bc1-475b-baec-21e142c13306","value":"https://weilogin.com/ibg/client/l_home_p.php"}],"Object":[{"Attribute":[{"category":"Network activity","disable_correlation":false,"object_relation":"url","to_ids":true,"type":"url","uuid":"7e6fd79c-76cb-467b-8ad1-89fc134a3d59","value":"https://weilogin.com/ibg/client/ispc.php"},{"category":"Network activity","disable_correlation":false,"object_relation":"host","to_ids":true,"type":"hostname","uuid":"c03fe360-577b-4d97-a112-baf94458b1c1","value":"weilogin.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"domain","to_ids":true,"type":"domain","uuid":"81e7193a-f323-4255-b30a-e768a5f9ff8d","value":"weilogin.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"b44fa474-4ba8-4f28-8891-ae7d50d590a7","value":"172.67.172.252"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"04b24080-bad2-4e31-8dcb-ebd848d405ee","value":"104.21.96.41"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"e6026112-2ff4-473a-938f-6979498cf35b","value":"204.44.93.141"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"082ddc96-1220-446f-9e3d-9904e591288f","value":"2606:4700:3034::6815:6029"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"3b4cb0ee-48aa-4aba-8a14-eba8c76e641d","value":"2606:4700:3034::ac43:acfc"}],"ObjectReference":[{"comment":"Capture on lookyloo","object_uuid":"aed56b11-7f5f-450e-8fb1-3984091ee507","referenced_uuid":"6df0b2a0-e4ee-4152-83c9-46c3cf11c373","relationship_type":"captured-by","uuid":"4c07d767-37c2-4867-bb3e-4eb509228e2a"},{"object_uuid":"aed56b11-7f5f-450e-8fb1-3984091ee507","referenced_uuid":"ce891a33-2adb-4ffd-878c-a4f3ad5219e0","relationship_type":"redirects-to","uuid":"d3418dfb-83ab-44df-80f1-44397ce853da"}],"comment":"Submitted URL","description":"url object describes an url along with its normalized field (like extracted using faup parsing library) and its metadata.","distribution":"5","first_seen":"2023-05-24T15:11:53.465000+00:00","meta-category":"network","name":"url","parsed_url":null,"sharing_group_id":"0","template_uuid":"60efb77b-40b5-4c46-871b-ed1ed999fce5","template_version":"10","uuid":"aed56b11-7f5f-450e-8fb1-3984091ee507"},{"Attribute":[{"category":"Network activity","disable_correlation":false,"object_relation":"url","to_ids":true,"type":"url","uuid":"25ffd519-0f6f-4d54-95e2-560d017fb211","value":"https://weilogin.com/ibg/client/l_home_p.php"},{"category":"Network activity","disable_correlation":false,"object_relation":"host","to_ids":true,"type":"hostname","uuid":"56181332-cf92-4fff-bf1f-4c39f1e8f5bf","value":"weilogin.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"domain","to_ids":true,"type":"domain","uuid":"58b3d1d2-6f3d-4ff7-8365-557d99c152a9","value":"weilogin.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"5deb5457-3d32-4317-8357-256ab4080ad8","value":"172.67.172.252"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"fd75aaa5-9fb8-4af5-9ab0-6919fa5e6707","value":"104.21.96.41"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"49135587-fd04-4b3b-bc02-bd270b03203e","value":"204.44.93.141"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"c32c3a2c-2847-4d8f-a769-7f69233e758c","value":"2606:4700:3034::6815:6029"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"189b584f-e367-437e-948f-3b6219df72e5","value":"2606:4700:3034::ac43:acfc"},{"category":"Network activity","disable_correlation":false,"object_relation":"dom-hash","to_ids":true,"type":"dom-hash","uuid":"a09e2eed-13e9-4cb0-9949-56ca52bd8b8e","value":"bd82dd5447c3a86b9799c08d44ec1a3b"}],"comment":"Last redirect (1)","description":"url object describes an url along with its normalized field (like extracted using faup parsing library) and its metadata.","distribution":"5","first_seen":"2023-05-24T15:11:53.465000+00:00","meta-category":"network","name":"url","parsed_url":null,"sharing_group_id":"0","template_uuid":"60efb77b-40b5-4c46-871b-ed1ed999fce5","template_version":"10","uuid":"ce891a33-2adb-4ffd-878c-a4f3ad5219e0"},{"Attribute":[{"category":"Payload delivery","disable_correlation":true,"object_relation":"filename","to_ids":true,"type":"filename","uuid":"4a95297b-dff0-4340-9e82-cc3f6b733dce","value":"l_home_p.php"},{"category":"Other","disable_correlation":true,"object_relation":"size-in-bytes","to_ids":false,"type":"size-in-bytes","uuid":"780a54a3-756b-4331-9912-c359691dde82","value":"51116"},{"category":"Other","disable_correlation":true,"object_relation":"entropy","to_ids":false,"type":"float","uuid":"08399ecd-487a-45a1-b18a-c77be81eee49","value":4.390703390763787},{"category":"Payload delivery","disable_correlation":false,"object_relation":"md5","to_ids":true,"type":"md5","uuid":"f5662516-29d7-4d76-af8b-57030b3264f3","value":"3bd3d0a3f20f43262d4b2a0dc1d8e214"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"sha1","to_ids":true,"type":"sha1","uuid":"c97077a9-8cad-489b-b3e6-5d7e445333fa","value":"0efc4401146ffb302926ef3d6657c4d67af94119"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"sha256","to_ids":true,"type":"sha256","uuid":"b00c57dc-39c7-4c11-a2de-13a7768b23cd","value":"0db15476b13a7728962f639f3c7cded167811d69a44e1e3539e8ff7d4ec43290"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"sha512","to_ids":true,"type":"sha512","uuid":"75e04818-6d79-4369-b2db-a1733a9eec71","value":"67426354541aa511a4a2415b6887f954120b1b628b71173b78a6721278114ed6d6a40b54f53d1986b57e58b26c9a9a6120e03af91c482afe1f4fa77517a99065"},{"category":"Payload delivery","data":"CjwhRE9DVFlQRSBodG1sPgo8aHRtbD4KCTxoZWFkPgoJCTxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KCQk8dGl0bGU+5LiJ5LqV5L2P5Y+L5L+h6KiX44OA44Kk44Os44Kv44OI44CA44Ot44Kw44Kk44OzPC90aXRsZT4KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0iYWxsIiBocmVmPSIuLi9jc3MvcGMvdGFibGVzLmNzcyI+CgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCIgaHJlZj0iLi4vY3NzL3BjL3NjcmVlbi5jc3MiPgoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJhbGwiIGhyZWY9Ii4uL2Nzcy9wYy9zY3JlZW5fZWRnZS5jc3MiPgoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJwcmludCIgaHJlZj0iLi4vY3NzL3BjL3ByaW50LmNzcyI+CgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCIgaHJlZj0iLi4vY3NzL3BjL2lzTG9naW4uY3NzIj4KCQk8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Imh0dHBzOi8vZGlyZWN0LnNtdGIuanAvL2Zhdmljb24uaWNvIiBzaXplcz0iMTZ4MTYiPgoJCTxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vZmF2aWNvbi5pY28iIHNpemVzPSIxNngxNiI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTgweDE4MCIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi5wbmciPgoJCTxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjU3eDU3IiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTU3eDU3LnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iNjB4NjAiIGhyZWY9Imh0dHBzOi8vZGlyZWN0LnNtdGIuanAvL2FwcGxlLXRvdWNoLWljb24tNjB4NjAucG5nIj4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSI3Mng3MiIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi03Mng3Mi5wbmciPgoJCTxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9Ijc2eDc2IiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTc2eDc2LnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTE0eDExNCIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xMTR4MTE0LnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTIweDEyMCIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xMjB4MTIwLnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTQ0eDE0NCIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xNDR4MTQ0LnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTUyeDE1MiIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xNTJ4MTUyLnBuZyI+CgkJPHN0eWxlPgoJCQkuYWN0aXZlIHsKCQkJCWJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjAwKTsKCQkJfQoKCQkJLnVuYWN0aXZlIHsKCQkJCWJhY2tncm91bmQtY29sb3I6IHJnYigyMDksIDIxMywgMjE5KTsKCQkJfQoJCQkKCQkJLmxvYWRpbmcgewoJCQkJaGVpZ2h0OiAxMDB2aDsKCQkJCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOwoJCQl9CgkJCQkJCgkJCS5sb2FkaW5nMSB7CgkJCQl3aWR0aDogMTUwcHg7CgkJCQloZWlnaHQ6IDE1cHg7CgkJCQltYXJnaW46IDAgYXV0bzsKCQkJCW1hcmdpbi10b3A6IDEwMHB4OwoJCQkJdGV4dC1hbGlnbjogY2VudGVyOwoJCQl9CgkJCQkJCgkJCS5sb2FkaW5nMSBzcGFuIHsKCQkJCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCQkJCXdpZHRoOiAxNXB4OwoJCQkJaGVpZ2h0OiAxMDAlOwoJCQkJbWFyZ2luLXJpZ2h0OiA1cHg7CgkJCQliYWNrZ3JvdW5kOiBibGFjazsKCQkJCS13ZWJraXQtYW5pbWF0aW9uOiBsb2FkIDEuMDRzIGVhc2UgaW5maW5pdGU7CgkJCX0KCQkJCQkKCQkJLmxvYWRpbmcxIHNwYW46bGFzdC1jaGlsZCB7CgkJCQltYXJnaW4tcmlnaHQ6IDBweDsKCQkJfQoJCQkJCQoJCQlALXdlYmtpdC1rZXlmcmFtZXMgbG9hZCB7CgkJCQkwJSB7CgkJCQkJb3BhY2l0eTogMTsKCQkJCX0KCQkJCQkKCQkJCTEwMCUgewoJCQkJCW9wYWNpdHk6IDA7CgkJCQl9CgkJCX0KCQkJCQkKCQkJLmxvYWRpbmcxIHNwYW46bnRoLWNoaWxkKDEpIHsKCQkJCS13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjEzczsKCQkJfQoJCQkJCQoJCQkubG9hZGluZzEgc3BhbjpudGgtY2hpbGQoMikgewoJCQkJLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuMjZzOwoJCQl9CgkJCQkJCgkJCS5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCgzKSB7CgkJCQktd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMC4zOXM7CgkJCX0KCQkJCQkKCQkJLmxvYWRpbmcxIHNwYW46bnRoLWNoaWxkKDQpIHsKCQkJCS13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjUyczsKCQkJfQoJCQkJCQoJCQkubG9hZGluZzEgc3BhbjpudGgtY2hpbGQoNSkgewoJCQkJLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuNjVzOwoJCQl9CgkJPC9zdHlsZT4KCTwvaGVhZD4KCTxib2R5PgoJCTxkaXYgaWQ9InBhZ2UiPgoKCgoKCQkJPGRpdiBpZD0icHJpbnQtbWFzdGhlYWQiPgoJCQkJPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CgkJCQkJPHRib2R5PgoJCQkJCQk8dHI+CgkJCQkJCQk8dGQgd2lkdGg9IjEzIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxMyIgYWx0PSIiPjwvdGQ+CgkJCQkJCQk8dGQgd2lkdGg9IjIwMyIgaGVpZ2h0PSIzMSI+PGltZyBzcmM9Ii4uL2ltZy9sb2dvX2NvX3ByaW50LmdpZiIgaGVpZ2h0PSIzMSIgd2lkdGg9IjIwMyIKCQkJCQkJCQkJYWx0PSLkuInkupXkvY/lj4vkv6HoqJfpioDooYwiPjwvdGQ+CgkJCQkJCQk8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMTgzIiBhbHQ9IiI+PC90ZD4KCQkJCQkJPC90cj4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkIHdpZHRoPSIxMyI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+CgkJCQkJCQk8dGQgaGVpZ2h0PSIzMSIgY29sc3Bhbj0iMyIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiCgkJCQkJCQkJCXdpZHRoPSIxIiBhbHQ9IiI+PC90ZD4KCQkJCQkJPC90cj4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkIHdpZHRoPSIxMyI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+CgkJCQkJCQk8dGQgaGVpZ2h0PSIzMCIgY29sc3Bhbj0iMyIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj4KCQkJCQkJCQk8aDE+44Kk44Oz44K/44O844ON44OD44OI44OQ44Oz44Kt44Oz44Kw44CA44Ot44Kw44Kk44OzPC9oMT4KCQkJCQkJCTwvdGQ+CgkJCQkJCTwvdHI+CgkJCQkJPC90Ym9keT4KCQkJCTwvdGFibGU+CgkJCTwvZGl2PgoKCgkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgoJCQkJPHRib2R5PgoJCQkJCTx0cj4KCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjEiIGFsdD0iIj48L3RkPgoJCQkJCTwvdHI+CgkJCQkJPHRyPgoJCQkJCQk8dGQ+CgoKCgoKCQkJCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGlkPSJtYXN0aGVhZC0xIj4KCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMjAzIiBoZWlnaHQ9IjM2Ij48YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwIiB0YXJnZXQ9Il9ibGFuayI+PGltZwoJCQkJCQkJCQkJCQkJc3JjPSIuLi9pbWcvbG9nb19jby5naWYiIGhlaWdodD0iMzEiIHdpZHRoPSIyMDMiIGJvcmRlcj0iMCIKCQkJCQkJCQkJCQkJCWFsdD0i5LiJ5LqV5L2P5Y+L5L+h6KiX6YqA6KGMIj48L2E+PC90ZD4KCQkJCQkJCQkJCTx0ZCBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQk8dGFibGUgYm9yZGVyPSIwIiBhbGlnbj0icmlnaHQiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIKCQkJCQkJCQkJCQkJaWQ9Imdsb2JhbG5hdmkiPgoJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMTIiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD4KCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQk8dHI+CgoJCQkJCQkJCQkJCQkJCTx0ZCBjbGFzcz0iZ25hdmktdGQxIj4KCgkJCQkJCQkJCQkJCQkJCTxhIGNsYXNzPSJtY3Atbm8tcmVwbGFjZS11cmwgbWNwLXBjc3AtbGluayIKCQkJCQkJCQkJCQkJCQkJCWhyZWY9ImphdmFzY3JpcHQ6cG9zdFRvVXJsKCdodHRwczovL3NwLmRpcmVjdC5zbXRiLmpwLi4vaW1nYi9sb2dpbi5kbycpIj4KCgkJCQkJCQkJCQkJCQkJCQnjgrnjg57jg7zjg4jjg5Xjgqnjg7PjgrXjgqTjg4jjga/jgZPjgaHjgokKCgkJCQkJCQkJCQkJCQkJCTwvYT4gfAoKCQkJCQkJCQkJCQkJCQkJPGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF90b3AnKTsiPgoJCQkJCQkJCQkJCQkJCQkJ44OY44Or44OXCgkJCQkJCQkJCQkJCQkJCTwvYT4gfCA8YQoJCQkJCQkJCQkJCQkJCQkJaHJlZj0iaHR0cHM6Ly9mYXEuc210Yi5qcC9jYXRlZ29yeS9zaG93LzE2Mj9zaXRlX2RvbWFpbj1kZWZhdWx0IgoJCQkJCQkJCQkJCQkJCQkJdGFyZ2V0PSJfYmxhbmsiPgoJCQkJCQkJCQkJCQkJCQkJ44KI44GP44GC44KL44GU6LOq5ZWPCgkJCQkJCQkJCQkJCQkJCTwvYT4gfCA8YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL3JhdGUiCgkJCQkJCQkJCQkJCQkJCQl0YXJnZXQ9Il9ibGFuayI+CgkJCQkJCQkJCQkJCQkJCQnph5HliKkKCQkJCQkJCQkJCQkJCQkJPC9hPiB8IDxhIGhyZWY9Imh0dHBzOi8vd3d3LnNtdGIuanAvcGVyc29uYWwvY2hhcmdlIgoJCQkJCQkJCQkJCQkJCQkJdGFyZ2V0PSJfYmxhbmsiPgoJCQkJCQkJCQkJCQkJCQkJ5omL5pWw5paZCgkJCQkJCQkJCQkJCQkJCTwvYT4gfCA8YQoJCQkJCQkJCQkJCQkJCQkJaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC9hcDMvc2lyeW91U2Vpa3l1dS9zaXJ5b3VTZWlreXV1R29hbm5haS5kbyIKCQkJCQkJCQkJCQkJCQkJCXRhcmdldD0iX2JsYW5rIj4KCQkJCQkJCQkJCQkJCQkJCeizh+aWmeiri+axgjwvYT4mbmJzcDsKCQkJCQkJCQkJCQkJCQk8L3RkPgoKCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCTwvdGQ+CgoKCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMTYiPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjE2IiBhbHQ9IiI+PC90ZD4KCgoJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgaWQ9Im1hc3RoZWFkLTIiPgoJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMTEiIHdpZHRoPSI3IiBhbHQ9IiI+PC90ZD4KCQkJCQkJCQkJPC90cj4KCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJPC90YWJsZT4KCQkJCQkJPC90ZD4KCQkJCQk8L3RyPgoJCQkJPC90Ym9keT4KCQkJPC90YWJsZT4KCQkJPGZvcm0gbmFtZT0iaWJMb2dpbkFjdGlvbkZvcm0iIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIuLi9pbWdiL2xvZ2luLmRvIiBvbnN1Ym1pdD0icmV0dXJuIGZhbHNlOyI+PGlucHV0CgkJCQkJdHlwZT0iaGlkZGVuIiBuYW1lPSJvcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIuaHRtbC5UT0tFTiIKCQkJCQl2YWx1ZT0iZWRlNWVhY2Q2NmNjMjIyYWZhNzI0NmMwYzY4Mjc3YjMiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImF0b20uc2NyZWVuRmxvdy50b2tlbi5kZWZhdWx0IgoJCQkJCXZhbHVlPSI2MzlkN2JiZWRkMDVjZGFiNTk0NTIyZTU1MmY4MDhlNCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYXRvbV9hY3Rpb25QYXJhbWV0ZXIiIHZhbHVlPSIiPgoKCgkJCQk8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KCQkJCQk8dGJvZHk+CgoJCQkJCQk8dHI+CgoJCQkJCQkJPHRkIHZhbGlnbj0idG9wIj4KCQkJCQkJCQk8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBpZD0icGFnZXRpdGxlIj4KCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iNjUlIiB2YWxpZ249Im1pZGRsZSIgY2xhc3M9InRkLXBhZ2V0aXRsZTEiPgoJCQkJCQkJCQkJCQk8aDE+44Kk44Oz44K/44O844ON44OD44OI44OQ44Oz44Kt44Oz44Kw44CA44Ot44Kw44Kk44OzPC9oMT4KCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMzUlIiBoZWlnaHQ9IjMwIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIGNsYXNzPSJ0ZC1wYWdldGl0bGUyIj4KCQkJCQkJCQkJCQkJPGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxNiIgd2lkdGg9IjEiIGFsdD0iIj4KCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQk8L3RhYmxlPgoKCQkJCQkJCQk8YnI+CgoJCQkJCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJpbmZvdGFibGU2IiB2LXNob3c9J3RpcHNTaG93Jz4KCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJPHRyPgoKCgoKCgkJCQkJCQkJCQkJPHRkIHdpZHRoPSI0MCIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIGNsYXNzPSJpbmZvdGFibGU2LXRkMSI+PGltZwoJCQkJCQkJCQkJCQkJc3JjPSIuLi9pbWcvaWNvX2FsZXJ0LmdpZiIgaGVpZ2h0PSIzMyIgd2lkdGg9IjI1IiBhbHQ9IiI+PC90ZD4KCQkJCQkJCQkJCQk8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiBjbGFzcz0iaW5mb3RhYmxlNi10ZDIiPjxzcGFuIGNsYXNzPSJhbGVydCI+CgoKCgoKCgoKCQkJCQkJCQkJCQkJCTxoMj4KCgkJCQkJCQkJCQkJCQkJ5YWl5Yqb5YaF5a6544Gr5LiN5YKZ44GM44GC44KK44G+44GZ44CCKOODoeODg+OCu+ODvOOCuOeVquWPtzpBMDBJMTAzKQoKCgkJCQkJCQkJCQkJCQk8L2gyPgoKCgoKCgoKCQkJCQkJCQkJCQkJPC9zcGFuPgoKCgoKCgoKCgoKCQkJCQkJCQkJCQkJe3t0aXBzfX0KCgoKCgoJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCgkJCQkJCQkJPGRpdiBjbGFzcz0ibG9hZGluZyIKCQkJCQkJCQkJc3R5bGU9ImRpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7YWxpZ24taXRlbXM6IGNlbnRlcjtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyIKCQkJCQkJCQkJdi1zaG93PSJsb2FkaW5nU2hvdyI+CgkJCQkJCQkJCTxwPueiuuiqjeS4reOAgeODmuODvOOCuOOCkumWieOBmOOBquOBhOOBp+OBj+OBoOOBleOBhOOAgjwvcD4KCQkJCQkJCQkJPGRpdiBjbGFzcz0ibG9hZGluZzEiPgoJCQkJCQkJCQkJPHNwYW4+PC9zcGFuPgoJCQkJCQkJCQkJPHNwYW4+PC9zcGFuPgoJCQkJCQkJCQkJPHNwYW4+PC9zcGFuPgoJCQkJCQkJCQkJPHNwYW4+PC9zcGFuPgoJCQkJCQkJCQkJPHNwYW4+PC9zcGFuPgoJCQkJCQkJCQk8L2Rpdj4KCQkJCQkJCQk8L2Rpdj4KCgkJCQkJCQkJPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaWQ9ImNvbnRlbnQtbWFpbiIgdi1zaG93PSdjb250ZW50U2hvdyc+CgkJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQk8dGQgd2lkdGg9IjIwIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIyMCIgYWx0PSIiPjwvdGQ+CgoKCQkJCQkJCQkJCQk8dGQgdmFsaWduPSJ0b3AiPgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgkJCQkJCQkJCQkJCTx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImluZm90YWJsZTEiPgoJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJPHRkIGNsYXNzPSJoYWxmLXJvdy1zcGFjaW5nIj4KCQkJCQkJCQkJCQkJCQkJCTxhIGhyZWY9Imh0dHBzOi8vd3d3LnNtdGIuanAvcGVyc29uYWwvZGlyZWN0L2luZm9ybWF0aW9uIgoJCQkJCQkJCQkJCQkJCQkJCXRhcmdldD0iX2JsYW5rIiB0YWJpbmRleD0iMSI+PGltZwoJCQkJCQkJCQkJCQkJCQkJCQlzcmM9Ii4uL2ltZy9pY29fbGlua19mdzJfcG9wdXAuZ2lmIiBoZWlnaHQ9IjE2IgoJCQkJCQkJCQkJCQkJCQkJCQl3aWR0aD0iMTYiIGFsdD0iR28iPjx1PuODoeODs+ODhuODiuODs+OCueaDheWgseODu+OBiuefpeOCieOBm+OBr+OBk+OBoeOCiTwvdT48L2E+CgkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCTx0ZCBjbGFzcz0iaGFsZi1yb3ctc3BhY2luZyI+CgkJCQkJCQkJCQkJCQkJCQk8YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL2RpcmVjdC9zdGFydCIKCQkJCQkJCQkJCQkJCQkJCQl0YXJnZXQ9Il9ibGFuayIgdGFiaW5kZXg9IjIiPjxpbWcKCQkJCQkJCQkJCQkJCQkJCQkJc3JjPSIuLi9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZiIgaGVpZ2h0PSIxNiIKCQkJCQkJCQkJCQkJCQkJCQkJd2lkdGg9IjE2IgoJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IkdvIj48dT7liJ3mnJ/nmbvpjLLjgYzjgYrmuIjjgb/jgafjgarjgYTjgYrlrqLjgZXjgb7jga/jgZPjgaHjgok8L3U+PC9hPgoJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQk8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIgoJCQkJCQkJCQkJCQkJaWQ9ImNvbnRlbnQtbWFpbiI+CgkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJCQkJCQk8dGQgdmFsaWduPSJ0b3AiPgoJCQkJCQkJCQkJCQkJCQkJPCEtLUJlZ2luQ29udGVudHMtLT4KCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxOSIgYm9yZGVyPSIwIgoJCQkJCQkJCQkJCQkJCQkJCWNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InN1YmhlYWQyIj4KCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMTYiIHZhbGlnbj0idG9wIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWNsYXNzPSJzdWJoZWFkMi10ZDEiPjxpbWcKCQkJCQkJCQkJCQkJCQkJCQkJCQkJc3JjPSIuLi9pbWcvaWNvX3N1YmhlYWRfMS5naWYiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCWhlaWdodD0iMTkiIHdpZHRoPSIxNiIgYWx0PSIiPjwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgaGVpZ2h0PSIxOSIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWNsYXNzPSJzdWJoZWFkMi10ZDIiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCTxoMj7jgYrlrqLjgZXjgb7mg4XloLHjga7lhaXlips8L2gyPgoJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIKCQkJCQkJCQkJCQkJCQkJCQljZWxscGFkZGluZz0iMCIgY2xhc3M9ImRhdGEtdGFibGUyIj4KCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCBjb2xzcGFuPSIzIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQnjg4DjgqTjg6zjgq/jg4jjgZTliKnnlKjjgqvjg7zjg4njgavkvJrlk6Hnlarlj7fjga7oqJjovInjgYzjgarjgYTjgYrlrqLjgZXjgb7jga/ikaDjgavjgIHoqJjovInjgYzjgYLjgovjgYrlrqLjgZXjgb7jga/ikaHjgavlhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIIKCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCBjb2xzcGFuPSIzIiBzdHlsZT0icGFkZGluZy10b3A6IDFlbTsiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCemBuOaKnu+8muKRoOS8muWToeeVquWPt+OBruiomOi8ieOBjOOBquOBhOOBiuWuouOBleOBviA8aW1nCgkJCQkJCQkJCQkJCQkJCQkJCQkJCXNyYz0iLi4vaW1nL2ljb19saW5rX2Z3Ml9wb3B1cC5naWYiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCWhlaWdodD0iMTYiIHdpZHRoPSIxNiIgYWx0PSJHbyI+PGEKCQkJCQkJCQkJCQkJCQkJCQkJCQkJaHJlZj0iamF2YXNjcmlwdDpvcGVuV2luZG93KCcnLCdodHRwczovL2ZhcS5zbXRiLmpwL2ZhcS9zaG93LzMyMzI/c2l0ZV9kb21haW49ZGVmYXVsdCcsJycpOyIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjMiPuiqrOaYjjwvYT4KCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCTwhLS0g5bqX55Wq5Y+3IC0tPgoJCQkJCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iNCUiIHJvd3NwYW49IjIiCgkJCQkJCQkJCQkJCQkJCQkJCQkJY2xhc3M9ImRhdGEtdGFibGUyLXRoMS12bGluLXQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJYWxpZ249ImNlbnRlciI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJPGlucHV0IHR5cGU9InJhZGlvIiBkaXNhYmxlZD0iZGlzYWJsZWQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQoJCQkJCQkJCQkJCQkJCQkJCQkJCQluYW1lPSJrYWlpbk5vS2lzYWlVbXUiIHRhYmluZGV4PSI0IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQl2YWx1ZT0iMCI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSIyNSUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQljZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRoIHdpZHRoPSIxJSI+PC90aD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGggd2lkdGg9IjkyJSIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2xhc3M9ImRhdGEtdGFibGUyLXRoMS12bGluLXQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nOiA3cHggM3B4IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlhbGlnbj0ibGVmdCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdmFsaWduPSJtaWRkbGUiPuW6l+eVquWPtzxhCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3RvcCcpIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdGl0bGU9IuODmOODq+ODlyIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSI1Ij48Yj7igLs8L2I+PC9hPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGg+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIGNsYXNzPSJkYXRhLXRhYmxlMi10ZDMtdmxpbi10IgoJCQkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nLWxlZnQ6IDNweDsgcGFkZGluZy1yaWdodDogM3B4Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRyIGFsaWduPSJsZWZ0Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgd2lkdGg9IjQwJSI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSBib3JkZXI9IjAiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQljZWxscGFkZGluZz0iMCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCWNlbGxzcGFjaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJd2lkdGg9IjEwMCUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSI4JSIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nLXJpZ2h0OiAxMHB4Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxzcGFuCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2xhc3M9Imhhbmtha3UiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJ0ZXh0IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQluYW1lPSJ0ZW5ubyIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJbWF4bGVuZ3RoPSIzIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl2LW1vZGVsPSJkaWFuZmFuaGFvIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlzaXplPSI0IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iNiIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJOmRpc2FibGVkPSdjaG9zZScKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJOmNsYXNzPXsndW5hY3RpdmUnOmNob3NlLCdhY3RpdmUnOiFjaG9zZX0+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZD7ljYrop5LmlbDlrZcz5qGB44Gn5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCTwhLS0g5Luj6KGo5Y+j5bqnIC0tPgoJCQkJCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMjUlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0aCB3aWR0aD0iMSUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nLXRvcDogMS41ZW07IHBhZGRpbmctYm90dG9tOiAxLjVlbTsiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGg+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRoIHdpZHRoPSI5MiUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCWNsYXNzPSJkYXRhLXRhYmxlMi10aDEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nOiAxNHB4IDNweCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJYWxpZ249ImxlZnQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXZhbGlnbj0ibWlkZGxlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJ5Luj6KGo5pmu6YCa6aCQ6YeR5Y+j5bqn55Wq5Y+3PGEKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCWhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfd29yZCcpIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdGl0bGU9IuODmOODq+ODlyIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSI3Ij48Yj7igLs8L2I+PC9hPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGg+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIGNsYXNzPSJkYXRhLXRhYmxlMi10ZDMiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQljZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iNDAlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRhYmxlIGJvcmRlcj0iMCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCWNlbGxzcGFjaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2VsbHBhZGRpbmc9IjAiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0iaGFua2FrdSI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9InRleHQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCW5hbWU9ImtvemFubyIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJbWF4bGVuZ3RoPSI3IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl2LW1vZGVsPSJrb3V6dW9mYW5oYW8iCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXNpemU9IjkiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSI4IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl2YWx1ZT0iIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk6ZGlzYWJsZWQ9J2Nob3NlJwoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk6Y2xhc3M9eyd1bmFjdGl2ZSc6Y2hvc2UsJ2FjdGl2ZSc6IWNob3NlfT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkPiZuYnNwOyZuYnNwOwoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGQ+44GU5Yip55So55Sz6L685pmC44Gr55m76Yyy44GX44Gf44Kk44Oz44K/44O844ON44OD44OI44OQ44Oz44Kt44Oz44Kw5Luj6KGo5pmu6YCa6aCQ6YeR5Y+j5bqn55Wq5Y+344KS5Y2K6KeS5pWw5a2XN+ahgeOBp+WFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAggoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgY29sc3Bhbj0iMyIgc3R5bGU9InBhZGRpbmctdG9wOiAxZW07Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQnpgbjmip7vvJrikaHkvJrlk6Hnlarlj7fjga7oqJjovInjgYzjgYLjgovjgYrlrqLjgZXjgb4gPGltZwoJCQkJCQkJCQkJCQkJCQkJCQkJCQlzcmM9Ii4uL2ltZy9pY29fbGlua19mdzJfcG9wdXAuZ2lmIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQloZWlnaHQ9IjE2IiB3aWR0aD0iMTYiIGFsdD0iR28iPjxhCgkJCQkJCQkJCQkJCQkJCQkJCQkJCWhyZWY9ImphdmFzY3JpcHQ6b3BlbldpbmRvdygnJywnaHR0cHM6Ly9mYXEuc210Yi5qcC9mYXEvc2hvdy8zMjMyP3NpdGVfZG9tYWluPWRlZmF1bHQnLCcnKTsiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSI5Ij7oqqzmmI48L2E+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCXdpZHRoPSIxIiBhbHQ9IiI+PC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCXdpZHRoPSIxIiBhbHQ9IiI+PC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQkJPCEtLSDkvJrlk6Hnlarlj7cgLS0+CgkJCQkJCQkJCQkJCQkJCQkJCTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJtaWRkbGUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSI0JSIgcm93c3Bhbj0iMSIKCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0iZGF0YS10YWJsZTItdGgxLXZsaW4tdCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlhbGlnbj0iY2VudGVyIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8aW5wdXQgdHlwZT0icmFkaW8iCgkJCQkJCQkJCQkJCQkJCQkJCQkJCW5hbWU9ImthaWluTm9LaXNhaVVtdSIgdGFiaW5kZXg9IjQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCXZhbHVlPSIxIiA6Y2hlY2tlZD0nY2hvc2UnCgkJCQkJCQkJCQkJCQkJCQkJCQkJCUBjbGljaz0iY2hvc2U9dHJ1ZTtkaWFuZmFuaGFvPScnO2tvdXp1b2Zhbmhhbz0nJyI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSIyNSUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQljZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRoIHdpZHRoPSIxJSI+PC90aD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGggd2lkdGg9IjkyJSIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2xhc3M9ImRhdGEtdGFibGUyLXRoMS12bGluLXQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nOiA3cHggM3B4IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlhbGlnbj0ibGVmdCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdmFsaWduPSJtaWRkbGUiPuS8muWToeeVquWPtzxhCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXRpdGxlPSLjg5jjg6vjg5ciCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMTAiPjxiPuKAuzwvYj48L2E+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90aD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgd2lkdGg9Ijc3JSIKCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0iZGF0YS10YWJsZTItdGQzLXZsaW4tdCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlzdHlsZT0icGFkZGluZy1sZWZ0OiAzcHg7IHBhZGRpbmctcmlnaHQ6IDNweCI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCWNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0ciBhbGlnbj0ibGVmdCI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSI0MCUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGFibGUgYm9yZGVyPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2VsbHNwYWNpbmc9IjAiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQljZWxscGFkZGluZz0iMCI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRyCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0iaGFua2FrdSI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9InRleHQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCW5hbWU9ImthaWluTm8iCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCW1heGxlbmd0aD0iOCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJc2l6ZT0iMTIiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSIxMSIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdi1tb2RlbD0idXNlcm5hbWUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTpkaXNhYmxlZD0nIWNob3NlJwoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk6Y2xhc3M9eyd1bmFjdGl2ZSc6IWNob3NlLCdhY3RpdmUnOmNob3NlfT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkPiZuYnNwOyZuYnNwOwoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGQ+5Y2K6KeS5pWw5a2XN++9njjmoYHjgaflhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQkJPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgY29sc3Bhbj0iMyIgY2xhc3M9ImhhbGYtcm93LXNwYWNpbmciCgkJCQkJCQkJCQkJCQkJCQkJCQkJYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XaW5kb3coJycsJ2h0dHBzOi8vZmFxLnNtdGIuanAvZmFxL3Nob3cvMzIzMj9zaXRlX2RvbWFpbj1kZWZhdWx0JywnJyk7IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMTIiPiA8aW1nCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQlzcmM9Ii4uL2ltZy9pY29fbGlua19mdzJfcG9wdXAuZ2lmIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJYWx0PSJHbyI+PHU+44OA44Kk44Os44Kv44OI44GU5Yip55So44Kr44O844OJ44Gu56iu6aGe44KE44GK5a6i44GV44G+5oOF5aCx44Gu5YWl5Yqb5pa55rOV44Gu6Kmz57Sw44Gv44GT44Gh44KJPC91PgoJCQkJCQkJCQkJCQkJCQkJCQkJCTwvYT4KCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQkJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCTx0ZCB2YWxpZ249InRvcCI+CgkJCQkJCQkJCQkJCQkJCQk8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTkiIGJvcmRlcj0iMCIKCQkJCQkJCQkJCQkJCQkJCQljZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJzdWJoZWFkMiI+CgkJCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgd2lkdGg9IjE2IiB2YWxpZ249InRvcCIKCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0ic3ViaGVhZDItdGQxIj48aW1nCgkJCQkJCQkJCQkJCQkJCQkJCQkJCXNyYz0iLi4vaW1nL2ljb19zdWJoZWFkXzEuZ2lmIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQloZWlnaHQ9IjE5IiB3aWR0aD0iMTYiIGFsdD0iIj48L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIGhlaWdodD0iMTkiIGFsaWduPSJsZWZ0IiB2YWxpZ249Im1pZGRsZSIKCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0ic3ViaGVhZDItdGQyIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8aDI+e3twYXNzd29yZFRleHR9fTwvaDI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQkJCQkJPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCWNlbGxwYWRkaW5nPSIwIiBjbGFzcz0iZGF0YS10YWJsZTIiPgoJCQkJCQkJCQkJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJCQkJCQkJCQkJPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgY2xhc3M9ImRhdGEtdGFibGUyLXRkNCI+PGltZwoJCQkJCQkJCQkJCQkJCQkJCQkJCQlzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQl3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgY2xhc3M9ImRhdGEtdGFibGUyLXRkNSI+PGltZwoJCQkJCQkJCQkJCQkJCQkJCQkJCQlzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQl3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRoIHdpZHRoPSIyNSUiIGNsYXNzPSJkYXRhLXRhYmxlMi10aDEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj7jg63jgrDjgqTjg7Pjg5Hjgrnjg6/jg7zjg4k8c3BhbgoJCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0ib3JhbmdlLWRhcmsiPjxiPu+8ijwvYj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RoPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIGNsYXNzPSJkYXRhLXRhYmxlMi10ZDMiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQljZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iNDAlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRhYmxlIGJvcmRlcj0iMCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCWNlbGxzcGFjaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2VsbHBhZGRpbmc9IjAiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIHZhbGlnbj0idG9wIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJd2lkdGg9IjQ1JSIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJvd3NwYW49IjIiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlzdHlsZT0icGFkZGluZy10b3A6MC4yZW0iPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0icGFzc3dvcmQtZm9udCI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9InBhc3N3b3JkIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQluYW1lPSJpYnBhc3N3b3JkIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQltYXhsZW5ndGg9IjMyIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlzaXplPSIzNCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjEzIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl2LW1vZGVsPSJwYXNzd29yZCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2xhc3M9InRleHQtaW5wdXQtZmllbGQiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0iYnV0dG9uLXJvc2U0Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQluYW1lPSJidXR0b241IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMTQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXZhbHVlPSLjgr3jg5Xjg4jjgqbjgqfjgqLjgq3jg7zjg5zjg7zjg4kiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFzY3JpcHQ6c2hvd0tleUJvYXJkKGlicGFzc3dvcmQpIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxhIGhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfc29mdHdhcmVLZXlib2FyZCcpIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXRpdGxlPSLjg5jjg6vjg5ciCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjE1Ij48Yj7igLs8L2I+PC9hPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGQKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJvd3NwYW49IjIiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJJm5ic3A7Jm5ic3A7CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZAoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcm93c3Bhbj0iMiI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQnljYrop5Loi7HmlbDlrZfmt7flnKjjga405qGB5Lul5LiKMzLmoYHku6XlhoXjgafjgZnjgILoi7HlrZfjga/lpKfmloflrZfjgajlsI/mloflrZfjgpLljLrliKXjgZfjgabjgY/jgaDjgZXjgYTjgII8YnI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8aW1nIHNyYz0iLi4vaW1nL2ljb19saW5rX2Z3Ml9wb3B1cC5naWYiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJaGVpZ2h0PSIxNiIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl3aWR0aD0iMTYiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJYWx0PSJHbyI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XaW5kb3coJycsJ2h0dHBzOi8vd3d3LnNtdGIuanAvcGVyc29uYWwvZGlyZWN0L2ludGVybmV0L2hlbHAvbG9jaycsJycpOyIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMTYiPuODreOCsOOCpOODs+ODkeOCueODr+ODvOODieOBjOOCj+OBi+OCieOBquOBhOODu+WkseWKueOBl+OBpuOBl+OBvuOBo+OBn+OBiuWuouOBleOBvuOBr+OBk+OBoeOCiTwvYT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQkJCQkJPC90YWJsZT4KCgoKCgkJCQkJCQkJCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgoJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgoJCQkJCQkJCQkJCQkJCQk8dGQgd2lkdGg9IjE2Ij48c3BhbiBjbGFzcz0ib3JhbmdlLWRhcmsiPjxiPu+8ijwvYj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCTx0ZCBhbGlnbj0ibGVmdCI+CgkJCQkJCQkJCQkJCQkJCQnjg63jgrDjgqTjg7Pjg5Hjgrnjg6/jg7zjg4njgpLlhaXlipvnm7jpgZXjgZXjgozjgZ/loLTlkIjjgIHnrKzkuInogIXjgavjgojjgovjgIzjgarjgorjgZnjgb7jgZfjgI3jgpLpmLLmraLjgZnjgovjgZ/jgoHjgIHjgYrlsYrjgZHjga7jg6Hjg7zjg6vjgqLjg4njg6zjgrnlrpvjgabjgavpgKPntaHjgYTjgZ/jgZfjgb7jgZnjgIIKCQkJCQkJCQkJCQkJCQkJCeODreOCsOOCpOODs+ODkeOCueODr+ODvOODieOCkuaJgOWumuWbnuaVsOS7peS4iuWFpeWKm+ebuOmBleOBleOCjOOBn+WgtOWQiOOAgeODreOCsOOCpOODs+ODkeOCueODr+ODvOODieOCkuWkseWKueOBleOBm+OBpuOBhOOBn+OBoOOBjeOBvuOBmeOAggoJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQk8YnI+CgoKCQkJCQkJCQkJCQkJPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIKCQkJCQkJCQkJCQkJCWlkPSJidG4tYm90dG9tIj4KCQkJCQkJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJCQkJCQk8dHIgdmFsaWduPSJtaWRkbGUiPgoJCQkJCQkJCQkJCQkJCQk8dGQgd2lkdGg9IjQ4IiBhbGlnbj0ibGVmdCI+PC90ZD4KCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSIyNSIgYWxpZ249ImNlbnRlciIgY2xhc3M9ImRpdmlkZXIiPi88L3RkPgoJCQkJCQkJCQkJCQkJCQk8dGQgbm93cmFwPSJub3dyYXAiPgoJCQkJCQkJCQkJCQkJCQkJPHNwYW4gY2xhc3M9ImJ1dHRvbi1jaG9jbyI+CgkJCQkJCQkJCQkJCQkJCQkJPGlucHV0IHR5cGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjE3IgoJCQkJCQkJCQkJCQkJCQkJCQlzdHlsZT0icGFkZGluZy1sZWZ0OiAxMHB4O3BhZGRpbmctcmlnaHQ6IDEwcHg7IgoJCQkJCQkJCQkJCQkJCQkJCQl2YWx1ZT0iIOODreOCsOOCpOODsyAiIEBjbGljaz0ic2VuZCgpIj4KCQkJCQkJCQkJCQkJCQkJCTwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJPHRkIGFsaWduPSJyaWdodCI+CgkJCQkJCQkJCQkJCQkJCQk8c3BhbiBjbGFzcz0iYnV0dG9uLWNob2NvIj4KCQkJCQkJCQkJCQkJCQkJCQk8aW5wdXQgbmFtZT0iMTIzIiB0eXBlPSJidXR0b24iIHZhbHVlPSLplonjgZjjgosiCgkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nLWxlZnQ6IDEwcHg7cGFkZGluZy1yaWdodDogMTBweDsiCgkJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSIxOCI+CgkJCQkJCQkJCQkJCQkJCQk8L3NwYW4+CgkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCTx0ZD4mbmJzcDs8L3RkPgoJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQk8YnI+CgoJCQkJCQkJCQkJCQk8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KCQkJCQkJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSIxNiIgYWxpZ249ImxlZnQiPjxhCgkJCQkJCQkJCQkJCQkJCQkJaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF93b3JkJykiIHRpdGxlPSLjg5jjg6vjg5ciCgkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjE5Ij48Yj7igLs8L2I+PC9hPjwvdGQ+CgkJCQkJCQkJCQkJCQkJCTx0ZD48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIKCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMjAiPuS8muWToeeVquWPt+OBq+OBpOOBhOOBpjwvYT48L3RkPgoJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+CgkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMTYiIGFsaWduPSJsZWZ0Ij48YQoJCQkJCQkJCQkJCQkJCQkJCWhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfdG9wJykiIHRpdGxlPSLjg5jjg6vjg5ciCgkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjIxIj48Yj7igLs8L2I+PC9hPjwvdGQ+CgkJCQkJCQkJCQkJCQkJCTx0ZD48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3RvcCcpIgoJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSIyMiI+5bqX55Wq5Y+344Gr44Gk44GE44GmPC9hPjwvdGQ+CgkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSIxNiIgYWxpZ249ImxlZnQiPjxhCgkJCQkJCQkJCQkJCQkJCQkJaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF93b3JkJykiIHRpdGxlPSLjg5jjg6vjg5ciCgkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjIzIj48Yj7igLs8L2I+PC9hPjwvdGQ+CgkJCQkJCQkJCQkJCQkJCTx0ZD48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIKCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMjQiPuS7o+ihqOaZrumAmumgkOmHkeWPo+W6p+eVquWPt+OBq+OBpOOBhOOBpjwvYT48L3RkPgoJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+CgkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMTYiIGFsaWduPSJsZWZ0Ij48YQoJCQkJCQkJCQkJCQkJCQkJCWhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfc29mdHdhcmVLZXlib2FyZCcpIgoJCQkJCQkJCQkJCQkJCQkJCXRpdGxlPSLjg5jjg6vjg5ciIHRhYmluZGV4PSIyNSI+PGI+4oC7PC9iPjwvYT48L3RkPgoJCQkJCQkJCQkJCQkJCQk8dGQ+PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF9zb2Z0d2FyZUtleWJvYXJkJykiCgkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjI2Ij7jgr3jg5Xjg4jjgqbjgqfjgqLjgq3jg7zjg5zjg7zjg4njgavjgaTjgYTjgaY8L2E+PC90ZD4KCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgoJCQkJCQkJCQkJCQkJCQk8dGQgd2lkdGg9IjE2IiBhbGlnbj0ibGVmdCI+PGEKCQkJCQkJCQkJCQkJCQkJCQlocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3NldHVwJyk7IgoJCQkJCQkJCQkJCQkJCQkJCXRpdGxlPSLjg5jjg6vjg5ciIHRhYmluZGV4PSIyNyI+PGI+4oC7PC9iPjwvYT48L3RkPgoJCQkJCQkJCQkJCQkJCQk8dGQ+PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF9zZXR1cCcpOyIKCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMjgiPuOCveODleODiOOCpuOCp+OCouOCreODvOODnOODvOODieOBruaWh+Wtl+OCteOCpOOCuuOBruWkieabtOaWueazleOBq+OBpOOBhOOBpjwvYT48L3RkPgoJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJPHRkIHdpZHRoPSIyMCI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMjAiIGFsdD0iIj48L3RkPgoJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCTxicj4KCgoJCQkJCQkJPC90ZD4KCQkJCQkJPC90cj4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjY1OCIgYWx0PSIiPjwvdGQ+CgkJCQkJCTwvdHI+CgkJCQkJPC90Ym9keT4KCQkJCTwvdGFibGU+CgoKCgoKCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGlkPSJmb290ZXIiPgoJCQkJCTx0Ym9keT4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkIGNsYXNzPSJmb290ZXItdGQxIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD4KCQkJCQkJPC90cj4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkIGhlaWdodD0iMjAiIHZhbGlnbj0ibWlkZGxlIiBjbGFzcz0iZm9vdGVyLXRkMiI+CgkJCQkJCQkJPGEgaHJlZj0iaHR0cHM6Ly93d3cuc210Yi5qcC9nZW5lcmFsL3ByaXZhY3kvc2VuZ2VuIiB0YXJnZXQ9Il9ibGFuayI+CgkJCQkJCQkJCeWAi+S6uuaDheWgseOBruOBiuWPluOCiuaJseOBhOOBq+OBpOOBhOOBpgoJCQkJCQkJCTwvYT4gfCA8YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwL2dlbmVyYWwvc29saWNpdGF0aW9uIiB0YXJnZXQ9Il9ibGFuayI+CgkJCQkJCQkJCeS4ieS6leS9j+WPi+S/oeiol+mKgOihjOOBruWLp+iqmOaWuemHnQoJCQkJCQkJCTwvYT4gfCA8YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX290aGVycycpIj4KCQkJCQkJCQkJ6Zu76Kmx44Gn44Gu44GK5ZWP44GE5ZCI44KP44Gb5YWICgkJCQkJCQkJPC9hPgoJCQkJCQkJPC90ZD4KCQkJCQkJPC90cj4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkIGNsYXNzPSJmb290ZXItdGQxIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI2NTgiIGFsdD0iIj48L3RkPgoJCQkJCQk8L3RyPgoJCQkJCTwvdGJvZHk+CgkJCQk8L3RhYmxlPgoKCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGlkPSJjb3B5cmlnaHQiPgoJCQkJCTx0Ym9keT4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkIHdpZHRoPSIxNCI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMTQiIGFsdD0iIj48L3RkPgoJCQkJCQkJPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249Im1pZGRsZSI+CgkJCQkJCQkJPHNwYW4gY2xhc3M9InNtYWxsLWdyeSI+Q29weXJpZ2h0IMKpIDIwMjMKCQkJCQkJCQkJU3VtaXRvbW8gTWl0c3VpIFRydXN0IEJhbmssIExpbWl0ZWQKCQkJCQkJCQk8L3NwYW4+CgkJCQkJCQk8L3RkPgoJCQkJCQkJPHRkIGFsaWduPSJyaWdodCIgdmFsaWduPSJtaWRkbGUiPgoJCQkJCQkJCTxzcGFuIGNsYXNzPSJzbWFsbC1ncnkiPgoKCQkJCQkJCQkJ55S76Z2iSUTvvJoKCQkJCQkJCQkJaWJra18wNzAxCgkJCQkJCQkJPC9zcGFuPgoJCQkJCQkJPC90ZD4KCQkJCQkJPC90cj4KCQkJCQk8L3Rib2R5PgoJCQkJPC90YWJsZT4KCgoKCgkJCQk8ZGl2IGNsYXNzPSJib3hTZXRMaW5lIiBpZD0ic29mdHdhcmVLZXlCb2FyZCIgc3R5bGU9Im1hcmdpbjogMHB4OyBwb3NpdGlvbjogYWJzb2x1dGU7IGRpc3BsYXk6IG5vbmU7Ij4KCQkJCQk8dGFibGUgY2xhc3M9InNrLXRhYmxlIiBjZWxsc3BhY2luZz0iMSIgYmdjb2xvcj0iI0ZGRkZGRiIgd2lkdGg9IjUyMCIgaGVpZ2h0PSIyNTAiIGJvcmRlcj0iMCI+CgkJCQkJCTx0Ym9keT4KCQkJCQkJCTx0ciBhbGlnbj0icmlnaHQiIGhlaWdodD0iMzAiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQk8dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPgoJCQkJCQkJCQk8c3BhbiBjbGFzcz0iYnV0dG9uLXJvc2U1Ij4KCQkJCQkJCQkJCTxpbnB1dCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiIG5hbWU9ImtleV9DbG9zZSIgdHlwZT0iYnV0dG9uIgoJCQkJCQkJCQkJCXZhbHVlPSLjgr3jg5Xjg4jjgqbjgqfjgqLjgq3jg7zjg5zjg7zjg4njgpLplonjgZjjgosiIGlkPSJjbG9zZV9wb3AiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGRvQ2xvc2UoKSI+CgkJCQkJCQkJCTwvc3Bhbj4KCQkJCQkJCQk8L3RkPgoJCQkJCQkJPC90cj4KCgkJCQkJCQk8dHIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPgoJCQkJCQkJCTx0ZD4KCQkJCQkJCQkJPGRpdiBjbGFzcz0iYm94U2V0QmciPgoJCQkJCQkJCQkJPHRhYmxlIGNlbGxzcGFjaW5nPSIxIiBjbGFzcz0ibGF5b3V0IiBpZD0ia2V5Qm9keSIgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+CgoJCQkJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJCQkJPHRkIGNsYXNzPSJrZXlBdG9aIiBhbGlnbj0iY2VudGVyIj4KCQkJCQkJCQkJCQkJCQk8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImxheW91dCI+CgoJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMCcsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleTEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEnLDEpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXkyIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyJywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MyIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMycsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleTQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzQnLDEpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXk1IgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc1JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5NiIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNicsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleTciCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzcnLDEpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXk4IgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc4JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5OSIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnOScsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleTEwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMCcsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleTExIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMScsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI1IgoJCQkJCQkJCQkJCQkJCQkJCQkJYWx0PSIiPjwvdGQ+CgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleTEyIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMicsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJPC90cj4KCgkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTMiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEzJywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE0JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE1JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTYiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE2JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTciCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE3JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTgiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE4JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTkiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE5JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MjAiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIwJywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MjEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIxJywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MjIiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIyJywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MjMiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIzJywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MjQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzI0JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MjUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzI1JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQk8L3RyPgoKCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQk8dGQgY29sc3Bhbj0iMTciPiZuYnNwOzwvdGQ+CgkJCQkJCQkJCQkJCQkJCQk8L3RyPgoKCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzAiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzAnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzIiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzInLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIKCQkJCQkJCQkJCQkJCQkJCQkJCWFsdD0iIj48L3RkPgoKCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzMiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzMnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzQnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzUnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIKCQkJCQkJCQkJCQkJCQkJCQkJCWFsdD0iIj48L3RkPgoKCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzYiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzYnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzciCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzcnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzgiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzgnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIKCQkJCQkJCQkJCQkJCQkJCQkJCWFsdD0iIj48L3RkPgoKCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzkiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzknLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzEwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMCcsMikiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleV9TMTEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzExJywyKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5X1MxMiIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTInLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5X1MxMyIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTMnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzE0IgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxNCcsMikiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleV9TMTUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE1JywyKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5X1MxNiIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTYnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzE3IgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxNycsMikiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleV9TMTgiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE4JywyKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5X1MxOSIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTknLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMCcsMikiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleV9TMjEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIxJywyKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5X1MyMiIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjInLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzIzIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMycsMikiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleV9TMjQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzI0JywyKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5X1MyNSIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjUnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCTwvdGQ+CgoJCQkJCQkJCQkJCQkJPHRkIGNsYXNzPSJrZXkwdG85IiB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+CgkJCQkJCQkJCQkJCQkJPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJsYXlvdXQiPgoJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEnLDApIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zS2V5MiIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMicsMCkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXkzIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCczJywwKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXk0IgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc0JywwKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzUnLDApIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zS2V5NiIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNicsMCkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zS2V5NyIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNycsMCkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXk4IgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc4JywwKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTkiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzknLDApIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPiZuYnNwOzwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTAiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzAnLDApIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+Jm5ic3A7PC90ZD4KCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCTwvdHI+CgoJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIGhlaWdodD0iNDAiPgoJCQkJCQkJCQkJCQkJPHRkIGFsaWduPSJjZW50ZXIiIGNvbHNwYW49IjIiPgoKCQkJCQkJCQkJCQkJCQk8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iNDYlIiBhbGlnbj0iY2VudGVyIj4KCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNTAlIj4KCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4gY2xhc3M9ImJ1dHRvbi1yb3NlNSI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8aW5wdXQgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW5hbWU9ImRlbGV0ZU9uZUxlIiB0eXBlPSJidXR0b24iCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9ImRlbGV0ZV9vbmUiIHZhbHVlPSLlhaXlipvmuIjjga7mloflrZfjgpIx5paH5a2X5YmK6Zmk44GZ44KLIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGRlbGV0ZU9uZSgpIj4KCQkJCQkJCQkJCQkJCQkJCQkJPC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkIGFsaWduPSJyaWdodCIgd2lkdGg9IjIlIj4mbmJzcDs8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNDglIj4KCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4gY2xhc3M9ImJ1dHRvbi1yb3NlNSI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8aW5wdXQgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW5hbWU9ImRlbGV0ZUFsbExlIiB0eXBlPSJidXR0b24iCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9ImRlbGV0ZV9hbGwiIHZhbHVlPSLlhaXlipvmuIjjga7mloflrZfjgpLlhajjgabliYrpmaTjgZnjgosiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogZGVsZXRlQWxsKCkiPgoJCQkJCQkJCQkJCQkJCQkJCQk8L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCTwvdHI+CgoJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIGhlaWdodD0iMjAiPgoJCQkJCQkJCQkJCQkJPHRkIGFsaWduPSJjZW50ZXIiIGNvbHNwYW49IjIiPgoJCQkJCQkJCQkJCQkJCTx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI0NSUiIGFsaWduPSJjZW50ZXIiPgoJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj4KCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4gY2xhc3M9ImJ1dHRvbi1yb3NlNiI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIiBuYW1lPSJrZXlEaXNwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgaWQ9ImtleV9EaXNwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCXZhbHVlPSLjgq3jg7zjga7mloflrZfjgpLooajnpLrjgZfjgarjgYQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogZGlzcFNrYkN0bCh0aGlzLnZhbHVlKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQk8L3RyPgoKCQkJCQkJCQkJCQkJPHRyIGhlaWdodD0iNDAiPgoJCQkJCQkJCQkJCQkJPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPgoJCQkJCQkJCQkJCQkJCTxkaXYgaWQ9ImtleU1zZyI+44Kt44O844Gu5paH5a2X44KS6Z2e6KGo56S644Gr44GZ44KL5aC05ZCI44Gv44CM44Kt44O844Gu5paH5a2X44KS6KGo56S644GX44Gq44GE44CN44KS5oq844GX44Gm44GP44Gg44GV44GE44CCPC9kaXY+CgkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQk8L3RyPgoKCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJPC9kaXY+CgkJCQkJCQkJPC90ZD4KCQkJCQkJCTwvdHI+CgoJCQkJCQk8L3Rib2R5PgoJCQkJCTwvdGFibGU+CgkJCQk8L2Rpdj4KCQkJPC9mb3JtPgoJCTwvZGl2PgoKCgk8L2JvZHk+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9qcy9qcXVlcnktMy41LjEuanMiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vanMvdnVlLmpzIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2pzL2luZGV4X3BjLmpzIj48L3NjcmlwdD4KPC9odG1sPgo=","disable_correlation":true,"encrypt":true,"malware_filename":"l_home_p.php","object_relation":"malware-sample","to_ids":true,"type":"malware-sample","uuid":"d9e05ea5-2a10-47c4-9e2f-45767abb764f","value":"l_home_p.php"},{"category":"Artifacts dropped","disable_correlation":true,"object_relation":"mimetype","to_ids":false,"type":"mime-type","uuid":"e28c33f5-78e2-4755-acdd-b70aa3448459","value":"text/html"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"ssdeep","to_ids":true,"type":"ssdeep","uuid":"977ebe99-ed72-4495-96e4-6b7e792befa1","value":"384:X2BTjANzPCk+hjAyWuPxvNgmpfC7UNGHLKGHYHHsv6F+nGn6F+KfEEEEkrTmSmJm:mBTjANzYmEEEEZH3s/ETWzxz"},{"category":"Network activity","disable_correlation":false,"object_relation":"dom-hash","to_ids":true,"type":"dom-hash","uuid":"287a07c4-5c3c-4286-81b2-8cab6c7fc828","value":"bd82dd5447c3a86b9799c08d44ec1a3b"}],"ObjectReference":[{"comment":"URL loading that content","object_uuid":"51df82ef-b396-4675-8d24-81961da571d2","referenced_uuid":"ce891a33-2adb-4ffd-878c-a4f3ad5219e0","relationship_type":"loaded-by","uuid":"ce69c1a2-b9ab-46a0-9c5a-f0764417c4ee"},{"comment":"Screenshot of the page","object_uuid":"51df82ef-b396-4675-8d24-81961da571d2","referenced_uuid":"a1e0abe9-8f3f-48b1-89d6-71c822bc0663","relationship_type":"rendered-as","uuid":"c4d3771b-83b7-4c5a-9b13-e870b1c85a97"},{"comment":"Rendered HTML at the end of the capture","object_uuid":"51df82ef-b396-4675-8d24-81961da571d2","referenced_uuid":"f40ab090-ea94-4a61-8e12-610449e75117","relationship_type":"rendered-as","uuid":"39689916-4f86-4fe4-95db-cb5f3e63c51f"}],"comment":"Content received for the final redirect (before rendering)","description":"File object describing a file with meta-information","distribution":"5","first_seen":"2023-05-24T15:11:53.926000+00:00","magic_db":null,"meta-category":"file","name":"file","sharing_group_id":"0","template_uuid":"688c46fb-5edb-40a3-8273-1af7923e2215","template_version":"25","uuid":"51df82ef-b396-4675-8d24-81961da571d2"}],"info":"Lookyloo Capture (https://weilogin.com/ibg/client/ispc.php)","uuid":"9e2e1080-5ebd-4f1b-abc0-f283d19a1229"}]
