ImportExport
5.0.11
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Build for OTRS::ITSM 5 patch level 11.
Build for OTRS::ITSM 5 patch level 10.
Build for OTRS::ITSM 5 patch level 9.
Build for OTRS::ITSM 5 patch level 8.
Build for OTRS::ITSM 5 patch level 7.
Build for OTRS::ITSM 5 patch level 6.
Build for OTRS::ITSM 5 patch level 5.
Build for OTRS::ITSM 5 patch level 4.
Build for OTRS::ITSM 5 patch level 3.
Build for OTRS::ITSM 5 patch level 2.
Build for OTRS::ITSM 5.
Build for OTRS::ITSM 5 rc1.
Build for OTRS::ITSM 5 beta3.
Build for OTRS::ITSM 5 beta2.
Build for OTRS::ITSM 5 beta1.
The ImportExport package.
Das ImportExport Paket.
El paquete ImportExport.
Az ImportExport csomag.
5.0.x
</br>
<strong>ATTENTION</strong>
</br>
</br>
If you uninstall this package, all database tables that were created during installation will be deleted.
All data from these tables will be irrevocably lost!
</br>
</br>
((enjoy))</br>
</br>
</br>
<strong>ACHTUNG</strong>
</br>
</br>
Bei der Deinstallation werden die von diesem Paket angelegten Datenbank-Tabellen gelöscht.
Alle darin enthaltenen Daten gehen unwiderruflich verloren!
</br>
</br>
((enjoy))</br>
</br>
<br/>
<strong>ATENCIÓN</strong>
<br/>
<br/>
Si usted desinstala este paquete, todas las tablas de la base de datos que se crearon durante la instalación
del mismo, se eliminarán. ¡La totalidad de los datos que contenían dichas tablas, se perderá irrevocablemente!
<br/>
<br/>
((enjoy))<br/>
<br/>
</br>
<strong>FIGYELEM</strong>
</br>
</br>
Ha eltávolítja ezt a csomagot, akkor a telepítés során létrehozott összes adatbázistábla törlésre kerül.
Az ezekben a táblákban lévő összes adat visszavonhatatlanul el fog veszni!
</br>
</br>
((enjoy))</br>
</br>
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromBefore_2_0_3();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_91();
2016-06-22 16:08:45
opms.otrs.com
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acqUKUKIixcv1tbWBgUFWSyW2traixcvDh48WFyJNMl/+srKyt27d1sslvHjx0+dOnXgwIF6vb6goOD777/ftWtXbGxsREREh+fB2k8//bR9+/bGxsaIiIhf//rX1ou4A4Armc1m6TLa5nMMAHpcZWWlTcmuXbukq1P5zkeKO7z00kurV6/+9NNPjx079h//8R9vvvnm3LlzdTrdzJkzDx06FBER8cADD7z44otSmCkiIqK1tbW6uloIoVKp/P39L1y4IFf12Wef/frXvx46dOj7778vXQ0ajcb/9//+X35+vsVimTNnztq1a6VnQEv719TUPPnkk9u3b//DH/6wfv16qc76+no5INJhLGzYsGHnzp0TQsybN8/6kE616+A8CCGWLVu2Z8+e8vLyKVOmrFy58o477uiwn4mJiUII67vxNtkcbrPZZrvtnbfm5uann376nXfe8fHxWbdu3V/+8pcTJ07IDe3bty8jI6Oqqso6Btep+mWbN29OTU2VN8eNGzdu3Dj7obW0tMiX3FOmTGloaHBcLoRITk7etGnTCy+84PikoVd1+fbQuoYJEybcdtttoaGhly9f/vLLLwsLCz/55JPhw4eHh4eLnrjXk58I352kHl9f3/T09Ndee+3cuXO7du269957hRAff/xxWVlZaGhoenq6fcqLtwzNBbxg3aXGxkZhl0lkQ3pX2rMLnr3ixRdf3LZtm16vv+mmm26//XbrfaZPn37zzTe3trYePnz4n//85/r161966SUp2ORkK999911ZWdntt9/enSjGs3bs95k0aVJqaurgwYOtQyqLFy++6aabpBWjAgMDR40atWDBAiGE9ReM7LbbbktJSRk0aJC/v39MTMzMmTOFEHq9vs1y62yjb775pqWl5eabb77//vvVanVAQEBoaOiUKVOkRabkr1IpYHT27FlpJrYcRZLKpU2TyXT27FlhFV369ttvzWZzXFzcfffdN2jQIF9f30GDBs2ZM+e6664zmUzffPONM+dBdujQoTfffLOxsTE+Pt7m+YAA4GLSh2GbH1YA0NtmzpxpEwSRNk0m05YtW2bNmlVUVLRly5b09HQhRFZWVk5OjsFgOH36dHJyclZWlnTId999N3ny5PPnz5eVlSUkJMhpDlJVly5dKisre/rpp//0pz9J5atWrYqOji4pKTlx4kR0dPSqVaus9583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AUCAyMzMlAYgIQUAQcH5R0YBAAgryjo1rOoNAKprbm5WOwQAgIf4qhYAENbILgEAAACXiewSACB8ybKs/HYqM+MAAAAAjzEzDgAQvuw/3+63sUvd3d29vb1JSUmJiYn+aREAAADwNb6qBQCEL/8v6d3X12cwGMxms99aBAAAAHyNsUsAgPDl/0WXkpKSYmNj4+Li/NYiAHhAkiQhhDJ3WHX+DEaSpAC5agAILoxdAgCEL2Xskj+zSwkJCampqWSXAKglKyvLncP8k2Hp7e115zB/pnvcbyspKcmnkQBAcCG7BAAIX8rYJZb0BhA+mpqaHD/29fXdd999mZmZWVlZe/bsmThxouPeo0eP5ubmxsTElJeX2wvXrl07adIkjUYzf/78d955RymUJEmSpB07djgd39vbe+edd2q12ry8vFOnTimHCSFaW1tnzJih0WgyMzPvueced9JM586dmzlzplarXbVqldFodGz38OHDQojDhw9LknTFFVfYTykoKCgoKHDzziinK+HZDXVdOp3OYDBIX3KzCQAIYTxPAwDCl/9nxgFAQNm4caPZbK6urj5z5oxGo+no6HDcW1FRcerUqX379hUXF9sLt2zZcurUqa6urg0bNixatEgpVIb86PX6mpoax+PXr1+v0+mampoqKyuPHDliP7KkpGTbtm1ms7m+vn7u3LklJSXDhrpnz54DBw7U19cnJib+8pe/VArff//9mTNnFhUVCSEKCwvz8/P//Oc/20+x/zCoO4qKigYePNR1KTdK/pKbTQBACGNeMQAgfLW3t3d0dKSkpGRkZKgdS9C44YYbPvvss+zsbLUDwVecPHmyt7d3+vTpageCAGIwGGRZPnXqlBAiJydHr9c77s3Ozm5sbMzKyjpx4oROpxt4uiRJFoslKipKOKxGVFdX98ADD1RVVZlMpry8vMrKSvvbhOOKRfbtjIyMzz//XKm/tbU1IyNDKR81apRjJis9Pb2lpcXFtUiS1NDQkJOTI4To6OiYPHmy/fglS5bcdtttS5YsOXDgwMGDB//0pz95dLf+1ZDT+9Gg1zXokfC/mTNnlpaWzp07V+1AALCqNwAgjDF2yQM9PT06ne7RRx9VOxB8xd13311fX8/fCxx99tlnu3fvVrYbGxuVDaecSH9/v4salNSSo6VLly5btmzXrl06na6trW3YVZwcZ405tjt9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bzcYDPYKe3p6li1bNn78+Nzc3MLCwosXLzoF09nZuXLlysTExPvuu08pv+qqq5SwJQfuXLKLtoQQ586dmzlzplarXbVqldFodIxhqFaGuhtCiIMHD+bl5SUkJHzjG9946aWXJk6ceJnBAwErDDuTMWPGOJ3ocRjD3ighxKpVqzIzMydNmnTo0CF7IZ1JUJIBAIBvnD9/vra29uLFi2oH4k2zZs269tpr1Y4CzoqKimJiYtSOYkiJiYkXLlzwf7sDn3WFEFu3bn3xxRfT0tKKi4v3798fHR1t37tixYp3333XbDb39PQcOnTo5z//uX3X6dOnS0pKenp6rFbr888/39DQ4Fjnf/zHfzQ1Ncmy/OSTT/70pz+177rnnns++eQTZfvtt99es2aNUzDXX3/9nj17uru7h418WC7aEkI88sgj58+f7+zs/NWvfuV4XS5aHOpu7N69++abb66pqenr62tra/vv//5vnU53mcF7y8KFC1944QW1WsewKisrr776ao9Pr6iomDNnjhfjcV9YdSYuTvQgDNc3SpZlo9Fos9k++OCDhIQEbwV/mZTvBc1msyqtBy+ySwAA+Mq5c+dqa2sNBoPagXgT2aXARHZpUIO+ENo3bDab0zE6nc7xW9j09HTHcz/44INp06YtXLiwurraqc7m5mZlu7OzMzU11b4rMzPT/n7S19eXmZnpdKLRaHQz8mG5aEsIYX+D7erqcrquoVoc6m6MGzfO9d8m2SUMJcSyS/aNEOtMXJzoQRiub9T7778/derU+Pj4GTNmuLjJfkZ2yTPMjAMAwFdsNpsQIiKC/22BQDRwnsXkyZMdH5RbWloc9yYkJGg0moaGhkuXLg1VlSzLMTEx9nJZlpV+QAyxKnBCQoI7oZpMpmGPGbYtRXR0tJudkou7YW/IHe4EDwS1EOtMXLjMMAbeqBUrVtx7773t7e2HDx8etnU6kwDH8y4AAL5itVoF2SUgeCxatOiZZ545f/682Wz+4osvVq9ebd915syZNWvWvPjii8eOHdu/f399fb3jia+//npzc7MQYs+ePbfeequ9fPHixe+9956y/corr9x8881uRhIdHa0sTXLhwoUdO3bMnj172FNct7Vz586GhobOzs69e/cuXbrUnRiGuhtbt2699957u7q6bDbb2bNn9+7du2LFissMHggxQd2ZuOBxGENpaWmZ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ukYoCMJLL700YcIEvV5/zTXXvPzyy2PGjAnd8KOPPvryl7+cmZmp0+lCTy+AVEF2CQAA9AudTldSUiKKosPhaGpqUjscAOjG2LFju9Zayi2BQODpp5/+9re//dRTT+3atWvRokVKhzVr1jz++ONer/fcuXPTp09fs2aN3F5VVXX27Nnvfve7TqczGAxu3Lixqqrq4sWLypgVFRXHjh1rbW294YYbHnjgAWXADRs2bNiw4eLFi/X19WvWrNmwYUNYMLfddtvXv/71mpqa7du3y+1nz56VV0kh4jnkJUuWzJ071+fz2e32CRMmNDQ0dHtcsieffLKuru6555674447up6urhE+88wzzz333PPPP2+3248fP26325ubm0M3fPTRR59//nm/319WVhZ6egGkCpFidQAA0H/a29vl2qXCwkKz2ax2OGlr3759e/fufe2119QOBOgbTz/99KFDh/bt2zfwuxbF8EskpUUUxWAwKJfnKH0KCgpaWlqUzlarNTRH89577/3whz8cOnTopk2brr322tAx6+vrbTabIAitra0jRoyw2+3yquLi4kuXLmm1WkEQPB7P8OHD6+rqQjd0uVx6vT6eyLt14MCB2267zefzFRYWWq3WvXv3Tpo0qdvj+utf//qjH/2osrLyuuuue++997qerq4Rjhw58sSJE8XFxRHDEEXR6/XKh5zYgSTss88+mzRpUmNj48DsDkhj1C4BAIB+lJubK18+NTU1tbW1qR0OAPRK1zvOrrrqqtCKodDUkiAIer3eYDBUVVV1dnZGG0qSJJ1Op7RLkqTMghQxyRIxtdRVPE/tnDdvntfrdTqdf//73++4445Zs2bFc1x33nnnqlWrmpubDx48GHHYiBFGm9pJpqSWAKQosksAAKB/5eXlWSwWQRAaGhpC5xYBgDQwf/78J5988tKlS16v99NPP12xYoWy6vz58/fee++LL75YUVGxb9++c+fOhW74xhtvyKWdzzzzzHe+8x2lfcGCBW+//ba8/Mc//vGWW26JMxKtVivPWFRbW7tjx46bbrqp202sVuu7776r0WiGDRt21VVXuVyueI6roaFh7NixDofjmWeeiTO2LVu2rFq1qrW1NRgMXrhw4fnnn7/zzjvj3BZASiC7BAAA+t3/b+/O46Oo8/yPV/WZTnc6SeciF3ggojgqp6DgunI46HiAKKis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6kiXAAAAAAAAkDrSJQAAAAAAAKSOdAkAAAAAAACpI10CAAAAAABA6kiXAAAAAAAAkDrSJQAAAAAAAKSOdAkAAAAAAACpI10CAAAAAABA6kiXAAAAAAAAkDrSJQAAAAAAAKSOdAkAAAAAAACpI10CAAAAAGBw+e677/71X/915MiRNpvNarWeeOKJN95443fffRfTTUxCvM5Wq3XUqFF33HFHQ0ND5wJ8Pt/q1asnTZqUl5dnMBgKCgrOOuuse++99+uvv07tjqKL6VHZSVainnjVVVd1vvpVV13VeeRkuN3uYcOGpXBifyPKsqx1DQAAAAAAoI+sWrXq3nvvDYfDMe16vX7FihV333232pJM5KGmCvE6l5SU7Nq169hjj1Vbmpqazj333D179iQesEeUqyvnJl928pUoY4qiaDab6+vr8/Ly1ENtbW2lpaWBQEDp36P6b7nllueeey4YDPb0xP6GuUsAAAAAAAwWjz322NKlSyORyKJFiz755BOXy+XxeD799NPf/e53kUhkyZIljz/+uNpZ/kcJGjuf0tTU9Oabbx533HGNjY333XdfdJ+77757z5495eXl69evr66uDgQCbW1tu3btWrFixamnnnr095h82T2t5Nxzz/X7/a+88kp048svv+z3+6dOndrTOnft2vWnP/0pOs7LXMxdAgAAAABgUKiurh4+fHgwGHz++ed/+9vfxhxdv379woULTSbTjz/+WFFR0fn06PlBSR7929/+Nnny5OLi4sbGRrWxoKCgtbV1165dEydOPMo7Sqa2BIeSr0QZ5JVXXrnyyivHjBnzxRdfqIfGjBnz5Zdfvvrqq1dccUW8C3UWDAZHjx4tSdI333xjsViSP7F/Yu4SAAAAAACDwjPPPBMMBufMmdM5WhIE4be//e2ll14aDAafeeaZdF3xtNNOEwShvb09utHj8QiCcMIJJ3R7epcbEqVxl6LkK1HMnj3b4XD8/e9//+qrr5SWL7/88ssvv3Q4HLNmzerRpVesWLF3796nn346KyurRyf2T6RLAAAAAAAMClu2bBEE4dprr43XQTn0wQcfpOuKf//73wVBiJkJNXr0aEEQFi1adODAgXRdKDU9rcRsNiu7eq9bt05pUV7Mnz/fbDYnf929e/euXLly/vz5Kayn659YGQcAAAAAwKDgcDicTmdLS4vD4eiyw5EjR4qKigoKCo4cOdL5aI9Wxh05cmTHjh133HHHoUOHli1bdv/996s9d+zYMWPGDL/fLwjCcccdd/rpp59yyilnn332Oeeco9fru71i8o3dHkqhkq+//vr000/Pz8+vq6sTBKG0tLStre3rr78+9dRTEz8fVSQSmTx58g8//PD9998XFRUlrjBTkC4BAAAAADAoGI3GUCgkSZLBYOiygyRJJpPJYDBIktT5aDLpUmdXXHHFiy++aDQaoxu///77FStWvPnmmy6XS22sqKh49NFHL7300iRvJ8naEpedZCXRg4wfP/7zzz9/5ZVXZFm+6qqrxo8f/+mnn3Z7IdUTTzxx6623rl27dtGiRclUmBFIlwAAAAAAGBT6YO5SjIqKirfeektZgNZZOBzevXv3nj17Pv300/fee2///v2iKFZVVV188cXJ3lIStSWT3XRbSfQgzzzzzI033jh16lRZlrdt2/bMM89cf/31SV7o8OHDo0aNGj169Mcff6w+MdIlAAAAAACQGSZMmPDZZ59t3rx5+vTpXXbYvHnzeeedN2HChE8++aTz0eRXxkmS9NNPPy1fvvyll14qKir69ttvS0pKEtcWiUTuvffeBx98MOYb2ZJ0lOlSt5VED9Le3l5WVubz+QRBsFgs9fX1drs9yQtdcMEFH3zwwVdffXXSSSelXGE/xK7eAAAAAAAMCtOmTRMEYc2aNfE6KIeUbkfDaDSOGDHihRdeOO+885qbm++9995uT9HpdEuWLBEEYc+ePUd59aPUbSW5ublz5syRZVmW5csuu0yJlpL03nvvBYPBk08+WYyiHErjd+H1PdIlAAAAAAAGhRtuuMFoNP75z3/+r//6r85HX3rppddff91kMt1www1puZwoio8//rjBYHjxxRf37dvXbX/li9tsNltarn40uq1E3TJJfTHIkS4BAAAAADAoDB06dOXKlYIgXHPNNdddd91nn33m9Xp9Pt/nn39+/fXXL1iwQBCEBx98sLKyMl1XHDFixMKFC0OhUPT0pVGjRt17773vv/9+dXV1IBDw+/0//fTTn/70J2WTo5kzZ6o9u5zOk8Y5PslXEuPss89W5i5NmTKlR1eUuxJ96GhuR0PsuwQAAAAAwCCyfPnyZcuWRSKRmHadTvfAAw/8/ve/j3di8vsuRaurqxs+fLjf7//000/HjRsnxP92OUEQTjrppG3btg0ZMiTBmMk3Jnko5UqSv1BiA2DfJdIlAAAAAAAGlz179jz55JNbt26tra2VZbmiouLcc8+95ZZbRo0aleCs1NIlQRCWLl26atWqadOmbdmyRRCEvXv3vvnmm9u3b9+zZ09TU5MsywUFBaNGjbrkkkt+97vfZWVlJR4zjenSUVaS/IUSI10CAAAAAADAoMa+SwAAAAAAAEgd6RIAAAAAAABSR7oEAAAAAACA1JEuAQAAAAAAIHWkSwAAAAAAAEgd6RIAAAAAAABSR7oEAAAAAACA1JEuAQAAAAAAIHUGrQsAAAAAAAB9QRRFWZa1ruL/iKLYubFfVYgkkS4BAAAAAIBe12W2pW2W1N/itszFyjgAAAAAAACkjnQJAAAAAIDBRRTFV155Zfz48dnZ2Tabbfr06bt37960adNZZ51ltVoLCwuvvPLKlpYWtfOzzz57wgknmEym448//oUXXoge6tlnnx0+fLjJZBo+fPiaNWtiLnHGGWfYbDa9Xq8sghN/0W2FN9xwwxVXXBHdMm/evBtuuEHDkpCIDAAAAAAABgE1BBAEYeTIkR988IHL5aqvr7/mmmscDsfJJ5+8ZcsWteXKK69UOw8bNuyjjz5yuVwffvjh0KFD33//feXQxo0bKyoqtm7d2tHRsXXr1oqKirfeeks9a8SIEVu3bvV4PDFX71xPZ8FgcPLkyU899ZTy9sknn5wyZUowGOztkpAaVhgCAAAAADAoqNsMiaL4+eefjx07Vmlvbm4uLi7+4osvxowZo7acdNJJR44cUTq/9dZbF154oXLozTfffPTRRz/66CNBEM4666zFixdfcsklyqGqqqqHH374r3/9q3LW9u3bp0yZ0vnq0S2di1T7NDU1nXXWWf/zP/8jCMK8efP+9re/FRcXqyf2UklIDc8RAAAAAIBBITpdCofDOp0u+lDnFrWz0+nMy8tT2p1O5/Dhw5V1cw6H48cff8zPz1cPHX/88a2trcpZPp8vKyur84AJWmJ88cUX8+bNMxgML7/8spp89WpJSA37LgEAAAAAMOhEB0nxWo5SdI6Tmk8++cRutwcCgcOHD/eTktAl0iUAAAAAAJDIjh071Ncff/zxKaecorw+6aSTtm/fHn3o5JNPjjeIwWAIh8PJX/Trr7/+wx/+8Nprr23YsOH666//8ccfNS8J8ZAuAQAAAACARG655ZaPP/7Y7XZ/9NFHt9122z333KO033XXXbfeeutHH32kHlqyZEm8QYYOHfrBBx9EIpFkrujxeObOnfvoo48ef/zx48eP/3//7//NmTPH7/drWBISYIUhAAAAAACDQvRWSt1ugRTd+emnn169evXPP/9cWVl53333LVy4UO32zDPPKIeGDRu2ZMmSa6+9Nt6AGzduvOuuuw4fPhwOh9WROxepHLrmmmv0ev3zzz+vtl955ZUWi2XdunW9WhJSQ7oEAAAAAADi6odbX/fDkgY5VsYBAAAAAAAgdaRLAAAAAAAASB1zyQAAAAAAAJA65i4BAAAAAAAgdaRLAAAAAAAASB3pEgAAAAAAAFJHugQAAAAAAIDUkS4BAAAAADDo/Pzzz9XV1cprt9t96NAh5XUgEGhpaVG7tbe3+3y+6BOjO0Sf2NLScvjw4ZirqJ0DgUBNTU1NTY3L5Ur7vUBzBq0LAAAAAAAAfeqtt9765ptvWltbjz322Dlz5tx+++2nnXaa2Wy+6KKL/uM//qO5ufnNN98UBMHlcp177rn33HPPnDlzlBP379+vdqivr1dPnDRp0nPPPXfCCSfk5ubefPPNnTvv2rXrscceGzt27LnnnnvmmWdqdufoHaIsy1rXAAAAAAAA+lpHR8eNN944adKkUaNG/fM///Ps2bM3btwoCMIll1yipEvLli1zOBwVFRVquqRQOjz55JPqiSNHjrzyyitPOeWUadOmffDBB507f/TRRxs2bLj44otnzJixZcuWN954w263L1u2zG639+Uto5cwdwkAAAAAgEFHluW777578eLFVVVVRUVFnTt89NFHJ554ojIl5eDBg62traNGjbJYLGqH5uZm9cQpU6Y8/fTTo0ePPnDgQJedR4wYcdlllx06dOj2228vKCg444wzZs2aRbQ0YJAuAQAAAAAw6Nx1112XXXbZ6aef/umnn9bV1Z1yyimiKEZ32LZtW2tr6759+/R6fW5ubmNj4/HHHx8dGJWXl6snzpw5c8SIEX6/f+zYsXV1dYcOHYrpXFZWVlZWJgjCxRdf/Mgjj3z44YeLFi3693//91GjRvXZLaP3kC4BAAAAADC4PPfcc9u2bQsEArt37/6Xf/mXG2644d13373gggtaW1uXLVv2zTffPPjgg3/84x8FQfjv//7vrKys6dOnKydGd7juuuvUEw8cOLB27dq6urrbbrtt8uTJkydPjun8q1/9aseOHXV1dRdffPFLL73U1NSk0+mys7O1fApIH/ZdAgAAAABgUJNl2e/3R081SuFEl8tltVp1urjfTd/e3p6dnW00GgVBcDqdOTk5BgNTXgaI/w9jSRXEjZRl2QAAAABJRU5ErkJggg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5JbXBvcnRFeHBvcnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JbXBvcnRFeHBvcnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5hZG1pbjwvR3JvdXA+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPkltcG9ydC9FeHBvcnQ8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+QWRtaW48L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTW9kdWxlPgogICAgICAgICAgICAgICAgICAgIDxNb2R1bGU+S2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5hdkJhcjo6TW9kdWxlQWRtaW48L01vZHVsZT4KICAgICAgICAgICAgICAgICAgICA8TmFtZSBUcmFuc2xhdGFibGU9IjEiPkltcG9ydC9FeHBvcnQ8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPlN5c3RlbTwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+NzEwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXJNb2R1bGU+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+SVRTTS5JbXBvcnRFeHBvcnQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmRSZWdpc3RyYXRpb24jIyNDU1YiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Rm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkltcG9ydEV4cG9ydDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZvcm1hdEJhY2tlbmQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmQ6OkNTVjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+Q1NWPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6Y3NfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ05vdsOhIMWhYWJsb25hIHpvYnJhemVuw60nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ1puYWtvdsOhIHNhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAnRHZvanRlxI1rYSAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAnU2xvdXBlYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4gU2VwYXJhdG9yJ30gPSAnT2RkxJtsb3ZhxI0gU2xvdXBjxa8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ1RlxI1rYSAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1N0xZllZG7DrWsgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYnVsw6F0b3IgKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0ZWQgcmVjb3Jkcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBvcnRlZCByZWNvcmRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICdaw6F6bmFtxa8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ1DFmWVza2/EjWVubyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ0ltcG9ydC9FeHBvcnQgU3Byw6F2YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ1phaMOhaml0IEltcG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdaYWjDoWppdCBFeHBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdPbWV6aXQgRXhwb3J0IHZ5aGxlZMOhdsOhbsOtbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2UgbyBJbXBvcnR1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAnWmRyb2pvdsO9IFNvdWJvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnw5pzcMSbxaFuxJsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmFpbGVkJ30gPSAnTmXDunNwxJvFoW7Emyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdEdXBsaWNpdG7DrSBqbcOpbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0ltcG9ydC9FeHBvcnQnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGFfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ1RpbGbDuGogTWFwcGluZy1UZW1wbGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAnVGVnbnPDpnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAnS29sb24gKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0tvbG9ubmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnUHVua3R1bSAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1NlbWlrb2xvbiAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhdG9yIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwb3J0ZWQgcmVjb3Jkcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdJbXBvcnQvRWtwb3J0IHN0eXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdTdGFydCBpbXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAnU3RhcnQgZWtwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnQmVncsOmbnMgZWtwb3J0IHByLiBzw7hnbmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICdJbXBvcnQgaW5mb3JtYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdLaWxkZSBmaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICdJbXBvcnQvRWtwb3J0JzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGVfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ01hcHBpbmctVGVtcGxhdGUgaGluenVmw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ1plaWNoZW5zYXR6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0RvcHBlbHB1bmt0ICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdTcGFsdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ1NwYWx0ZW50cmVubmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQdW5rdCAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1NlbWljb2xvbiAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhdG9yIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICdNaXQgU3BhbHRlbsO8YmVyc2NocmlmdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvcid9ID0gJ0ltcG9ydC1CZXJpY2h0IGbDvHInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0ZWQgcmVjb3Jkcyd9ID0gJ0ltcG9ydGllcnRlIERhdGVuc8OkdHplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cG9ydGVkIHJlY29yZHMnfSA9ICdFeHBvcnRpZXJ0ZSBEYXRlbnPDpHR6ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAnRGF0ZW5zw6R0emUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ8OcYmVyc3BydW5nZW4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdJbXBvcnQvRXhwb3J0LVZlcndhbHR1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0Vyc3RlbGxlbiBlaW5lciBWb3JsYWdlIHp1bSBJbXBvcnRpZXJlbiB1bmQgRXhwb3J0aWVyZW4gdm9uIE9iamVrdC1JbmZvcm1hdGlvbmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdJbXBvcnQgc3RhcnRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdFeHBvcnQgc3RhcnRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAnTmFtZSB3aXJkIGJlbsO2dGlndCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ09iamVrdCBpc3QgZXJmb3JkZXJsaWNoISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnRm9ybWF0IGlzdCBlcmZvcmRlcmxpY2ghJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnd2lyZCBiZW7DtnRpZ3QhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdLZWluZSBNYXBwaW5nLUVsZW1lbnRlIGdlZnVuZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnTWFwcGluZy1FbGVtZW50IGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdFeHBvcnQgcGVyIFN1Y2hlIGVpbnNjaHLDpG5rZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAnSW1wb3J0LUluZm9ybWF0aW9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdRdWVsbC1EYXRlaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnRXJmb2xncmVpY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmFpbGVkJ30gPSAnTmljaHQgZXJmb2xncmVpY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnRG9wcGVsdGUgTmFtZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICdadWxldHp0IHZlcmFyYmVpdGV0ZSBaZWlsZSBkZXIgSW1wb3J0LURhdGVpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ0Zvcm1hdC1CYWNrZW5kIE1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgSW1wb3J0L0V4cG9ydCBNb2R1bHMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdJbXBvcnRpZXJlbiB1bmQgRXhwb3J0aWVyZW4gdm9uIE9iamVrdC1JbmZvcm1hdGlvbmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0L0V4cG9ydCc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZXNfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ0HDsWFkaXIgcGxhbnRpbGxhIGRlIG1hcGVvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdKdWVnbyBkZSBjYXJhY3RlcmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0RvcyBwdW50b3MgKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0NvbHVtbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ1NlcGFyYWRvciBkZSBDb2x1bW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQdW50byAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1B1bnRvIHkgQ29tYSAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhZG9yIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICdJbmNsdWlyIENhYmVjZXJhIGRlIGxhIENvbHVtbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAnSW1wb3J0YXIgcmVzdW1lbiBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICdSZWdpc3Ryb3MgaW1wb3J0YWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBvcnRlZCByZWNvcmRzJ30gPSAnUmVnaXN0cm9zIGV4cG9ydGFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ1JlZ2lzdHJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnU2FsdGFkbyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpw7NuIGRlIEltcG9ydGFjacOzbi9FeHBvcnRhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0NyZWFyIHVuYSBwbGFudGlsbGEgcGFyYSBpbXBvcnRhciB5IGV4cG9ydGFyIGluZm9ybWFjaW9uIGRlbCBvYmpldG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ0luaWNpYXIgSW1wb3J0YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ0luaWNpYXIgRXhwb3J0YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdFbCBub21icmUgZXMgcmVxdWVyaWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICfCoURlYmUgZXNwZWNpZmljYXIgT2JqZXRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnwqFEZWJlIGVzcGVjaWZpY2FyIEZvcm1hdG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnwqFlcyByZXF1ZXJpZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdObyBzZSBlbmNvbnRyYXJvbiBlbGVtZW50b3MgZGUgbWFwZW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICdBw7FhZGlyIE1hcGVvIGRlIEVsZW1lbnRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnUmVzdHJpbmdpciBleHBvcnRhY2nDs24gcG9yIGLDunNxdWVkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICdJbXBvcnRhciBpbmZvcm1hY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdBcmNoaXZvIG9yaWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnw4l4aXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZhaWxlZCd9ID0gJ0ZyYWNhc2Fkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdOb21icmVzIGR1cGxpY2Fkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICfDmmx0aW1hIG7Dum1lcm8gZGUgbMOtbmVhIHByb2Nlc2FkYSBkZWwgYXJjaGl2byBpbXBvcnRhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdSZWdpc3RybyBkZSBtw7NkdWxvIGRlIGZvcm1hdG8gYmFja2VuZCBwYXJhIGVsIG3Ds2R1bG8gaW1wb3J0L2V4cG9ydC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0ltcG9ydGFyIHkgZXhwb3J0YXIgaW5mb3JtYWNpw7NuIGRlIG9iamV0b3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICdJbXBvcnRhci9FeHBvcnRhcic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZXNfTVhfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ0FncmVnYXIgcGxhbnRpbGxhIGRlIG1hcGVvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdDb25qdW50byBkZSBDYXJhY3RlcmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0RvcyBQdW50b3MgKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0NhbHVtbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ1NlcGFyYWRvciBkZSBDb2x1bW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQdW50byAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1B1bnRvIHkgY29tYSAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhZG9yIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICdJbmNsdWlyIENhYmVjZXJhIGRlIENvbHVtbmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvcid9ID0gJ0ltcG9ydGFyIHJlc3VtZW4gcGFyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnRlZCByZWNvcmRzJ30gPSAnUmVnaXN0cm9zIGltcG9ydGFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwb3J0ZWQgcmVjb3Jkcyd9ID0gJ1JlZ2lzdHJvcyBleHBvcnRhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICdSZWdpc3Ryb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ09taXRpZG8nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdHZXN0acOzbiBkZSBJbXBvcnRhY2nDs24vRXhwb3J0YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdDcmVhciB1bmEgcGxhbnRpbGxhIHBhcmEgaW1wb3J0YXIgeSBleHBvcnRhciBpbmZvcm1hY2nDs24gZGUgb2JqZXRvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAnSW5pY2lhciBJbXBvcnRhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAnSW5pY2lhciBFeHBvcnRhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJ0VzIHJlcXVlcmlkbyB1biBub21icmUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICdFcyByZXF1ZXJpZG8gdW4gb2JqZXRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnRXMgcmVxdWVyaWRvIHVuIGZvcm1hdG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnZXMgcmVxdWVyaWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAnTm8gc2UgaGFuIGVuY29udHJhZG8gbWFwYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICdBZ3JlZ2FyIHVuIEVsZW1lbnRvIGRlIE1hcGVvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdSZXN0cmluZ2lyIGxhIGV4cG9ydGFjacOzbiBhIGxhIGLDunNxdWVkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2nDs24gZGUgaW1wb3J0YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAnQXJjaGl2byBGdWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ8OJeGl0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICdGYWxsw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnTm9tYnJlcyBkdXBsaWNhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAnw5psdGltbyBuw7ptZXJvIGRlIGzDrW5lYSBwcm9jZXNhZGEgZGVsIGFyY2hpdm8gYSBpbXBvcnRhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ0FjZXB0YXInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ0Zvcm1hdG8gZGVsIG3Ds2R1bG8gYWRtaW5pc3RyYXRpdm8gZGUgcmVnaXN0cm8gcGFyYSBlbCBtw7NkdWxvIGRlIGltcG9ydGFjacOzbi9leHBvcnRhY2nDs24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdJbXBvcnRhciB5IGV4cG9ydGFyIGluZm9ybWFjacOzbiBkZSB1biBvYmpldG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICdJbXBvcnRhci9FeHBvcnRhcic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZmFfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ9in2LbYp9mB2Ycg2qnYsdiv2YYg24zaqSDZgtin2YTYqCDZhtqv2KfYtNiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICfaqdiv2KjZhtiv24wg2KfYt9mE2KfYudin2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAn2K/ZiNmG2YLYt9mHICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICfYs9iq2YjZhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4gU2VwYXJhdG9yJ30gPSAn2KzYr9in2qnZhtmG2K/ZhyDYs9iq2YjZhuKAjNmH2KcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ9mG2YLYt9mHICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAn2LPZhduMINqp2KfZhNmGICg7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICfYrNiv2YjZhCDYs9in2LIgKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0ZWQgcmVjb3Jkcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBvcnRlZCByZWNvcmRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ9mF2K/bjNix24zYqiDZiNix2YjYry/Ytdiv2YjYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAn2LPYp9iu2Kog2YLYp9mE2KjbjCDYqNix2KfbjCDZiNix2YjYryDZiCDYtdiv2YjYsSDYp9i32YTYp9i52KfYqiDYotio2KzaqdiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ9i02LHZiNi5INi52YXZhNuM2KfYqiDZiNix2YjYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICfYtNix2YjYuSDYudmF2YTbjNin2Kog2LXYr9mI2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAn2KLYqNis2qnYqiDZhdmI2LHYryDZhtuM2KfYsiDYp9iz2KohJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICfZgtin2YTYqOKAjNio2YbYr9uMINmF2YjYsdivINmG24zYp9iyINin2LPYqiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ9mH24zahiDYudmG2LXYsSDZhtqv2KfYtNiq24wg24zYp9mB2Kog2YbYtNivLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAn2KfZgdiy2YjYr9mGINi52YbYtdixINmG2q/Yp9i02KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ9mF2K3Yr9mI2K/Ys9in2LLbjCDYudmF2YTbjNin2Kog2LXYr9mI2LEg2KjZhyDYp9iy2KfbjCDYrNiz2KrYrNmIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ9mI2LHZiNivINin2LfZhNin2LnYp9iqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAn2YHYp9uM2YQg2YXZhtio2LknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAn2KrYp9uM24zYryc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAn2YLYp9mE2KjigIzYqNmG2K/bjCDYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZhdin2pjZiNmEINmI2LHZiNivL9i12K/ZiNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICfZiNix2YjYryDZiCDYtdiv2YjYsSDYp9i32YTYp9i52KfYqiDYotio2KzaqdiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICfZiNix2YjYry/Ytdiv2YjYsSc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZnJfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ0Fqb3V0ZXIgdW4gdGVtcGxhdGUgZGUgbWFwcGFnZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAnSmV1IGRlIGNhcmFjdMOocmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0RldXggcG9pbnRzICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdDb2xvbm5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICdTw6lwYXJhdGV1ciBkZSBjb2xvbm5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQb2ludCAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1BvaW50IHZpcmd1bGUgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYnVsYXRpb24gKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ0luY2x1cmUgbGVzIGVuLXTDqnRlcyBkZSBjb2xvbm5lcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3InfSA9ICdSw6lzdW3DqSBkZSBsXCdpbXBvcnQgcG91cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnRlZCByZWNvcmRzJ30gPSAnRW5yZWdpc3RyZW1lbnRzIGltcG9ydMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBvcnRlZCByZWNvcmRzJ30gPSAnRW5yZWdpc3RyZW1lbnRzIGV4cG9ydMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAnRW5yZWdpc3RyZW1lbnRzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdQYXNzw6kocyknOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uIGRlIGxcJ0ltcG9ydC9FeHBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0Nyw6llciB1biBtb2TDqGxlIHBvdXIgaW1wb3J0ZXIgZXQgZXhwb3J0ZXIgbGVzIGluZm9ybWF0aW9ucyBkXCdvYmpldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdEw6ltYXJyZXIgSW1wb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ0TDqW1hcnJlciBFeHBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJ1VuIE5vbSBlc3QgcmVxdWlzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnVW4gT2JqZXQgZXN0IHJlcXVpcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ1VuIEZvcm1hdCBlc3QgcmVxdWlzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ2VzdCByZXF1aXMgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAnQXVjdW4gw6lsw6ltZW50IGRlIG1hcHBhZ2UgdHJvdXbDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnQWpvdXRlciB1biDDqWzDqW1lbnQgZGUgbWFwcGFnZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnUmVzdHJlaW5kcmUgbFwnZXhwb3J0IHBhciByZWNoZXJjaGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYXRpb25zIGRcJ2ltcG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UgRmlsZSd9ID0gJ0ZpY2hpZXIgU291cmNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3MnfSA9ICdSw6l1c3NpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZhaWxlZCd9ID0gJ0VjaG91w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnTm9tcyBlbiBkb3VibGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICdOdW3DqXJvIGRlIGxhIGRlcm5pw6hyZSBsaWduZSB0cmFpdMOpZSBkYW5zIGxlIGZpY2hpZXIgZFwnaW1wb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ0VucmVnaXN0cmVtZW50IGVuIGFycmnDqHJlIHBsYW4gZHUgbW9kdWxlIGRcJ2ltcG9ydC9leHBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0ltcG9ydGVyIGV0IGV4cG9ydGVyIGRlcyBpbmZvcm1hdGlvbnMgZFwnb2JqZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0ltcG9ydGVyL0V4cG9ydGVyJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6Z2xfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ0VuZ2FkaXIgbyBtYXBlbyBkbyBtb2RlbG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ0Nvbnh1bnRvIGRlIGNhcmFjdGVyZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAnRG91cyBwdW50b3MgOic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdDb2x1bW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICdTZXBhcmFkb3IgZGUgY29sdW1uYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ1B1bnRvICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnUHVudG8gZSBjb21hICg7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICdUYWJ1bGFjacOzbiAoVEFCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAnSW5jbHXDrXIgYXMgY2FiZWNlaXJhcyBkYXMgY29sdW1uYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAnSW1wb3J0YXIgbyByZXN1bW8gZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0ZWQgcmVjb3Jkcyd9ID0gJ1JleGlzdHJvcyBpbXBvcnRhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cG9ydGVkIHJlY29yZHMnfSA9ICdSZXhpc3Ryb3MgZXhwb3J0YWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAnUmV4aXN0cm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdPbWl0aWRvJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkltcG9ydEV4cG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCBNYW5hZ2VtZW50J30gPSAnWGVzdGnDs24gZGEgaW1wb3J0YWNpw7NuL2V4cG9ydGFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnQ3JlYXIgdW4gbW9kZWxvIHBhcmEgaW1wb3J0YXIgZSBleHBvcnRhciBhIGluZm9ybWFjacOzbiBzb2JyZSBvcyBvYnhlY3Rvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAnSW5pY2lhciBhIGltcG9ydGFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdJbmljaWFyIGEgZXhwb3J0YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdSZXF1w61yZXNlIHVuIG5vbWUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICdSZXF1w61yZXNlIHVuIG9ieGVjdG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICdSZXF1w61yZXNlIHVuIGZvcm1hdG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnRSBuZWNlc2FyaW8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdFbGVtZW50b3MgZG8gbWFwYSBub24gYXRvcGFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJ0VuZ2FkaXIgZWxlbWVudG8gZGUgbWFwZW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ1Jlc3RyaW54aXIgYSBleHBvcnRhY2nDs24gZGEgYnVzY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNpw7NuIGRlIGltcG9ydGFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAnRmljaGVpcm8gb3JpeGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ0NvcnJlY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZhaWxlZCd9ID0gJ0ZhbGxvdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdOb21lcyBkdXBsaWNhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAnTsO6bWVybyBkYSBkZXJyYWRlaXJhIGxpw7FhIHByb2Nlc2FkYSBkbyBhcnF1aXZvIGltcG9ydGFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnQWNlcHRhcic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSByZXhpc3RybyBkbyBmb3JtYXRvIGRlIGJhY2tlbmQgcGFyYSBvIG3Ds2R1bG8gaW1wb3J0YXIvZXhwb3J0YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0luZm9ybWFjacOzbiBwYXJhIGltcG9ydGFyIGUgZXhwb3J0YXIgbyBvYnhldG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0ltcG9ydGFjacOzbi9FeHBvcnRhY2nDs24nOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aHVfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ0xla8OpcGV6w6lzaSBzYWJsb24gaG96esOhYWTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdLYXJha3RlcmvDqXN6bGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0tldHTFkXNwb250ICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdPc3psb3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ09zemxvcGVsdsOhbGFzenTDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnUG9udCAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1BvbnRvc3Zlc3N6xZEgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYnVsw6F0b3IgKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ09zemxvcGZlamzDqWNlayBmZWx2w6l0ZWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvcid9ID0gJ0ltcG9ydMOhbMOhc2kgw7Zzc3plZ3rDqXMgZWhoZXonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0ZWQgcmVjb3Jkcyd9ID0gJ0ltcG9ydMOhbHQgcmVrb3Jkb2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwb3J0ZWQgcmVjb3Jkcyd9ID0gJ0V4cG9ydMOhbHQgcmVrb3Jkb2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ1Jla29yZG9rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdLaWhhZ3l2YSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ0ltcG9ydMOhbMOhcy9leHBvcnTDoWzDoXMga2V6ZWzDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ1NhYmxvbiBsw6l0cmVob3rDoXNhIG9iamVrdHVtaW5mb3Jtw6FjacOzayBpbXBvcnTDoWzDoXPDoWhveiDDqXMgZXhwb3J0w6Fsw6Fzw6Fob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ0ltcG9ydMOhbMOhcyBpbmTDrXTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ0V4cG9ydMOhbMOhcyBpbmTDrXTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdBIG7DqXYga8O2dGVsZXrFkSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ0F6IG9iamVrdHVtIGvDtnRlbGV6xZEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICdBIGZvcm3DoXR1bSBrw7Z0ZWxlesWRISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ2vDtnRlbGV6xZEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdOZW0gdGFsw6FsaGF0w7NrIHTDqXJrw6lwZWxlbWVrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnTGVrw6lwZXrDqXNpIGVsZW1layBob3p6w6FhZMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ0V4cG9ydMOhbMOhcyBrb3Jsw6F0b3rDoXNhIGtlcmVzw6lzZW5rw6ludCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICdJbXBvcnTDoWzDoXNpIGluZm9ybcOhY2nDs2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdGb3Jyw6FzZsOhamwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ1Npa2VyZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmFpbGVkJ30gPSAnU2lrZXJ0ZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdOZXZlayBrZXR0xZF6w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ0F6IGltcG9ydGbDoWpsIHV0b2xzw7MgZmVsZG9sZ296b3R0IHNvcnN6w6FtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09LJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdGb3Jtw6F0dW0gaMOhdHTDqXJwcm9ncmFtIG1vZHVsIHJlZ2lzenRyw6FjacOzIGF6IGltcG9ydMOhbMOhcy9leHBvcnTDoWzDoXMgbW9kdWxob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdPYmpla3R1bWluZm9ybcOhY2nDs2sgaW1wb3J0w6Fsw6FzYSDDqXMgZXhwb3J0w6Fsw6FzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0ltcG9ydMOhbMOhcy9leHBvcnTDoWzDoXMnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aWRfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ1RpbGbDuGogTWFwcGluZy1UZW1wbGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAnVGVnbnPDpnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAnS29sb24gKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0tvbG9ubmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnUHVua3R1bSAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1NlbWlrb2xvbiAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhdG9yIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwb3J0ZWQgcmVjb3Jkcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdJbXBvcnQvRWtwb3J0IHN0eXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdTdGFydCBpbXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAnU3RhcnQgZWtwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnQmVncsOmbnMgZWtwb3J0IHByLiBzw7hnbmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICdJbXBvcnQgaW5mb3JtYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdLaWxkZSBmaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICdJbXBvcnQvRWtwb3J0JzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aXRfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ0FnZ2l1bmdpIG1hcHBhdHVyYSBtb2RlbGxvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdDaGFyc2V0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0R1ZSBwdW50aSAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAnQ29sb25uYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4gU2VwYXJhdG9yJ30gPSAnU2VwYXJhdG9yZSBkaSBjb2xvbm5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQdW50byAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1B1bnRvIGUgdmlyZ29sYSAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhdG9yZSAoVEFCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAnSW5jbHVkaSBsZSBDb2xvbm5lIGRpIEludGVzdGF6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3InfSA9ICdJbXBvcnRhIGlsIHNvbW1hcmlvIHBlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnRlZCByZWNvcmRzJ30gPSAnVm9jaSBpbXBvcnRhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwb3J0ZWQgcmVjb3Jkcyd9ID0gJ0VzcG9ydGEgdm9jaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAnVm9jaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnU2FsdGF0byc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpb25lIEltcG9ydGF6aW9uZS9Fc3BvcnRhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0NyZWEgdW4gdGVtcGxhdGUgcGVyIGltcG9ydGFyZSBlZCBlc3BvcnRhcmUgbGUgaW5mb3JtYXppb25pIGRlZ2xpIG9nZ2V0dGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ0luaXppYSBJbXBvcnRhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAnSW5pemlhIEVzcG9ydGF6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAnSWwgbm9tZSDDqCBvYmJsaWdhdG9yaW8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICdMXCdvZ2dldHRvIMOoIG9iYmxpZ2F0b3JpbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ0lsIGZvcm1hdG8gw6ggb2JibGlnYXRvcmlvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ8OoIG9iYmxpZ2F0b3JpbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ05lc3N1biBlbGVtZW50byBtYXBwYSB0cm92YXRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnQWdnaXVuZ2kgdW4gZWxlbWVudG8gZGkgbWFwcGF0dXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnUmVzdHJpbmdlcmUgZXNwb3J0YXppb25lIHBlciByaWNlcmNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0ltcG9ydGFyZSBpbmZvcm1hemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdBcmNoaXZpbyBvcmlnaW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3MnfSA9ICdTdWNjZXNzbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICdGYWxsaXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lcyd9ID0gJ0R1cGxpY2EgaSBub21pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAnTnVtZXJvIGRlbGxcJ3VsdGltYSByaWdhIHByb2Nlc3NhdGEgZGVsIGZpbGUgZGEgaW1wb3J0YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhemlvbmUgZGVsIG1vZHVsbyBkaSBiYWNrZW5kIGRlbCBmb3JtYXRvIHBlciBpbCBtb2R1bG8gZGkgaW1wb3J0YXppb25lL2VzcG9ydGF6aW9uZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0ltcG9ydGEgZWQgZXNwb3J0YSBsZSBpbmZvcm1hemlvbmkgc3VsbFwnb2dnZXR0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0ltcG9ydGFyZS9Fc3BvcnRhcmUnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6amFfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ+ODnuODg+ODlOODs+OCsOODhuODs+ODl+ODrOODvOODiOOBrui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAn44Kt44Oj44Op44Kv44K/44K744OD44OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ+OCs+ODreODsyAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAn5qGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICfmoYHjga7jgrvjg5Hjg6zjg7zjgr8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ+ODieODg+ODiCguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAn44K744Of44Kz44Ot44OzICg7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICfjgr/jg5YgKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ+ODmOODg+ODgOaDheWgseOCkuWQq+OCgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3InfSA9ICfmpoLopoHjgpLoqq3jgb/ovrzjgoAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0ZWQgcmVjb3Jkcyd9ID0gJ+OCpOODs+ODneODvOODiOOBl+OBn+ODrOOCs+ODvOODiSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBvcnRlZCByZWNvcmRzJ30gPSAn44Ko44Kv44K544Od44O844OI44GX44Gf44Os44Kz44O844OJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICfjg6zjgrPjg7zjg4knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ+OCueOCreODg+ODl+OBleOCjOOBvuOBl+OBnyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ0ltcG9ydC9FeHBvcnQg44Oe44ON44O844K444OjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICfjgqrjg5bjgrjjgqfjgq/jg4jjga7jgqTjg7Pjg53jg7zjg4jjg7vjgqjjgq/jgrnjg53jg7zjg4jnlKjjga7jg4bjg7Pjg5fjg6zjg7zjg4jjgpLkvZzmiJDjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAn44Kk44Oz44Od44O844OI6ZaL5aeLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ+OCqOOCr+OCueODneODvOODiOmWi+Wniyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAn5ZCN56ew44Gv5b+F6aCI44Gn44GZISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAn44Kq44OW44K444Kn44Kv44OI44Gv5b+F6aCI44Gn44GZISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAn44OV44Kp44O844Oe44OD44OI44Gv5b+F6aCI44Gn44GZISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ+W/hemgiOOBp+OBmSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAn44Oe44OD44OU44Oz44Kw6KaB57Sg44GM6KaL44Gk44GL44KK44G+44Gb44KT44Gn44GX44GfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICfjg57jg4Pjg5Tjg7PjgrDopoHntKDjga7ov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ+aknOe0ouOBguOBn+OCiuOBruWHuuWKm+OCkuWItumZkCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICfmg4XloLHjga7oqq3jgb/ovrzjgb8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICfjgr3jg7zjgrnjg5XjgqHjgqTjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ+aIkOWKnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICflpLHmlZcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAn5ZCN5YmN44GM6YeN6KSH44GX44Gm44GE44G+44GZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAn6Kqt44G/6L6844G/5riI44G/44OV44Kh44Kk44Or44Gu5pyA57WC5a6f6KGM6KGM5pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ2ltcG9ydC9leHBvcnTjg6Ljgrjjg6Xjg7zjg6vjga7jg5Djg4Pjgq/jgqjjg7Pjg4njg6Ljgrjjg6Xjg7zjg6vjgpLnmbvpjLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ+OCquODluOCuOOCp+OCr+ODiOaDheWgseOBruOCpOODs+ODneODvOODiOODu+OCqOOCr+OCueODneODvOODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAn44Kk44Oz44Od44O844OIL+OCqOOCr+OCueODneODvOODiCc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bWtfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ0HDsWFkaXIgcGxhbnRpbGxhIGRlIG1hcGVvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdKdWVnbyBkZSBjYXJhY3RlcmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0RvcyBwdW50b3MgKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0NvbHVtbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ1NlcGFyYWRvciBkZSBDb2x1bW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQdW50byAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1B1bnRvIHkgQ29tYSAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhZG9yIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICdJbmNsdWlyIENhYmVjZXJhIGRlIGxhIENvbHVtbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAnSW1wb3J0YXIgcmVzdW1lbiBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICdSZWdpc3Ryb3MgaW1wb3J0YWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBvcnRlZCByZWNvcmRzJ30gPSAnUmVnaXN0cm9zIGV4cG9ydGFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ1JlZ2lzdHJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnU2FsdGFkbyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpw7NuIGRlIEltcG9ydGFjacOzbi9FeHBvcnRhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0NyZWFyIHVuYSBwbGFudGlsbGEgcGFyYSBpbXBvcnRhciB5IGV4cG9ydGFyIGluZm9ybWFjaW9uIGRlbCBvYmpldG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ0luaWNpYXIgSW1wb3J0YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ0luaWNpYXIgRXhwb3J0YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdFbCBub21icmUgZXMgcmVxdWVyaWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICfCoURlYmUgZXNwZWNpZmljYXIgT2JqZXRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnwqFEZWJlIGVzcGVjaWZpY2FyIEZvcm1hdG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnwqFlcyByZXF1ZXJpZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdObyBzZSBlbmNvbnRyYXJvbiBlbGVtZW50b3MgZGUgbWFwZW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICdBw7FhZGlyIE1hcGVvIGRlIEVsZW1lbnRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnUmVzdHJpbmdpciBleHBvcnRhY2nDs24gcG9yIGLDunNxdWVkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICdJbXBvcnRhciBpbmZvcm1hY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdBcmNoaXZvIG9yaWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnw4l4aXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZhaWxlZCd9ID0gJ0ZyYWNhc2Fkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdOb21icmVzIGR1cGxpY2Fkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICfDmmx0aW1hIG7Dum1lcm8gZGUgbMOtbmVhIHByb2Nlc2FkYSBkZWwgYXJjaGl2byBpbXBvcnRhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdSZWdpc3RybyBkZSBtw7NkdWxvIGRlIGZvcm1hdG8gYmFja2VuZCBwYXJhIGVsIG3Ds2R1bG8gaW1wb3J0L2V4cG9ydC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0ltcG9ydGFyIHkgZXhwb3J0YXIgaW5mb3JtYWNpw7NuIGRlIG9iamV0b3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICdJbXBvcnRhci9FeHBvcnRhcic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bXNfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ1RhbWJhaCB0ZW1wbGF0IHBldGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ1NldCBrYXJha3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2xvbiAoOiknfSA9ICdUaXRpayBiZXJ0aW5kaWggKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0tvbHVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICdLb2x1bSBwZW1pc2FoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdUaXRpayAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1NlbWlrb2xvbiAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVGFidWxhdG9yIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICdUZXJtYXN1ayBLb2x1bSBLZXBhbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAnSW1wb3J0IHJpbmdrYXNhbiB1bnR1ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnRlZCByZWNvcmRzJ30gPSAnUmVrb2QgeWFuZyBkaWltcG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBvcnRlZCByZWNvcmRzJ30gPSAnUmVrb2QgeWFuZyBkaWVrc3BvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ1Jla29kLXJla29kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdNZWxhbmdrYXVpJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkltcG9ydEV4cG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCBNYW5hZ2VtZW50J30gPSAnUGVuZ3VydXNhbiBJbXBvcnQvRWtzcG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnQ2lwdGEgdGVtcGxhdCB1bnR1ayBpbXBvcnQgZGFuIGVrc3BvcnQgaW5mb3JtYXNpIG9iamVrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdNdWxhIGltcG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdNdWxhIGVrc3BvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJ05hbWEgZGlrZWhlbmRha2khJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICdPYmplayBhZGFsYWggZGlwZXJsdWthbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ0Zvcm1hdCBhZGFsYWggZGlwZXJsdWthbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICdkaXBlcmx1a2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAnVGlhZGEgZWxlbWVuIHBldGEgZGl0ZW11aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJ1RhbWJhaCBlbGVtZW4gcGV0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnRGlsYXJhbmcgZWtzcG9ydCBwZXIgY2FyaWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFzaSBpbXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdTdW1iZXIgZmFpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnQmVyamF5YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICdHYWdhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdNZW55YWxpbiBuYW1hLW5hbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICdOb21ib3IgYmFyaXMgdGVyYWtoaXIgZGlwcm9zZXMgZmFpbCBpbXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnRm9ybWF0IGJhY2tlbmQgbW9kdWwgcGVuZGFmdGFyYW4gdW50dWsgbW9kdWwgaW1wb3J0L2Vrc3BvcnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdJbmZvcm1hc2kgb2JqZWsgaW1wb3J0IGRhbiBla3Nwb3J0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0L0Vrc3BvcnQnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmJfTk9fSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ0xlZ2cgdGlsIG1hbCBmb3IgbWFwcGluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAnVGVnbnNldHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAnS29sb24gKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0tvbG9ubmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ0tvbG9ubmVzZXBhcmF0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ1B1bmt0dW0gKC4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbWljb2xvbiAoOyknfSA9ICdTZW1pa29sb24gKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYnVsYXRvciAoVEFCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAnSW5rbHVkZXIga29sb25uZW92ZXJza3JpZnRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3InfSA9ICdPcHBzdW1tZXJpbmdlciBmb3IgaW1wb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICdJbXBvcnRlcnRlIHJhZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cG9ydGVkIHJlY29yZHMnfSA9ICdFa3Nwb3J0ZXJ0ZSByYWRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAnUmFkZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ0hvcHBldCBvdmVyJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkltcG9ydEV4cG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCBNYW5hZ2VtZW50J30gPSAnQWRtaW5pc3RyYXNqb24gYXYgSW1wb3J0L0Vrc3BvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ09wcHJldHQgZW4gbWFsIGZvciDDpSBla3Nwb3J0ZXJlIG9nIGltcG9ydGVyZSBpbmZvcm1hc2pvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdTdGFydCBpbXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAnU3RhcnQgZWtzcG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAnTmF2biBlciBww6VrcmV2ZCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ09iamVrdCBlciBww6VrcmV2ZCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ0Zvcm1hdCBlciBww6VrcmV2ZCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICdlciBww6VrcmV2ZCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ0luZ2VuIGVsZW1lbnRlciBmdW5uZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICdMZWdnIHRpbCBtYXBwaW5nLWVsZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ0JlZ3JlbnMgZWtzcG9ydCBwZXIgc8O4ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICdJbXBvcnQtaW5mb3JtYXNqb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdLaWxkZWZpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnVmVsbHlra2V0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZhaWxlZCd9ID0gJ0ZlaWxldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdEdXBsaWthdGUgbmF2bic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ1Npc3RlIHByb3Nlc3NlcnRlIGxpbmplbnVtbWVyIGF2IGltcG9ydGZpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdCYWtzaWRlbW9kdWwtcmVnaXN0cmVyaW5nIGZvciBmb3JtYXRldCB0aWwgaW1wb3J0L2Vrc3BvcnQtbW9kdWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnSW5mb3JtYXNqb24gZm9yIGltcG9ydC0gb2cgZWtzcG9ydC1vYmpla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0ltcG9ydC9Fa3Nwb3J0JzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmxfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ01hcHBpbmd0ZW1wbGF0ZSB0b2V2b2VnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ0thcmFrdGVyc2V0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0R1YmJlbGUgcHVudCAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAnS29sb20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ0tvbG9tc2NoZWlkaW5nc3Rla2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQdW50ICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnUHVudGtvbW1hICg7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICdUYWInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgc3VtbWFyeSBmb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0ZWQgcmVjb3Jkcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBvcnRlZCByZWNvcmRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ092ZXJnZXNsYWdlbic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ0ltcG9ydC9FeHBvcnQgYmVoZWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAnSW1wb3J0IHN0YXJ0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAnRXhwb3J0IHN0YXJ0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAnT2JqZWN0IGlzIHZlcnBsaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ0Zvcm1hYXQgaXMgdmVycGxpY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ2lzIHZlcnBsaWNodCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ0dlZW4gZWxlbWVudGVuIGdldm9uZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdCZXBlcmsgZXhwb3J0IHRvdCB6b2Vrb3BkcmFjaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAnSW1wb3J0LWluZm9ybWF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdCcm9uYmVzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnU3VjY2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZhaWxlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPSyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdJbXBvcnQgZW4gZXhwb3J0IG9iamVjdGluZm9ybWF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0ltcG9ydC9FeHBvcnQnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cGxfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ0RvZGFqIHN6YWJsb24gbWFwb3dhbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdLb2Rvd2FuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAnRHd1a3JvcGVrICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdLb2x1bW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICdTZXBhcmF0b3Iga29sdW1ueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnS3JvcGthICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnxZpyZWRuaWsgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYnVsYXRvciAoVEFCKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAnVW1pZcWbxIcgbmFnxYLDs3draSBrb2x1bW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAnUG9kc3Vtb3dhbmllIGltcG9ydHUgZGxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICdaYWltcG9ydG93YW5lIHJla29yZHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwb3J0ZWQgcmVjb3Jkcyd9ID0gJ1d5ZWtzcG9ydG93YW5lIHJla29yZHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ1Jla29yZHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ1BvbWluacSZdGUnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICdaYXJ6xIVkemFuaWUgSW1wb3J0ZW0vRXhwb3J0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ1V0d8Ozcnogc3phYmxvbiBkbyBpbXBvcnR1IGkgZWtzcG9ydHUgZGFueWNoIG9iaWVrdMOzdy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAnUm96cG9jem5paiBpbXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAnUm96cG9jem5paiBla3Nwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ09iaWVrdCBqZXN0IHd5bWFnYW55ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnRm9ybWF0IGplc3Qgd3ltYWdhbnkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdOaWUgem5hbGV6aW9ubyBlbGVtZW50w7N3IG1hcHkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICdEb2RhaiBlbGVtZW50IG1hcG93YW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnT2dyYW5pY3ogZWtzcG9ydCBwcnpleiB3eXN6dWthbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0ltcG9ydHVqIGluZm9ybWFjamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICdQbGlrIMW6csOzZMWCb3d5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3MnfSA9ICdQb3dvZHplbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZhaWxlZCd9ID0gJ05pZXBvd29kemVuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnRHVwbGlrYXR5IG5hencnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICdOciBvc3RhbmllaiBwcnpldHdvcnpvbmVqIGxpbmlpIHBsaWt1IGltcG9ydG93ZWdvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ01vZHXFgiBmb3JtYXRvd2FuaWEgYmFja2VuZCBkbGEgbW9kdcWCdSBpbXBvcnQvZWtzcG9ydC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0ltcG9ydHVqIGkgZWtzcG9ydHVqIGluZm9ybWFjamUgb2JpZWt0w7N3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0L2Vrc3BvcnQnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cHRfQlJfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ0FkaWNpb25hciBtb2RlbG8gZGUgbWFwZWFtZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAnQ29kaWZpY2HDp8OjbyBkZSBDYXJhY3RlcmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0RvaXMgUG9udG9zICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdDb2x1bmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ1NlcGFyYWRvciBkZSBDb2x1bmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQb250byAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1BvbnRvIGUgVsOtcmd1bGEgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYnVsYcOnw6NvIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICdJbmNsdWlyIENhYmXDp2FsaG9zIGRlIENvbHVuYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAnUmVzdW1vIGRlIGltcG9ydGHDp8OjbyBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICdSZWdpc3Ryb3MgaW1wb3J0YWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBvcnRlZCByZWNvcmRzJ30gPSAnUmVnaXN0cm9zIGV4cG9ydGFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ1JlZ2lzdHJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnRGVzY29uc2lkZXJhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkltcG9ydEV4cG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCBNYW5hZ2VtZW50J30gPSAnR2VyZW5jaWFtZW50byBkZSBJbXBvcnRhw6fDo28vRXhwb3J0YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdDcmlhciB1bSBtb2RlbG8gcGFyYSBpbXBvcnRhciBlIGV4cG9ydGFyIGluZm9ybWHDp8O1ZXMgZGUgb2JqZXRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdJbmljaWFyIEltcG9ydGHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdJbmljaWFyIEV4cG9ydGHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAnTm9tZSDDqSBvYnJpZ2F0w7NyaW8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICdPYmpldG8gw6kgb2JyaWdhdMOzcmlvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnTyBmb3JtYXRvIMOpIG9icmlnYXTDs3JpbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICfDqSBvYnJpZ2F0w7NyaW8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdOw6NvIGjDoSBlbGVtZW50b3MgbWFwYSBlbmNvbnRyYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnQWRpY2lvbmFyIGVsZW1lbnRvIGRlIG1hcGVhbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ1Jlc3RyaW5naXIgZXhwb3J0YcOnw6NvIHBvciBwZXNxdWlzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hw6fDtWVzIGRlIGltcG9ydGHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UgRmlsZSd9ID0gJ0FycXVpdm8gZGUgT3JpZ2VtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3MnfSA9ICdTdWNlc3NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZhaWxlZCd9ID0gJ0ZhbGhvdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdOb21lcyBkdXBsaWNhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAnw5psdGltbyBuw7ptZXJvIGRlIGxpbmhhIHByb2Nlc3NhZGEgZG8gYXJxdWl2byBkZSBpbXBvcmF0YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ0Zvcm1hdG8gZGUgcmVnaXN0cm8gYmFja2VuZCBkbyBtw7NkdWxvIGRlIGltcG9ydGHDp8OjbyAvIGV4cG9ydGHDp8OjbyBtw7NkdWxvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnSW1wb3J0YXIgZSBleHBvcnRhciBpbmZvcm1hw6fDtWVzIGRlIG9iamV0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0ltcG9ydGHDp8Ojby9FeHBvcnRhw6fDo28nOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cm9fSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ+WinuWKoOaYoOWwhOaooeeJiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAn5a2X56ym6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ+WGkuWPtyAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAn5YiXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICfliJfliIbpmpTnrKYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ+WPpeWPtyAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ+WIhuWPtyAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVEFC6ZSuIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICfljIXmi6zliJfmoIfpopgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAn5a+85YWl5oC757uTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICflr7zlhaXorrDlvZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwb3J0ZWQgcmVjb3Jkcyd9ID0gJ+WvvOWHuuiusOW9lSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAn6K6w5b2VJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICfot7Pov4fnmoQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICflr7zlhaUv5a+85Ye6566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICfliJvlu7rmqKHmnb/lr7zlhaXlkozlr7zlh7rlr7nosaHkv6Hmga/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAn5byA5aeL5a+85YWlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ+W8gOWni+WvvOWHuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAn5ZG95ZCN5piv5b+F6ZyA55qE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICflr7nosaHmmK/lv4XpnIDnmoTvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ+agvOW8j+aYr+W/hemcgOeahO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ+aYr+W/hemcgOeahO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAn5rKh5pyJ5om+5Yiw5pig5bCE55qE5a2X5q61JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICfmt7vliqDmmKDlsITlrZfmrrUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ+aMieaQnOe0oumZkOWItuWvvOWHuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICflr7zlhaXkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICfmupDmlofku7YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ+aIkOWKnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICflpLHotKUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAn6YeN5aSN55qE5ZCN56ewJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAn5a+85YWl5paH5Lu25pyA5ZCO5aSE55CG55qE6KGM5pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAn56Gu5a6aJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICfkuLrlr7zlhaUv5a+85Ye65qih5Z2X55qE5qC85byP5ZCO56uv5qih5Z2X5rOo5YaM44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICflr7zlhaXlkozlr7zlh7rlr7nosaHkv6Hmga/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ+WvvOWFpS/lr7zlh7onOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cHRfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ0FkaWNpb25hciBtb2RlbG8gZGUgbWFwZWFtZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAnQ29kaWZpY2HDp8OjbyBkZSBDYXJhY3RlcmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0RvaXMgUG9udG9zICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICdDb2x1bmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ1NlcGFyYWRvciBkZSBDb2x1bmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvdCAoLiknfSA9ICdQb250byAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ1BvbnRvIGUgVsOtcmd1bGEgKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYnVsYcOnw6NvIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICdJbmNsdWlyIENhYmXDp2FsaG9zIGRlIENvbHVuYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAnUmVzdW1vIGRlIGltcG9ydGHDp8OjbyBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICdSZWdpc3Ryb3MgaW1wb3J0YWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBvcnRlZCByZWNvcmRzJ30gPSAnUmVnaXN0cm9zIGV4cG9ydGFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ1JlZ2lzdHJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnRGVzY29uc2lkZXJhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkltcG9ydEV4cG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCBNYW5hZ2VtZW50J30gPSAnR2VyZW5jaWFtZW50byBkZSBJbXBvcnRhw6fDo28vRXhwb3J0YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdDcmlhciB1bSBtb2RlbG8gcGFyYSBpbXBvcnRhciBlIGV4cG9ydGFyIGluZm9ybWHDp8O1ZXMgZGUgb2JqZXRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBJbXBvcnQnfSA9ICdJbmljaWFyIEltcG9ydGHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdJbmljaWFyIEV4cG9ydGHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAnTm9tZSDDqSBvYnJpZ2F0w7NyaW8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICdPYmpldG8gw6kgb2JyaWdhdMOzcmlvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnTyBmb3JtYXRvIMOpIG9icmlnYXTDs3JpbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ07Do28gaMOhIGVsZW1lbnRvcyBtYXBhIGVuY29udHJhZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICdBZGljaW9uYXIgZWxlbWVudG8gZGUgbWFwZWFtZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnUmVzdHJpbmdpciBleHBvcnRhw6fDo28gcG9yIHBlc3F1aXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0luZm9ybWHDp8O1ZXMgZGUgaW1wb3J0YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAnQXJxdWl2byBkZSBPcmlnZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ1N1Y2Vzc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmFpbGVkJ30gPSAnRmFsaG91JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lcyd9ID0gJ05vbWVzIGR1cGxpY2Fkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICfDmmx0aW1vIG7Dum1lcm8gZGUgbGluaGEgcHJvY2Vzc2FkYSBkbyBhcnF1aXZvIGRlIGltcG9yYXRhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JbXBvcnRFeHBvcnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG9iamVjdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgbm90IGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgaW5zZXJ0L3VwZGF0ZSB0ZW1wbGF0ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZGVkIFRlbXBsYXRlSUQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWxlbWVudCByZXF1aXJlZCwgcGxlYXNlIGluc2VydCBkYXRhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZGF0YSwgcGxlYXNlIGluc2VydCBhIHZhbGlkICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBub3QgZm91bmQhJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLid9ID0KICAgICAgICAnRm9ybWF0byBkZSByZWdpc3RybyBiYWNrZW5kIGRvIG3Ds2R1bG8gZGUgaW1wb3J0YcOnw6NvIC8gZXhwb3J0YcOnw6NvIG3Ds2R1bG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICdJbXBvcnRhciBlIGV4cG9ydGFyIGluZm9ybWHDp8O1ZXMgZGUgb2JqZXRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0YcOnw6NvL0V4cG9ydGHDp8Ojbyc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cnVfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ9CU0L7QsdCw0LLQuNGC0Ywg0YjQsNCx0LvQvtC9INGB0L7Qv9C+0YHRgtCw0LLQu9C10L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICfQmtC+0LTQuNGA0L7QstC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sb24gKDopJ30gPSAn0JTQstC+0LXRgtC+0YfQuNC1ICg6KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2x1bW4nfSA9ICfQodGC0L7Qu9Cx0LXRhiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ9Cg0LDQt9C00LXQu9C40YLQtdC70YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ9Ci0L7Rh9C60LAgKC4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbWljb2xvbiAoOyknfSA9ICfQotC+0YfQutCwINGBINC30LDQv9GP0YLQvtC5ICg7KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWJ1bGF0b3IgKFRBQiknfSA9ICfQotCw0LHRg9C70Y/RhtC40Y8gKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ9CS0LrQu9GO0YfQuNGC0Ywg0LfQsNCz0L7Qu9C+0LLQutC4INGB0YLQvtC70LHRhtC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAn0J7RgtGH0LXRgiDQvtCxINC40LzQv9C+0YDRgtC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICfQmNC80L/QvtGA0YLQuNGA0L7QstCw0L3QviDQt9Cw0L/QuNGB0LXQuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHBvcnRlZCByZWNvcmRzJ30gPSAn0K3QutGB0L/QvtGA0YLQuNGA0L7QstCw0L3QviDQt9Cw0L/QuNGB0LXQuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAn0JfQsNC/0LjRgdC10LknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2tpcHBlZCd9ID0gJ9Cf0YDQvtC/0YPRidC10L3Qvic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INCY0LzQv9C+0YDRgtC+0Lwv0K3QutGB0L/QvtGA0YLQvtC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICfQodC+0LfQtNCw0LnRgtC1INGI0LDQsdC70L7QvSDQtNC70Y8g0LjQvNC/0L7RgNGC0LAg0Lgg0Y3QutGB0L/QvtGA0YLQsCDQuNC90YTQvtGA0LzQsNGG0LjQuCDQvtCx0YrQtdC60YLQvtCyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ9Cd0LDRh9Cw0YLRjCDQuNC80L/QvtGA0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAn0J3QsNGH0LDRgtGMINGN0LrRgdC/0L7RgNGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICfQotGA0LXQsdGD0LXRgtGB0Y8g0LjQvNGPISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgaXMgcmVxdWlyZWQhJ30gPSAn0J7QsdGK0LXQutGCINC+0LHRj9C30LDRgtC10LvQtdC9ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAn0KTQvtGA0LzQsNGCINC+0LHRj9C30LDRgtC10LvQtdC9ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ9C+0LHRj9C30LDRgtC10LvQtdC9ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAn0J3QtdGCINGN0LvQtdC80LXQvdGC0L7QsiDRgdC+0L/QvtGB0YLQsNCy0LvQtdC90LjRjy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJ9CU0L7QsdCw0LLRjNGC0LUg0Y3Qu9C10LzQtdC90YIg0YHQvtC/0L7RgdGC0LDQstC70LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ9Ce0LPRgNCw0L3QuNGH0LjRgtGMINGN0LrRgdC/0L7RgNGCINC/0L7QuNGB0LrQvtC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ9CY0L3RhNC+0YDQvNCw0YbQuNGPINC+0LEg0LjQvNC/0L7RgNGC0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICfQmNGB0YXQvtC00L3Ri9C5INGE0LDQudC7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3MnfSA9ICfQo9GB0L/QtdGI0L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICfQndC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICfQlNGD0LHQu9C40YDRg9GO0YnQuNC1INC40LzQtdC90LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICfQndC+0LzQtdGAINC/0L7RgdC70LXQtNC90LXQuSDQvtCx0YDQsNCx0L7RgtCw0L3QvdC+0Lkg0YHRgtGA0L7QutC4INC40LzQv9C+0YDRgtC40YDRg9C10LzQvtCz0L4g0YTQsNC50LvQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uINC00LvRjyDQvNC+0LTRg9C70Y8gaW1wb3J0L2V4cG9ydC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ9CY0LzQv9C+0YDRgiDQuCDRjdC60YHQv9C+0YDRgiDQuNC90YTQvtGA0LzQsNGG0LjQuCDQvtCxINC+0LHRitC10LrRgtCw0YUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ9CY0LzQv9C+0YDRgi/QrdC60YHQv9C+0YDRgic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6c3JfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ09uZ2V6YSBraWVsZXpvIGNoYSBrdXdla2EgcmFtYW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdTZXRpIHlhIGhlcnVmaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2xvbiAoOiknfSA9ICdDb2xvbiAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAnU2FmdXdpbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ0tpdGVuZ2FuaXNoaSBzYWZ1IHdpbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ051a3RhICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnQWxhbWEgeWEgbnVrdGEgbWthdG8gKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYm8gKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ0FtYmF0aXNoYSB2aWNod2EgdnlhIGhhYmFyaSB2eWEgc2FmdXdpbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAnTGV0YSBtdWh0YXNhcmkga3dhIGFqaWxpIHlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICdLdW1idWt1bWJ1IHppbGl6b2xldHdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cG9ydGVkIHJlY29yZHMnfSA9ICdLdW1idWt1bWJ1IHppbGl6b2hhbWlzaHdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICdLdW1idWt1bWJ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdSdWt3YSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ1VzaW1hbWl6aSB3YSBrdWxldGEvSGFtaXNoYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnVGVuZ2VuZXphIGtpb2xlem8ga3VsZXRhIG5hIGt1aGFtaXNoYSB0YWFyaWZhIHphIGtpcGVuZ2VlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ0FuemEga3VsZXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ0FuemEga3VoYW1pc2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdKaW5hIGxpbmFoaXRhamlrYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ0tpcGVuZ2VlIGtpbmFoaXRhamlrYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ1VtYml6byB1bmFoaXRhamlrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ0luYWhpdGFqaWthJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdIYWt1bmEgZWxlbWVudGkgemlsaXpvcGF0aWthbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJ09uZ2V6YSBlbGVtZW50aSB6YSBrdXdla2EgcmFtYW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdadWlhIHVoYW1pc2hhamkga3dhIGtpbGEgdXRhZnV0YWppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0xldGEgdGFhcmlmYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UgRmlsZSd9ID0gJ0ZhaWxpIGxhIGNoYW56byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnTWFmYW5pa2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZhaWxlZCd9ID0gJ1NoaW5kd2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnSmluYSBsaW1lamlydWRpYTonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICdOYW1iYSB5YSBtc3RhcmkgdW5hb2thdGlrYSBtY2hha2F0byB3YSBtd2lzaG8gd2EgZmFpbGkgbGlsaWxvbGV0d2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdTYXdhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdVbWJpemEgdXNhamlsaSB3YSBtb2R1bGkgd2EgbWF6aW5naXJhIHlhIG55dW1hIGt3YSBhamlsaSB5YSBtb2R1bGkgeWEga3VsZXRhL2t1aGFtaXNoYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnTGV0YSBuYSBoYW1pc2hhIHRhYXJpZmEgemEga2lwZW5nZWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0xldGEvSGFtaXNoYSc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6c3ZfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAnVGVja2Vua29kbmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2xvbiAoOiknfSA9ICdLb2xvbiAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAnS29sdW1uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICdLb2x1bW4tYXZza2lsamFyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnUHVua3QgKC4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbWljb2xvbiAoOyknfSA9ICdTZW1pa29sb24gKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlIENvbHVtbiBIZWFkZXJzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvcid9ID0gJ0ltcG9ydHN1bW1lcmluZyBmw7ZyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICdJbXBvcnRlcmFkZSBwb3N0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwb3J0ZWQgcmVjb3Jkcyd9ID0gJ0V4cG9ydGVyYWRlIHBvc3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAnUG9zdGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdIb3BwYWRlIMO2dmVyJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkltcG9ydEV4cG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCBNYW5hZ2VtZW50J30gPSAnSGFudGVyaW5nIGF2IEltcG9ydC9FeHBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgdGVtcGxhdGUgdG8gaW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ1NrYXBhIGVuIG1hbGwgZsO2ciBhdHQgaW1wb3J0ZXJhIG9jaCBleHBvcnRlcmEgb2JqZWt0aW5mb3JtYXRpb24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ1N0YXJ0YSBpbXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgRXhwb3J0J30gPSAnU3RhcnRhIGV4cG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAnTmFtbiBrcsOkdnMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICdPYmpla3Qga3LDpHZzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgaXMgcmVxdWlyZWQhJ30gPSAnRm9ybWF0IGtyw6R2cyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICdrcsOkdnMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0ltcG9ydGluZm9ybWF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSBGaWxlJ30gPSAnS8OkbGxmaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ0x5Y2thZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICdNaXNzbHlja2FkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lcyd9ID0gJ1VwcHJlcGEgbmFtbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ0ltcG9ydGVyYSBvY2ggZXhwb3J0ZXJhIG9iamVrdGluZm9ybWF0aW9uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnSW1wb3J0L0V4cG9ydCc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6c3dfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ09uZ2V6YSBraWVsZXpvIGNoYSBrdXdla2EgcmFtYW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYXJzZXQnfSA9ICdTZXRpIHlhIGhlcnVmaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb2xvbiAoOiknfSA9ICdDb2xvbiAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAnU2FmdXdpbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uIFNlcGFyYXRvcid9ID0gJ0tpdGVuZ2FuaXNoaSBzYWZ1IHdpbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ051a3RhICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnQWxhbWEgeWEgbnVrdGEgbWthdG8gKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ1RhYm8gKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ0FtYmF0aXNoYSB2aWNod2EgdnlhIGhhYmFyaSB2eWEgc2FmdXdpbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAnTGV0YSBtdWh0YXNhcmkga3dhIGFqaWxpIHlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICdLdW1idWt1bWJ1IHppbGl6b2xldHdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cG9ydGVkIHJlY29yZHMnfSA9ICdLdW1idWt1bWJ1IHppbGl6b2hhbWlzaHdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY29yZHMnfSA9ICdLdW1idWt1bWJ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICdSdWt3YSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ1VzaW1hbWl6aSB3YSBrdWxldGEvSGFtaXNoYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnVGVuZ2VuZXphIGtpb2xlem8ga3VsZXRhIG5hIGt1aGFtaXNoYSB0YWFyaWZhIHphIGtpcGVuZ2VlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ0FuemEga3VsZXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ0FuemEga3VoYW1pc2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdKaW5hIGxpbmFoaXRhamlrYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ0tpcGVuZ2VlIGtpbmFoaXRhamlrYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ1VtYml6byB1bmFoaXRhamlrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ0luYWhpdGFqaWthJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICdIYWt1bmEgZWxlbWVudGkgemlsaXpvcGF0aWthbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJ09uZ2V6YSBlbGVtZW50aSB6YSBrdXdla2EgcmFtYW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzdHJpY3QgZXhwb3J0IHBlciBzZWFyY2gnfSA9ICdadWlhIHVoYW1pc2hhamkga3dhIGtpbGEgdXRhZnV0YWppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ0xldGEgdGFhcmlmYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UgRmlsZSd9ID0gJ0ZhaWxpIGxhIGNoYW56byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAnTWFmYW5pa2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZhaWxlZCd9ID0gJ1NoaW5kd2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAnSmluYSBsaW1lamlydWRpYTonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICdOYW1iYSB5YSBtc3RhcmkgdW5hb2thdGlrYSBtY2hha2F0byB3YSBtd2lzaG8gd2EgZmFpbGkgbGlsaWxvbGV0d2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdTYXdhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICdVbWJpemEgdXNhamlsaSB3YSBtb2R1bGkgd2EgbWF6aW5naXJhIHlhIG55dW1hIGt3YSBhamlsaSB5YSBtb2R1bGkgeWEga3VsZXRhL2t1aGFtaXNoYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnTGV0YSBuYSBoYW1pc2hhIHRhYXJpZmEgemEga2lwZW5nZWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ0xldGEvSGFtaXNoYSc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6dGhfVEhfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ+C5gOC4nuC4tOC5iOC4oeC5geC4oeC5iOC5geC4muC4muC4geC4suC4o+C4l+C4s+C5geC4nOC4meC4l+C4teC5iCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAn4LmA4LiL4LiV4LiE4Liy4LmA4Lij4LiB4LmA4LiV4Lit4Lij4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ+C5gOC4hOC4o+C4t+C5iOC4reC4h+C4q+C4oeC4suC4ouC4l+C4p+C4tOC4oOC4suC4hCAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAn4LiE4Lit4Lil4Lix4Lih4LiZ4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICfguJXguLHguKfguITguLHguYjguJnguITguK3guKXguLHguKHguJnguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ+C4iOC4uOC4lCguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAn4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lir4Lih4Liy4Lii4Lit4Lix4LiS4Lig4Liy4LiEKDspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RhYnVsYXRvciAoVEFCKSd9ID0gJ+C4leC4seC4p+C4l+C4s+C4leC4suC4o+C4suC4hyjguYHguJfguYfguJopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICfguKPguKfguKHguJfguLHguYnguIfguKrguYjguKfguJnguKvguLHguKfguILguK3guIfguITguK3guKXguLHguKHguJnguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAn4LiZ4Liz4LmA4LiC4LmJ4Liy4Lia4LiX4Liq4Lij4Li44Lib4Liq4Liz4Lir4Lij4Lix4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICfguIHguLLguKPguJrguLHguJnguJfguLbguIHguYTguJTguYnguJnguLPguYDguILguYnguLLguYHguKXguYnguKcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwb3J0ZWQgcmVjb3Jkcyd9ID0gJ+C4geC4suC4o+C4muC4seC4meC4l+C4tuC4geC5hOC4lOC5ieC4quC5iOC4h+C4reC4reC4geC5geC4peC5ieC4pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAn4LiB4Liy4Lij4Lia4Lix4LiZ4LiX4Li24LiBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICfguILguYnguLLguKHguYHguKXguYnguKcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICfguIHguLLguKPguIjguLHguJTguIHguLLguKMg4LiZ4Liz4LmA4LiC4LmJ4LiyL+C4quC5iOC4h+C4reC4reC4gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAn4Liq4Lij4LmJ4Liy4LiH4LmB4Lih4LmI4LmB4Lia4Lia4LmA4Lie4Li34LmI4Lit4LiZ4Liz4LmA4LiC4LmJ4Liy4LmB4Lil4Liw4Liq4LmI4LiH4Lit4Lit4LiB4LiC4LmJ4Lit4Lih4Li54Lil4Lit4Lit4Lia4LmA4LiI4LiB4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ+C5gOC4o+C4tOC5iOC4oeC4meC4s+C5gOC4guC5ieC4sic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICfguYDguKPguLTguYjguKHguKrguYjguIfguK3guK3guIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkISd9ID0gJ+C4leC5ieC4reC4h+C4o+C4sOC4muC4uOC4iuC4t+C5iOC4rSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ+C4leC5ieC4reC4h+C4o+C4sOC4muC4uOC4reC4reC4muC5gOC4iOC4geC4leC5jCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ+C4leC5ieC4reC4h+C4o+C4sOC4muC4uOC4o+C4ueC4m+C5geC4muC4miEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAyIG9mIDUgLSBFZGl0IG9iamVjdCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDMgb2YgNSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyByZXF1aXJlZCEnfSA9ICfguJXguYnguK3guIfguKPguLDguJrguLghJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgNCBvZiA1IC0gRWRpdCBtYXBwaW5nIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIG1hcCBlbGVtZW50cyBmb3VuZC4nfSA9ICfguYTguKHguYjguJ7guJrguK3guIfguITguYzguJvguKPguLDguIHguK3guJrguYHguJzguJnguJfguLXguYgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE1hcHBpbmcgRWxlbWVudCd9ID0gJ+C5gOC4nuC4tOC5iOC4oeC4reC4h+C4hOC5jOC4m+C4o+C4sOC4geC4reC4muC4guC4reC4h+C4geC4suC4o+C4l+C4s+C5geC4nOC4meC4l+C4teC5iCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDUgb2YgNSAtIEVkaXQgc2VhcmNoIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoJ30gPSAn4LiB4Liy4Lij4LiI4Liz4LiB4Lix4LiU4LiB4Liy4Lij4Liq4LmI4LiH4Lit4Lit4LiB4LiV4Liy4Lih4LiB4Liy4Lij4LiE4LmJ4LiZ4Lir4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBpbmZvcm1hdGlvbid9ID0gJ+C4guC5ieC4reC4oeC4ueC4peC4meC4s+C5gOC4guC5ieC4sic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UgRmlsZSd9ID0gJ+C5geC4q+C4peC5iOC4h+C5hOC4n+C4peC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzJ30gPSAn4LiE4Lin4Liy4Lih4Liq4Liz4LmA4Lij4LmH4LiIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZhaWxlZCd9ID0gJ+C4peC5ieC4oeC5gOC4q+C4peC4pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICfguIrguLfguYjguK3guIvguYnguLMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGUnfSA9ICfguKvguKHguLLguKLguYDguKXguILguILguK3guIfguIHguLLguKPguJvguKPguLDguKHguKfguKXguITguKPguLHguYnguIfguKrguLjguJTguJfguYnguLLguKLguILguK3guIfguIHguLLguKPguJnguLPguYTguJ/guKXguYzguYDguILguYnguLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICfguYLguK3guYDguIQnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ+C4o+C4ueC4m+C5geC4muC4muC4geC4suC4o+C4peC4h+C4l+C4sOC5gOC4muC4teC4ouC4meC5guC4oeC4lOC4ueC4pSBiYWNrZW5kIOC4quC4s+C4q+C4o+C4seC4muC5guC4oeC4lOC4ueC4peC4geC4suC4o+C4meC4s+C5gOC4guC5ieC4siAvIOC4quC5iOC4h+C4reC4reC4gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAn4LiB4Liy4Lij4LiZ4Liz4LmA4LiC4LmJ4Liy4Lir4Lij4Li34Lit4Liq4LmI4LiH4Lit4Lit4LiB4LiC4LmJ4Lit4Lih4Li54Lil4Lit4Lit4Lia4LmA4LiI4LiB4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICfguIHguLLguKPguJnguLPguYDguILguYnguLIv4Liq4LmI4LiH4Lit4Lit4LiBJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6dmlfVk5fSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ1Row6ptIG3huqt1IG1hcHBpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhcnNldCd9ID0gJ0Lhu5kgbcOjIGvDvSB04buxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ0ThuqV1IGhhaSBjaOG6pW0gKDopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbid9ID0gJ0Phu5l0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICdQaMOibiBjw6FjaCBj4buZdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3QgKC4pJ30gPSAnROG6pXUgY2jhuqVtICguKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW1pY29sb24gKDspJ30gPSAnROG6pXUgY2jhuqVtIHBo4bqpeSAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnQuG7mSBs4bqtcCBi4bqjbmcgKFRBQiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZSBDb2x1bW4gSGVhZGVycyd9ID0gJ0fhu5NtIHRpw6p1IMSR4buBIGPhu5l0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBzdW1tYXJ5IGZvcid9ID0gJ1TDs20gbMaw4bujYyBuaOG6rXAgdsOgbyBjaG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0ZWQgcmVjb3Jkcyd9ID0gJ0LhuqNuIGdoaSDEkcaw4bujYyBuaOG6rXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwb3J0ZWQgcmVjb3Jkcyd9ID0gJ0LhuqNuIGdoaSDEkcaw4bujYyB4deG6pXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3Jkcyd9ID0gJ0LhuqNuIGdoaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2lwcGVkJ30gPSAnQuG7iyBi4buPIHF1YSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JbXBvcnRFeHBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQgTWFuYWdlbWVudCd9ID0gJ1F14bqjbiBsw70gTmjhuq1wL1h14bqldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSB0ZW1wbGF0ZSB0byBpbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAnVOG6oW8gbeG7mXQgbeG6q3UgxJHhu4Mgbmjhuq1wIHbDoCB4deG6pXQgdGjDtG5nIHRpbiDEkeG7kWkgdMaw4bujbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEltcG9ydCd9ID0gJ0Lhuq90IMSR4bqndSBuaOG6rXAgdsOgbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGFydCBFeHBvcnQnfSA9ICdC4bqvdCDEkeG6p3UgeHXhuqV0IHJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMSBvZiA1IC0gRWRpdCBjb21tb24gaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZCEnfSA9ICdZw6p1IGPhuqd1IHBo4bqjaSBjw7MgdMOqbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IGlzIHJlcXVpcmVkISd9ID0gJ1nDqnUgY+G6p3UgcGjhuqNpIGPDsyDEkeG7kWkgdMaw4bujbmchJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBpcyByZXF1aXJlZCEnfSA9ICdZw6p1IGPhuqd1IHBo4bqjaSBjw7MgxJHhu4tuaCBk4bqhbmchJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMiBvZiA1IC0gRWRpdCBvYmplY3QgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCAzIG9mIDUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgcmVxdWlyZWQhJ30gPSAnbMOgIGLhuq90IGJ14buZYyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gbWFwIGVsZW1lbnRzIGZvdW5kLid9ID0gJ0tow7RuZyB0w6xtIHRo4bqleSDEkeG7kWkgdMaw4bujbmcgbWFwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTWFwcGluZyBFbGVtZW50J30gPSAnVGjDqm0gxJHhu5FpIHTGsOG7o25nIG1hcHBpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ0dp4bubaSBo4bqhbiBk4buvIGxp4buHdSB4deG6pXQgbeG7l2kgbOG6p24gdMOsbSBraeG6v20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGluZm9ybWF0aW9uJ30gPSAnVGjDtG5nIHRpbiBuaOG6rXAgdsOgbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UgRmlsZSd9ID0gJ1Thu4dwIG5ndeG7k24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ1Row6BuaCBjw7RuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICdM4buXaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZXMnfSA9ICdUcsO5bmcgdMOqbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IHByb2Nlc3NlZCBsaW5lIG51bWJlciBvZiBpbXBvcnQgZmlsZSd9ID0gJ0TDsm5nIGN14buRaSBjw7luZyDEkcaw4bujYyB44butIGzDvSB0cm9uZyB04buHcCBuaOG6rXAgdsOgbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ8SQ4buTbmcgw70nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJ8SQxINuZyBrw70gbcO0LcSRdW4gxJHhu4tuaCBk4bqhbmcgbuG7gW4gY2hvIG3DtC3EkXVuIG5o4bqtcC94deG6pXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IGFuZCBleHBvcnQgb2JqZWN0IGluZm9ybWF0aW9uLid9ID0gJ1Row7RuZyB0aW4gbmjhuq1wIHbDoCB4deG6pXQgxJHhu5FpIHTGsOG7o25nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0J30gPSAnTmjhuq1wL1h14bqldCc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6emhfQ05fSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ+WinuWKoOaYoOWwhOaooeeJiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAn5a2X56ym6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ+WGkuWPtyAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAn5YiXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICfliJfliIbpmpTnrKYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ+WPpeWPtyAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ+WIhuWPtyAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAnVEFC6ZSuIChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICfljIXmi6zliJfmoIfpopgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAn5a+85YWl5oC757uTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICflr7zlhaXorrDlvZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwb3J0ZWQgcmVjb3Jkcyd9ID0gJ+WvvOWHuuiusOW9lSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAn6K6w5b2VJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICfot7Pov4fnmoQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICflr7zlhaUv5a+85Ye6566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICfliJvlu7rmqKHmnb/lr7zlhaXlkozlr7zlh7rlr7nosaHkv6Hmga/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAn5byA5aeL5a+85YWlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ+W8gOWni+WvvOWHuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAn5ZG95ZCN5piv5b+F6ZyA55qE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICflr7nosaHmmK/lv4XpnIDnmoTvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ+agvOW8j+aYr+W/hemcgOeahO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ+aYr+W/hemcgOeahO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAn5rKh5pyJ5om+5Yiw5pig5bCE55qE5a2X5q61JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICfmt7vliqDmmKDlsITlrZfmrrUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ+aMieaQnOe0oumZkOWItuWvvOWHuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICflr7zlhaXkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICfmupDmlofku7YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ+aIkOWKnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICflpLHotKUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAn6YeN5aSN55qE5ZCN56ewJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAn5a+85YWl5paH5Lu25pyA5ZCO5aSE55CG55qE6KGM5pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAn56Gu5a6aJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbkltcG9ydEV4cG9ydC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBub3QgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkZWQgVGVtcGxhdGVJRCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gRXhwb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydudW1iZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnRlZ2VyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXIgYmlnZ2VyIHRoYW4gemVybyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBkYXRhLCBwbGVhc2UgaW5zZXJ0IGEgdmFsaWQgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IG5vdCBmb3VuZCEnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuJ30gPQogICAgICAgICfkuLrlr7zlhaUv5a+85Ye65qih5Z2X55qE5qC85byP5ZCO56uv5qih5Z2X5rOo5YaM44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICflr7zlhaXlkozlr7zlh7rlr7nosaHkv6Hmga/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0L0V4cG9ydCd9ID0gJ+WvvOWFpS/lr7zlh7onOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6emhfVFdfSW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbWFwcGluZyB0ZW1wbGF0ZSd9ID0gJ+WinuWKoOaYoOWwhOaooeeJiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFyc2V0J30gPSAn5a2X56ym6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbG9uICg6KSd9ID0gJ+WGkuiZnyAoOiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29sdW1uJ30gPSAn5YiXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbHVtbiBTZXBhcmF0b3InfSA9ICfliJfliIbpmpTnrKYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG90ICguKSd9ID0gJ+WPpeiZnyAoLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VtaWNvbG9uICg7KSd9ID0gJ+WIhuiZnyAoOyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFidWxhdG9yIChUQUIpJ30gPSAn5Yi26KGo6Y21IChUQUIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGUgQ29sdW1uIEhlYWRlcnMnfSA9ICfljIXmi6zliJfmqJnpoYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wb3J0IHN1bW1hcnkgZm9yJ30gPSAn5bCO5YWl57i957WQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydGVkIHJlY29yZHMnfSA9ICflt7LlsI7lhaXntIDpjIQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwb3J0ZWQgcmVjb3Jkcyd9ID0gJ+W3suWwjuWHuue0gOmMhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvcmRzJ30gPSAn57SA6YyEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NraXBwZWQnfSA9ICfot7PpgY7nmoQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSW1wb3J0RXhwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQnfSA9ICflsI7lhaUv5bCO5Ye6566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4nfSA9ICflibXlu7rmqKHmnb/lsI7lhaXlkozlsI7lh7rlsI3osaHkv6Hmga/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhcnQgSW1wb3J0J30gPSAn6ZaL5aeL5bCO5YWlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IEV4cG9ydCd9ID0gJ+mWi+Wni+WwjuWHuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDEgb2YgNSAtIEVkaXQgY29tbW9uIGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQhJ30gPSAn5ZCN56ix5piv5b+F6ZyA55qE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBpcyByZXF1aXJlZCEnfSA9ICflsI3osaHmmK/lv4XpnIDnmoTvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9ybWF0IGlzIHJlcXVpcmVkISd9ID0gJ+agvOW8j+aYr+W/hemcgOeahCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0ZXAgMyBvZiA1J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIHJlcXVpcmVkISd9ID0gJ+W/hemcgOeahCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGVwIDQgb2YgNSAtIEVkaXQgbWFwcGluZyBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBtYXAgZWxlbWVudHMgZm91bmQuJ30gPSAn5rKS5pyJ5om+5Yiw5pig5bCE55qE5a2X5q61JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBNYXBwaW5nIEVsZW1lbnQnfSA9ICfmt7vliqDmmKDlsITlrZfmrrUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RlcCA1IG9mIDUgLSBFZGl0IHNlYXJjaCBpbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXN0cmljdCBleHBvcnQgcGVyIHNlYXJjaCd9ID0gJ+mZkOWItuWwjuWHuuavj+WAi+aQnOWwiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgaW5mb3JtYXRpb24nfSA9ICflsI7lhaXkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlIEZpbGUnfSA9ICfmupDmlofku7YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzcyd9ID0gJ+aIkOWKnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGYWlsZWQnfSA9ICflpLHmlZcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWVzJ30gPSAn6YeN6KSH55qE5ZCN56ixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlJ30gPSAn5bCO5YWl5paH5Lu25pyA5b6M6JmV55CG55qE6KGM5pW4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSW1wb3J0RXhwb3J0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIG5vdCBmb3VuZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGluc2VydC91cGRhdGUgdGVtcGxhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWRlZCBUZW1wbGF0ZUlEISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvciBvY2N1cnJlZC4gSW1wb3J0IGltcG9zc2libGUhIFNlZSBTeXNsb2cgZm9yIGRldGFpbHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yIG9jY3VycmVkLiBFeHBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbnVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J251bWJlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ludGVnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW50ZWdlciBiaWdnZXIgdGhhbiB6ZXJvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VsZW1lbnQgcmVxdWlyZWQsIHBsZWFzZSBpbnNlcnQgZGF0YSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JtYXQgbm90IGZvdW5kISd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zvcm1hdCBiYWNrZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbXBvcnQvZXhwb3J0IG1vZHVsZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQgYW5kIGV4cG9ydCBvYmplY3QgaW5mb3JtYXRpb24uJ30gPSAn5bCO5YWl5ZKM5bCO5Ye65bCN6LGh5L+h5oGvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcG9ydC9FeHBvcnQnfSA9ICflsI7lhaUv5bCO5Ye6JzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pbkltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkSW1wb3J0RXhwb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyB0ZW1wbGF0ZSBlZGl0IChjb21tb24pCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVGVtcGxhdGVFZGl0MScgKSB7CgogICAgICAgICMgZ2V0IG9iamVjdCBsaXN0CiAgICAgICAgbXkgJE9iamVjdExpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3RMaXN0KCk7CgogICAgICAgIGlmICggISRPYmplY3RMaXN0ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIG9iamVjdCBiYWNrZW5kIGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCBmb3JtYXQgbGlzdAogICAgICAgIG15ICRGb3JtYXRMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0TGlzdCgpOwoKICAgICAgICBpZiAoICEkRm9ybWF0TGlzdCApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJFRlbXBsYXRlRGF0YTsKICAgICAgICBteSAkVGVtcGxhdGVJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUZW1wbGF0ZUlEJyApOwoKICAgICAgICBteSAkU2F2ZUNvbnRpbnVlOwogICAgICAgICRTYXZlQ29udGludWUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU3VibWl0TmV4dCcgKTsKCiAgICAgICAgaWYgKCAhJFNhdmVDb250aW51ZSApIHsKCiAgICAgICAgICAgICMgaWYgbmVlZGVkIG5ldyBmb3JtCiAgICAgICAgICAgIGlmICggISRUZW1wbGF0ZUlEICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fTWFza1RlbXBsYXRlRWRpdDEoCiAgICAgICAgICAgICAgICAgICAgTmV3ID0+IDEsCiAgICAgICAgICAgICAgICAgICAgJVBhcmFtCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlmIHRoZXJlIGlzIHRlbXBsYXRlIGlkCiAgICAgICAgICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgICAgICAgICAgJFRlbXBsYXRlRGF0YSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9ICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnVGVtcGxhdGUgbm90IGZvdW5kIScpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiBlZGl0CiAgICAgICAgICAgIGlmICggJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9ICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fTWFza1RlbXBsYXRlRWRpdDEoICVQYXJhbSwgJXskVGVtcGxhdGVEYXRhfSApOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgIyBpZiBzYXZlICYgY29udGludWUKICAgICAgICBteSAlU2VydmVyRXJyb3I7CgogICAgICAgICMgZ2V0IGFsbCBkYXRhIGZvciBwYXJhbXMgYW5kIGNoZWNrIGZvciBlcnJvcnMKICAgICAgICBmb3IgbXkgJFBhcmFtIChxdyhDb21tZW50IE9iamVjdCBGb3JtYXQgTmFtZSBWYWxpZElEIFRlbXBsYXRlSUQpKSB7CiAgICAgICAgICAgICRUZW1wbGF0ZURhdGEtPnskUGFyYW19ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAjIGlzIGEgbmV3IHRlbXBsYXRlPwogICAgICAgIG15ICROZXc7CiAgICAgICAgaWYgKCAhJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9ICkgewogICAgICAgICAgICAkTmV3ID0gMTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgbmVlZGVkIGZpZWxkcwogICAgICAgICMgZm9yIG5ldyB0ZW1wbGF0ZXMKICAgICAgICBpZiAoJE5ldykgewoKICAgICAgICAgICAgaWYgKCAhJFRlbXBsYXRlRGF0YS0+e09iamVjdH0gKSB7CiAgICAgICAgICAgICAgICAkU2VydmVyRXJyb3J7T2JqZWN0fSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggISRUZW1wbGF0ZURhdGEtPntGb3JtYXR9ICkgewogICAgICAgICAgICAgICAgJFNlcnZlckVycm9ye0Zvcm1hdH0gPSAxOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgIyBmb3IgYWxsIHRlbXBsYXRlcwogICAgICAgIGlmICggISRUZW1wbGF0ZURhdGEtPntOYW1lfSApIHsKICAgICAgICAgICAgJFNlcnZlckVycm9ye05hbWV9ID0gMTsKICAgICAgICB9CgogICAgICAgICMgaWYgc29tZSBlcnJvcgogICAgICAgIGlmICggJFNlcnZlckVycm9ye0Zvcm1hdH0gfHwgJFNlcnZlckVycm9ye09iamVjdH0gfHwgJFNlcnZlckVycm9ye05hbWV9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9NYXNrVGVtcGxhdGVFZGl0MSgKICAgICAgICAgICAgICAgIFNlcnZlckVycm9yID0+IFwlU2VydmVyRXJyb3IsCiAgICAgICAgICAgICAgICBOZXcgICAgICAgICA9PiAkTmV3LAogICAgICAgICAgICAgICAgJXskVGVtcGxhdGVEYXRhfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2F2ZSB0byBkYXRhYmFzZQogICAgICAgIG15ICRTdWNjZXNzOwoKICAgICAgICBpZiAoJE5ldykgewogICAgICAgICAgICAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZUFkZCgKICAgICAgICAgICAgICAgICV7JFRlbXBsYXRlRGF0YX0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkU3VjY2VzcyA9ICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVVcGRhdGUoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgJXskVGVtcGxhdGVEYXRhfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0NhblwndCBpbnNlcnQvdXBkYXRlIHRlbXBsYXRlIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+CiAgICAgICAgICAgICAgICAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249VGVtcGxhdGVFZGl0MjtUZW1wbGF0ZUlEPSRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHRlbXBsYXRlIGVkaXQgKG9iamVjdCkKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdUZW1wbGF0ZUVkaXQyJyApIHsKCiAgICAgICAgIyBnZXQgb2JqZWN0IGxpc3QKICAgICAgICBteSAkT2JqZWN0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdExpc3QoKTsKCiAgICAgICAgaWYgKCAhJE9iamVjdExpc3QgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGZvcm1hdCBsaXN0CiAgICAgICAgbXkgJEZvcm1hdExpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRMaXN0KCk7CgogICAgICAgIGlmICggISRGb3JtYXRMaXN0ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0ZW1wbGF0ZSBpZAogICAgICAgIG15ICRUZW1wbGF0ZUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1RlbXBsYXRlSUQnICk7CgogICAgICAgIGlmICggISRUZW1wbGF0ZUlEICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05lZWRlZCBUZW1wbGF0ZUlEIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBteSAkU3VibWl0TmV4dCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdWJtaXROZXh0JyApOwoKICAgICAgICBpZiAoICEkU3VibWl0TmV4dCApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fTWFza1RlbXBsYXRlRWRpdDIoIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQgKTsKICAgICAgICB9CgogICAgICAgICMgc2F2ZSB0ZW1wbGF0ZSBzdGFydHMgaGVyZQoKICAgICAgICAjIGdldCBvYmplY3QgYXR0cmlidXRlcwogICAgICAgIG15ICRPYmplY3RBdHRyaWJ1dGVMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0QXR0cmlidXRlc0dldCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJUF0dHJpYnV0ZVZhbHVlczsKCiAgICAgICAgbXkgJEVycm9yID0gMDsKICAgICAgICBteSAlU2VydmVyRXJyb3I7CiAgICAgICAgbXkgJURhdGFUeXBlRXJyb3I7CgogICAgICAgICMgZ2V0IGF0dHJpYnV0ZSB2YWx1ZXMgZnJvbSBmb3JtCiAgICAgICAgZm9yIG15ICRJdGVtICggQHskT2JqZWN0QXR0cmlidXRlTGlzdH0gKSB7CgogICAgICAgICAgICAjIGdldCBmb3JtIGRhdGEKICAgICAgICAgICAgJEF0dHJpYnV0ZVZhbHVlc3sgJEl0ZW0tPntLZXl9IH0gPSAkTGF5b3V0T2JqZWN0LT5JbXBvcnRFeHBvcnRGb3JtRGF0YUdldCgKICAgICAgICAgICAgICAgIEl0ZW0gPT4gJEl0ZW0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlbG9hZCBmb3JtIGlmIHZhbHVlIGlzIHJlcXVpcmVkIGFuZCBpcyBub3QgdGhlcmUKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0Zvcm19LT57SW52YWxpZH0gKSB7CiAgICAgICAgICAgICAgICAkU2VydmVyRXJyb3J7ICRJdGVtLT57TmFtZX0gfSA9IDE7CiAgICAgICAgICAgICAgICAkRXJyb3IgPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGVWYWx1ZXN7ICRJdGVtLT57S2V5fSB9ICkgewoKICAgICAgICAgICAgICAgICMgbG9vayBmb3IgcmVnZXhwIGZvciBkYXRhIHR5cGUgYWxsb3dlZAogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRJdGVtLT57SW5wdXR9LT57UmVnZXh9CiAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgICAgICAgICAhJEF0dHJpYnV0ZVZhbHVlc3sgJEl0ZW0tPntLZXl9IH0gPX4gJEl0ZW0tPntJbnB1dH0tPntSZWdleH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICREYXRhVHlwZUVycm9yeyAkSXRlbS0+e05hbWV9IH0gPSAxOwogICAgICAgICAgICAgICAgICAgICRFcnJvciA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICAjIHJlbG9hZCB3aXRoIHNlcnZlciBlcnJvcnMKICAgICAgICBpZiAoJEVycm9yKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X01hc2tUZW1wbGF0ZUVkaXQyKAogICAgICAgICAgICAgICAgU2VydmVyRXJyb3IgICAgICA9PiBcJVNlcnZlckVycm9yLAogICAgICAgICAgICAgICAgRGF0YVR5cGVFcnJvciAgICA9PiBcJURhdGFUeXBlRXJyb3IsCiAgICAgICAgICAgICAgICBUZW1wbGF0ZURhdGFGb3JtID0+IFwlQXR0cmlidXRlVmFsdWVzLAogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICAgICA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2F2ZSB0aGUgb2JqZWN0IGRhdGEKICAgICAgICAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3REYXRhU2F2ZSgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiBcJUF0dHJpYnV0ZVZhbHVlcywKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249VGVtcGxhdGVFZGl0MztUZW1wbGF0ZUlEPSRUZW1wbGF0ZUlEIiwKICAgICAgICApOwoKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHRlbXBsYXRlIGVkaXQgKGZvcm1hdCkKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdUZW1wbGF0ZUVkaXQzJyApIHsKCiAgICAgICAgIyBnZXQgb2JqZWN0IGxpc3QKICAgICAgICBteSAkT2JqZWN0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdExpc3QoKTsKCiAgICAgICAgaWYgKCAhJE9iamVjdExpc3QgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGZvcm1hdCBsaXN0CiAgICAgICAgbXkgJEZvcm1hdExpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRMaXN0KCk7CgogICAgICAgIGlmICggISRGb3JtYXRMaXN0ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0ZW1wbGF0ZSBpZAogICAgICAgIG15ICRUZW1wbGF0ZUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1RlbXBsYXRlSUQnICk7CgogICAgICAgIGlmICggISRUZW1wbGF0ZUlEICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05lZWRlZCBUZW1wbGF0ZUlEIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBteSAkU3VibWl0TmV4dCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdWJtaXROZXh0JyApOwoKICAgICAgICBpZiAoICEkU3VibWl0TmV4dCApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fTWFza1RlbXBsYXRlRWRpdDMoIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQgKTsKICAgICAgICB9CgogICAgICAgICMgc2F2ZSBzdGFydGluZyBoZXJlCgogICAgICAgICMgZ2V0IGZvcm1hdCBhdHRyaWJ1dGVzCiAgICAgICAgbXkgJEZvcm1hdEF0dHJpYnV0ZUxpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBmb3JtYXQgZGF0YQogICAgICAgIG15ICRGb3JtYXREYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0RGF0YUdldCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJEVycm9yID0gMDsKICAgICAgICBteSAlU2VydmVyRXJyb3I7CgogICAgICAgICMgZ2V0IGF0dHJpYnV0ZSB2YWx1ZXMgZnJvbSBmb3JtCiAgICAgICAgbXkgJUF0dHJpYnV0ZVZhbHVlczsKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBAeyRGb3JtYXRBdHRyaWJ1dGVMaXN0fSApIHsKCiAgICAgICAgICAgICMgZ2V0IGZvcm0gZGF0YQogICAgICAgICAgICAkQXR0cmlidXRlVmFsdWVzeyAkSXRlbS0+e0tleX0gfSA9ICRMYXlvdXRPYmplY3QtPkltcG9ydEV4cG9ydEZvcm1EYXRhR2V0KAogICAgICAgICAgICAgICAgSXRlbSA9PiAkSXRlbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVsb2FkIGZvcm0gaWYgdmFsdWUgaXMgcmVxdWlyZWQKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0Zvcm19LT57SW52YWxpZH0gKSB7CiAgICAgICAgICAgICAgICAkU2VydmVyRXJyb3J7ICRJdGVtLT57TmFtZX0gfSA9IDE7CiAgICAgICAgICAgICAgICAkRXJyb3IgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHJlbG9hZCB3aXRoIHNlcnZlciBlcnJvcnMKICAgICAgICBpZiAoJEVycm9yKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X01hc2tUZW1wbGF0ZUVkaXQzKAogICAgICAgICAgICAgICAgU2VydmVyRXJyb3IgPT4gXCVTZXJ2ZXJFcnJvciwKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIHRoZSBmb3JtYXQgZGF0YQogICAgICAgICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdERhdGFTYXZlKAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICBGb3JtYXREYXRhID0+IFwlQXR0cmlidXRlVmFsdWVzLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1UZW1wbGF0ZUVkaXQ0O1RlbXBsYXRlSUQ9JFRlbXBsYXRlSUQiLAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyB0ZW1wbGF0ZSBlZGl0IChtYXBwaW5nKQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1RlbXBsYXRlRWRpdDQnICkgewoKICAgICAgICAjIGdldCBvYmplY3QgbGlzdAogICAgICAgIG15ICRPYmplY3RMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0TGlzdCgpOwoKICAgICAgICBpZiAoICEkT2JqZWN0TGlzdCApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZm9ybWF0IGxpc3QKICAgICAgICBteSAkRm9ybWF0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdExpc3QoKTsKCiAgICAgICAgaWYgKCAhJEZvcm1hdExpc3QgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIG15ICRUZW1wbGF0ZURhdGEgPSB7fTsKICAgICAgICAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGVtcGxhdGVJRCcgKTsKCiAgICAgICAgIyBnZXQgdGVtcGxhdGUgZGF0YQogICAgICAgICRUZW1wbGF0ZURhdGEgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZUdldCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdUZW1wbGF0ZSBub3QgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgT2JqZWN0T3B0aW9uU3RyZwogICAgICAgIG15ICRPYmplY3RPcHRpb25TdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkT2JqZWN0TGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdPYmplY3QnLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFRlbXBsYXRlRGF0YS0+e09iamVjdH0sCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICMgZ2VuZXJhdGUgRm9ybWF0T3B0aW9uU3RyZwogICAgICAgIG15ICRGb3JtYXRPcHRpb25TdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkRm9ybWF0TGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdGb3JtYXQnLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFRlbXBsYXRlRGF0YS0+e0Zvcm1hdH0sCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBPYmplY3RPcHRpb25TdHJnID0+ICRPYmplY3RPcHRpb25TdHJnLAogICAgICAgICAgICAgICAgRm9ybWF0T3B0aW9uU3RyZyA9PiAkRm9ybWF0T3B0aW9uU3RyZywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdCcgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RlbXBsYXRlRWRpdDQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICV7JFRlbXBsYXRlRGF0YX0sCiAgICAgICAgICAgICAgICBPYmplY3ROYW1lID0+ICRPYmplY3RMaXN0LT57ICRUZW1wbGF0ZURhdGEtPntPYmplY3R9IH0sCiAgICAgICAgICAgICAgICBGb3JtYXROYW1lID0+ICRGb3JtYXRMaXN0LT57ICRUZW1wbGF0ZURhdGEtPntGb3JtYXR9IH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgbWFwcGluZyBkYXRhIGxpc3QKICAgICAgICBteSAkTWFwcGluZ0xpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nTGlzdCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IG9iamVjdCBhdHRyaWJ1dGVzCiAgICAgICAgbXkgJE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBmb3JtYXQgYXR0cmlidXRlcwogICAgICAgIG15ICRNYXBwaW5nRm9ybWF0QXR0cmlidXRlcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgaGVhZGVycyBmb3Igb2JqZWN0IGFuZCBhZGQgY29tbW9uIGhlYWRlcnMKICAgICAgICBteSBASGVhZGVyczsKCiAgICAgICAgZm9yIG15ICRIZWFkZXIgKCBAeyRNYXBwaW5nT2JqZWN0QXR0cmlidXRlc30gKSB7CiAgICAgICAgICAgIHB1c2ggQEhlYWRlcnMsICRIZWFkZXItPntOYW1lfTsKICAgICAgICB9CgogICAgICAgIGZvciBteSAkQ29tbW9uSGVhZGVyICggJ0NvbHVtbicsICdVcCcsICdEb3duJywgJ0RlbGV0ZScgKSB7CiAgICAgICAgICAgIHB1c2ggQEhlYWRlcnMsICRDb21tb25IZWFkZXI7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJEhlYWRlciAoQEhlYWRlcnMpIHsKCiAgICAgICAgICAgICMgb3V0cHV0IGF0dHJpYnV0ZSByb3cKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQ0VGFibGVIZWFkZXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgSGVhZGVyID0+ICRIZWFkZXIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB0byB1c2UgaW4gY29sc3BhbiBmb3IgJ25vIGRhdGEgZm91bmQnIG1lc3NhZ2UKICAgICAgICBteSAkSGVhZGVyQ291bnRlciA9IEBIZWFkZXJzOwoKICAgICAgICBteSAkRW1wdHlNYXAgICAgICAgICAgICA9IDE7CiAgICAgICAgbXkgJEF0dHJpYnV0ZVJvd0NvdW50ZXIgPSAwOwogICAgICAgIGZvciBteSAkTWFwcGluZ0lEICggQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAgICAgJEVtcHR5TWFwID0gMDsKCiAgICAgICAgICAgICMgb3V0cHV0IGF0dHJpYnV0ZSByb3cKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQ0Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE1hcHBpbmdJRCA9PiAkTWFwcGluZ0lELAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IG1hcHBpbmcgb2JqZWN0IGRhdGEKICAgICAgICAgICAgbXkgJE1hcHBpbmdPYmplY3REYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ09iamVjdERhdGFHZXQoCiAgICAgICAgICAgICAgICBNYXBwaW5nSUQgPT4gJE1hcHBpbmdJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBtYXBwaW5nIGZvcm1hdCBkYXRhCiAgICAgICAgICAgIG15ICRNYXBwaW5nRm9ybWF0RGF0YSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdGb3JtYXREYXRhR2V0KAogICAgICAgICAgICAgICAgTWFwcGluZ0lEID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZm9yIG15ICRJdGVtICggQHskTWFwcGluZ09iamVjdEF0dHJpYnV0ZXN9ICkgewoKICAgICAgICAgICAgICAgICMgY3JlYXRlIGZvcm0gaW5wdXQKICAgICAgICAgICAgICAgIG15ICRJbnB1dFN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkltcG9ydEV4cG9ydEZvcm1JbnB1dENyZWF0ZSgKICAgICAgICAgICAgICAgICAgICBJdGVtICAgPT4gJEl0ZW0sCiAgICAgICAgICAgICAgICAgICAgUHJlZml4ID0+ICdPYmplY3Q6OicgLiAkQXR0cmlidXRlUm93Q291bnRlciAuICc6OicsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgID0+ICRNYXBwaW5nT2JqZWN0RGF0YS0+eyAkSXRlbS0+e0tleX0gfSwKICAgICAgICAgICAgICAgICAgICBJRCAgICAgPT4gJEl0ZW0tPntLZXl9IC4gJEF0dHJpYnV0ZVJvd0NvdW50ZXIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgb3V0cHV0IGF0dHJpYnV0ZSByb3cKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RlbXBsYXRlRWRpdDRDb2x1bW4nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJEl0ZW0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgSUQgICAgICAgID0+ICdPYmplY3Q6OicgLiAkQXR0cmlidXRlUm93Q291bnRlciAuICc6OicgLiAkSXRlbS0+e0tleX0sCiAgICAgICAgICAgICAgICAgICAgICAgIElucHV0U3RyZyA9PiAkSW5wdXRTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIgICA9PiAkQXR0cmlidXRlUm93Q291bnRlciwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIG15ICRJdGVtICggQHskTWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXN9ICkgewoKICAgICAgICAgICAgICAgICMgb3V0cHV0IGNvbHVtbiBjb3VudGVyCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQ0TWFwTnVtYmVyQ29sdW1uJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlciA9PiAkQXR0cmlidXRlUm93Q291bnRlciwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBoaWRlIHRoZSB1cCBidXR0b24gZm9yIGZpcnN0IGVsZW1lbnQgYW5kIGRvd24gYnV0dG9uIGZvciB0aGUgbGFzdCBlbGVtZW50CiAgICAgICAgICAgIG15ICRVcEJsb2NrOwogICAgICAgICAgICBteSAkRG93bkJsb2NrOwogICAgICAgICAgICBteSAkTnVtYmVyT2ZFbGVtZW50cyA9IEB7JE1hcHBpbmdMaXN0fTsKCiAgICAgICAgICAgIGlmICggJEF0dHJpYnV0ZVJvd0NvdW50ZXIgPT0gMCApIHsKICAgICAgICAgICAgICAgICRVcEJsb2NrID0gJ1RlbXBsYXRlRWRpdDROb1VwQnV0dG9uJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRVcEJsb2NrID0gJ1RlbXBsYXRlRWRpdDRVcEJ1dHRvbic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhpcyBpcyB0aGUgbGFzdCBlbGVtZW50CiAgICAgICAgICAgIGlmICggJEF0dHJpYnV0ZVJvd0NvdW50ZXIgPT0gKCAkTnVtYmVyT2ZFbGVtZW50cyAtIDEgKSApIHsKICAgICAgICAgICAgICAgICREb3duQmxvY2sgPSAnVGVtcGxhdGVFZGl0NE5vRG93bkJ1dHRvbic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkRG93bkJsb2NrID0gJ1RlbXBsYXRlRWRpdDREb3duQnV0dG9uJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB1cCBidXR0b24gYmxvY2sKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICRVcEJsb2NrLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7IE1hcHBpbmdJRCA9PiAkTWFwcGluZ0lEIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRvd24gYnV0dG9uIGJsb2NrCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAkRG93bkJsb2NrLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7IE1hcHBpbmdJRCA9PiAkTWFwcGluZ0lEIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQXR0cmlidXRlUm93Q291bnRlcisrOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgYW4gZW1wdHkgbGlzdAogICAgICAgIGlmICgkRW1wdHlNYXApIHsKCiAgICAgICAgICAgICMgb3V0cHV0IGxpc3QKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQ0Tm9NYXBGb3VuZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBDb2x1bW5zID0+ICRIZWFkZXJDb3VudGVyLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGhlYWRlciBhbmQgbmF2YmFyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluSW1wb3J0RXhwb3J0JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHRlbXBsYXRlIHNhdmUgKG1hcHBpbmcpCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVGVtcGxhdGVTYXZlNCcgKSB7CgogICAgICAgICMgZ2V0IHRlbXBsYXRlIGlkCiAgICAgICAgbXkgJFRlbXBsYXRlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGVtcGxhdGVJRCcgKTsKCiAgICAgICAgbXkgJVN1Ym1pdCA9ICgKICAgICAgICAgICAgU3VibWl0TmV4dCA9PiAnVGVtcGxhdGVFZGl0NScsCiAgICAgICAgICAgIFN1Ym1pdEJhY2sgPT4gJ1RlbXBsYXRlRWRpdDMnLAogICAgICAgICAgICBSZWxvYWQgICAgID0+ICdUZW1wbGF0ZUVkaXQ0JywKICAgICAgICAgICAgTWFwcGluZ0FkZCA9PiAnVGVtcGxhdGVFZGl0NCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc3VibWl0IGFjdGlvbgogICAgICAgIG15ICRTdWJhY3Rpb24gICAgPSAkU3VibWl0e1JlbG9hZH07CiAgICAgICAgbXkgJFN1Ym1pdEJ1dHRvbiA9ICcnOwoKICAgICAgICBQQVJBTToKICAgICAgICBmb3IgbXkgJFN1Ym1pdEtleSAoIHNvcnQga2V5cyAlU3VibWl0ICkgewogICAgICAgICAgICBuZXh0IFBBUkFNIGlmICEkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkU3VibWl0S2V5ICk7CgogICAgICAgICAgICAkU3ViYWN0aW9uICAgID0gJFN1Ym1pdHskU3VibWl0S2V5fTsKICAgICAgICAgICAgJFN1Ym1pdEJ1dHRvbiA9ICRTdWJtaXRLZXk7CiAgICAgICAgICAgIGxhc3QgUEFSQU07CiAgICAgICAgfQoKICAgICAgICAjIGdldCBtYXBwaW5nIGRhdGEgbGlzdAogICAgICAgIG15ICRNYXBwaW5nTGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdMaXN0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBvYmplY3QgYXR0cmlidXRlcwogICAgICAgIG15ICRNYXBwaW5nT2JqZWN0QXR0cmlidXRlcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBmb3JtYXQgYXR0cmlidXRlcwogICAgICAgIG15ICRNYXBwaW5nRm9ybWF0QXR0cmlidXRlcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBteSAkQ291bnRlciA9IDA7CiAgICAgICAgTUFQUElOR0lEOgogICAgICAgIGZvciBteSAkTWFwcGluZ0lEICggQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAgICAgIyBnZXQgb2JqZWN0IGF0dHJpYnV0ZSB2YWx1ZXMKICAgICAgICAgICAgbXkgJU9iamVjdEF0dHJpYnV0ZVZhbHVlczsKICAgICAgICAgICAgZm9yIG15ICRJdGVtICggQHskTWFwcGluZ09iamVjdEF0dHJpYnV0ZXN9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IG9iamVjdCBmb3JtIGRhdGEKICAgICAgICAgICAgICAgICRPYmplY3RBdHRyaWJ1dGVWYWx1ZXN7ICRJdGVtLT57S2V5fSB9ID0gJExheW91dE9iamVjdC0+SW1wb3J0RXhwb3J0Rm9ybURhdGFHZXQoCiAgICAgICAgICAgICAgICAgICAgSXRlbSAgID0+ICRJdGVtLAogICAgICAgICAgICAgICAgICAgIFByZWZpeCA9PiAnT2JqZWN0OjonIC4gJENvdW50ZXIgLiAnOjonLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzYXZlIHRoZSBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICAgICAgICAgICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdPYmplY3REYXRhU2F2ZSgKICAgICAgICAgICAgICAgIE1hcHBpbmdJRCAgICAgICAgID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBcJU9iamVjdEF0dHJpYnV0ZVZhbHVlcywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IGZvcm1hdCBhdHRyaWJ1dGUgdmFsdWVzCiAgICAgICAgICAgIG15ICVGb3JtYXRBdHRyaWJ1dGVWYWx1ZXM7CiAgICAgICAgICAgIGZvciBteSAkSXRlbSAoIEB7JE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBmb3JtYXQgZm9ybSBkYXRhCiAgICAgICAgICAgICAgICAkRm9ybWF0QXR0cmlidXRlVmFsdWVzeyAkSXRlbS0+e0tleX0gfSA9ICRMYXlvdXRPYmplY3QtPkltcG9ydEV4cG9ydEZvcm1EYXRhR2V0KAogICAgICAgICAgICAgICAgICAgIEl0ZW0gICA9PiAkSXRlbSwKICAgICAgICAgICAgICAgICAgICBQcmVmaXggPT4gJ0Zvcm1hdDo6JyAuICRDb3VudGVyIC4gJzo6JywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2F2ZSB0aGUgbWFwcGluZyBmb3JtYXQgZGF0YQogICAgICAgICAgICAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nRm9ybWF0RGF0YVNhdmUoCiAgICAgICAgICAgICAgICBNYXBwaW5nSUQgICAgICAgICA9PiAkTWFwcGluZ0lELAogICAgICAgICAgICAgICAgTWFwcGluZ0Zvcm1hdERhdGEgPT4gXCVGb3JtYXRBdHRyaWJ1dGVWYWx1ZXMsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgIH0KCiAgICAgICAgTUFQUElOR0lEOgogICAgICAgIGZvciBteSAkTWFwcGluZ0lEICggQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAgICAgIyBkZWxldGUgdGhpcyBtYXBwaW5nIHJvdwogICAgICAgICAgICBpZiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICJNYXBwaW5nRGVsZXRlOjokTWFwcGluZ0lEIiApICkgewogICAgICAgICAgICAgICAgJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0RlbGV0ZSgKICAgICAgICAgICAgICAgICAgICBNYXBwaW5nSUQgID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBNQVBQSU5HSUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbW92ZSBtYXBwaW5nIGRhdGEgcm93IHVwCiAgICAgICAgICAgIGlmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gIk1hcHBpbmdVcDo6JE1hcHBpbmdJRCIgKSApIHsKICAgICAgICAgICAgICAgICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdVcCgKICAgICAgICAgICAgICAgICAgICBNYXBwaW5nSUQgID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBNQVBQSU5HSUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbW92ZSBtYXBwaW5nIGRhdGEgcm93IGRvd24KICAgICAgICAgICAgaWYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiTWFwcGluZ0Rvd246OiRNYXBwaW5nSUQiICkgKSB7CiAgICAgICAgICAgICAgICAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nRG93bigKICAgICAgICAgICAgICAgICAgICBNYXBwaW5nSUQgID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBNQVBQSU5HSUQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYWRkIGEgbmV3IG1hcHBpbmcgcm93CiAgICAgICAgaWYgKCAkU3VibWl0QnV0dG9uIGVxICdNYXBwaW5nQWRkJyApIHsKICAgICAgICAgICAgJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0FkZCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPSRTdWJhY3Rpb247VGVtcGxhdGVJRD0kVGVtcGxhdGVJRCIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHRlbXBsYXRlIGVkaXQgKHNlYXJjaCkKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdUZW1wbGF0ZUVkaXQ1JyApIHsKCiAgICAgICAgIyBnZXQgb2JqZWN0IGxpc3QKICAgICAgICBteSAkT2JqZWN0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdExpc3QoKTsKCiAgICAgICAgaWYgKCAhJE9iamVjdExpc3QgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gb2JqZWN0IGJhY2tlbmQgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGZvcm1hdCBsaXN0CiAgICAgICAgbXkgJEZvcm1hdExpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRMaXN0KCk7CgogICAgICAgIGlmICggISRGb3JtYXRMaXN0ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIGZvcm1hdCBiYWNrZW5kIGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkVGVtcGxhdGVEYXRhID0ge307CiAgICAgICAgJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1RlbXBsYXRlSUQnICk7CgogICAgICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgICAgICAkVGVtcGxhdGVEYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnVGVtcGxhdGUgbm90IGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIE9iamVjdE9wdGlvblN0cmcKICAgICAgICBteSAkT2JqZWN0T3B0aW9uU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJE9iamVjdExpc3QsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnT2JqZWN0JywKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRUZW1wbGF0ZURhdGEtPntPYmplY3R9LAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICApOwoKICAgICAgICAjIGdlbmVyYXRlIEZvcm1hdE9wdGlvblN0cmcKICAgICAgICBteSAkRm9ybWF0T3B0aW9uU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJEZvcm1hdExpc3QsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnRm9ybWF0JywKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRUZW1wbGF0ZURhdGEtPntGb3JtYXR9LAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgT2JqZWN0T3B0aW9uU3RyZyA9PiAkT2JqZWN0T3B0aW9uU3RyZywKICAgICAgICAgICAgICAgIEZvcm1hdE9wdGlvblN0cmcgPT4gJEZvcm1hdE9wdGlvblN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JyApOwoKICAgICAgICAjIGdldCBzZWFyY2ggZGF0YQogICAgICAgIG15ICRTZWFyY2hEYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+U2VhcmNoRGF0YUdldCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHJlc2NyaWN0IGV4cG9ydCBzdHJpbmcKICAgICAgICBteSAkUmVzdHJpY3RFeHBvcnRTdHJnID0gJExheW91dE9iamVjdC0+SW1wb3J0RXhwb3J0Rm9ybUlucHV0Q3JlYXRlKAogICAgICAgICAgICBJdGVtID0+IHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICdSZXN0cmljdEV4cG9ydCcsCiAgICAgICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnQ2hlY2tib3gnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmFsdWUgPT4gc2NhbGFyIGtleXMgJXskU2VhcmNoRGF0YX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgbGlzdAogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQ1JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAleyRUZW1wbGF0ZURhdGF9LAogICAgICAgICAgICAgICAgUmVzdHJpY3RFeHBvcnRTdHJnID0+ICRSZXN0cmljdEV4cG9ydFN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2VhcmNoIGF0dHJpYnV0ZXMKICAgICAgICBteSAkU2VhcmNoQXR0cmlidXRlTGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlNlYXJjaEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvYmplY3QgYXR0cmlidXRlcwogICAgICAgIGZvciBteSAkSXRlbSAoIEB7JFNlYXJjaEF0dHJpYnV0ZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBjcmVhdGUgZm9ybSBpbnB1dAogICAgICAgICAgICBteSAkSW5wdXRTdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5JbXBvcnRFeHBvcnRGb3JtSW5wdXRDcmVhdGUoCiAgICAgICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRTZWFyY2hEYXRhLT57ICRJdGVtLT57S2V5fSB9LAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCBhdHRyaWJ1dGUgcm93CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVGVtcGxhdGVFZGl0NUVsZW1lbnQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkSXRlbS0+e05hbWV9IHx8ICcnLAogICAgICAgICAgICAgICAgICAgIElucHV0U3RyZyA9PiAkSW5wdXRTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgSUQgICAgICAgID0+ICRJdGVtLT57S2V5fSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkltcG9ydEV4cG9ydCcsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyB0ZW1wbGF0ZSBzYXZlIChzZWFyY2gpCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVGVtcGxhdGVTYXZlNScgKSB7CgogICAgICAgICMgZ2V0IHRlbXBsYXRlIGlkCiAgICAgICAgbXkgJFRlbXBsYXRlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGVtcGxhdGVJRCcgKTsKCiAgICAgICAgbXkgJVN1Ym1pdCA9ICgKICAgICAgICAgICAgU3VibWl0TmV4dCA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBTdWJtaXRCYWNrID0+ICdUZW1wbGF0ZUVkaXQ0JywKICAgICAgICAgICAgUmVsb2FkICAgICA9PiAnVGVtcGxhdGVFZGl0NScsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc3VibWl0IGFjdGlvbgogICAgICAgIG15ICRTdWJhY3Rpb24gPSAkU3VibWl0e1JlbG9hZH07CgogICAgICAgIFBBUkFNOgogICAgICAgIGZvciBteSAkU3VibWl0S2V5ICggc29ydCBrZXlzICVTdWJtaXQgKSB7CiAgICAgICAgICAgIG5leHQgUEFSQU0gaWYgISRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRTdWJtaXRLZXkgKTsKCiAgICAgICAgICAgICRTdWJhY3Rpb24gPSAkU3VibWl0eyRTdWJtaXRLZXl9OwogICAgICAgICAgICBsYXN0IFBBUkFNOwogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgYWxsIHNlYXJjaCByZXN0cmljdGlvbnMKICAgICAgICBpZiAoICEkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnUmVzdHJpY3RFeHBvcnQnICkgKSB7CgogICAgICAgICAgICAjIGRlbGV0ZSBhbGwgc2VhcmNoIGRhdGEKICAgICAgICAgICAgJEltcG9ydEV4cG9ydE9iamVjdC0+U2VhcmNoRGF0YURlbGV0ZSgKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj0kU3ViYWN0aW9uO1RlbXBsYXRlSUQ9JFRlbXBsYXRlSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc2VhcmNoIGF0dHJpYnV0ZXMKICAgICAgICBteSAkU2VhcmNoQXR0cmlidXRlTGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlNlYXJjaEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGF0dHJpYnV0ZSB2YWx1ZXMgZnJvbSBmb3JtCiAgICAgICAgbXkgJUF0dHJpYnV0ZVZhbHVlczsKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBAeyRTZWFyY2hBdHRyaWJ1dGVMaXN0fSApIHsKCiAgICAgICAgICAgICMgZ2V0IGZvcm0gZGF0YQogICAgICAgICAgICAkQXR0cmlidXRlVmFsdWVzeyAkSXRlbS0+e0tleX0gfSA9ICRMYXlvdXRPYmplY3QtPkltcG9ydEV4cG9ydEZvcm1EYXRhR2V0KAogICAgICAgICAgICAgICAgSXRlbSA9PiAkSXRlbSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVsb2FkIGZvcm0gaWYgdmFsdWUgaXMgcmVxdWlyZWQKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0Zvcm19LT57SW52YWxpZH0gKSB7CiAgICAgICAgICAgICAgICAkU3ViYWN0aW9uID0gJFN1Ym1pdHtSZWxvYWR9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNhdmUgdGhlIHNlYXJjaCBkYXRhCiAgICAgICAgJEltcG9ydEV4cG9ydE9iamVjdC0+U2VhcmNoRGF0YVNhdmUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFNlYXJjaERhdGEgPT4gXCVBdHRyaWJ1dGVWYWx1ZXMsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPSRTdWJhY3Rpb247VGVtcGxhdGVJRD0kVGVtcGxhdGVJRCIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHRlbXBsYXRlIGRlbGV0ZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1RlbXBsYXRlRGVsZXRlJyApIHsKCiAgICAgICAgIyBnZXQgdGVtcGxhdGUgaWQKICAgICAgICBteSAkVGVtcGxhdGVJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUZW1wbGF0ZUlEJyApOwoKICAgICAgICAjIGRlbGV0ZSB0ZW1wbGF0ZSBmcm9tIGRhdGFiYXNlCiAgICAgICAgJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVEZWxldGUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgcmVkaXJlY3QgdG8gb3ZlcnZpZXcKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgaW1wb3J0IGluZm9ybWF0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSW1wb3J0SW5mb3JtYXRpb24nICkgewoKICAgICAgICAjIGdldCBvYmplY3QgbGlzdAogICAgICAgIG15ICRPYmplY3RMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0TGlzdCgpOwoKICAgICAgICBpZiAoICEkT2JqZWN0TGlzdCApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZm9ybWF0IGxpc3QKICAgICAgICBteSAkRm9ybWF0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdExpc3QoKTsKCiAgICAgICAgaWYgKCAhJEZvcm1hdExpc3QgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIG15ICRUZW1wbGF0ZURhdGEgPSB7fTsKICAgICAgICAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGVtcGxhdGVJRCcgKTsKCiAgICAgICAgIyBnZXQgdGVtcGxhdGUgZGF0YQogICAgICAgICRUZW1wbGF0ZURhdGEgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZUdldCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdUZW1wbGF0ZSBub3QgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgT2JqZWN0T3B0aW9uU3RyZwogICAgICAgIG15ICRPYmplY3RPcHRpb25TdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkT2JqZWN0TGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdPYmplY3QnLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFRlbXBsYXRlRGF0YS0+e09iamVjdH0sCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICMgZ2VuZXJhdGUgRm9ybWF0T3B0aW9uU3RyZwogICAgICAgIG15ICRGb3JtYXRPcHRpb25TdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkRm9ybWF0TGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdGb3JtYXQnLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFRlbXBsYXRlRGF0YS0+e0Zvcm1hdH0sCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBPYmplY3RPcHRpb25TdHJnID0+ICRPYmplY3RPcHRpb25TdHJnLAogICAgICAgICAgICAgICAgRm9ybWF0T3B0aW9uU3RyZyA9PiAkRm9ybWF0T3B0aW9uU3RyZywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdCcgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgICAgICMgb3V0cHV0IGxpc3QKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSW1wb3J0SW5mb3JtYXRpb24nLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICV7JFRlbXBsYXRlRGF0YX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyIGFuZCBuYXZiYXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JbXBvcnRFeHBvcnQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgaW1wb3J0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSW1wb3J0JyApIHsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJFRlbXBsYXRlRGF0YSA9IHt9OwogICAgICAgICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUZW1wbGF0ZUlEJyApOwoKICAgICAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICAgICAgJFRlbXBsYXRlRGF0YSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ1RlbXBsYXRlIG5vdCBmb3VuZCEnKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc291cmNlIGZpbGUKICAgICAgICBteSAlU291cmNlRmlsZSA9ICRQYXJhbU9iamVjdC0+R2V0VXBsb2FkQWxsKAogICAgICAgICAgICBQYXJhbSAgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICBTb3VyY2UgPT4gJ1N0cmluZycsCiAgICAgICAgKTsKCiAgICAgICAgJFNvdXJjZUZpbGV7Q29udGVudH0gfHw9ICcnOwoKICAgICAgICAjIGltcG9ydCBkYXRhCiAgICAgICAgbXkgJFJlc3VsdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkltcG9ydCgKICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gXCRTb3VyY2VGaWxle0NvbnRlbnR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkUmVzdWx0ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0Vycm9yIG9jY3VycmVkLiBJbXBvcnQgaW1wb3NzaWJsZSEgU2VlIFN5c2xvZyBmb3IgZGV0YWlscy4nKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyIGFuZCBuYXZiYXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgb3V0cHV0IGltcG9ydCByZXN1bHRzCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0ltcG9ydFJlc3VsdCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJXskUmVzdWx0fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBhbGwgcmV0dXJuIGNvZGVzIGFuZCBjb2xsZWN0IHRoZSBkdXBsaWNhdGUgbmFtZXMKICAgICAgICBteSBARHVwbGljYXRlTmFtZXM7CiAgICAgICAgUkVUVVJOQ09ERToKICAgICAgICBmb3IgbXkgJFJldENvZGUgKCBzb3J0IGtleXMgJXsgJFJlc3VsdC0+e1JldENvZGV9IH0gKSB7CgogICAgICAgICAgICAjIGp1c3QgZ2V0IHRoZSBkdXBsaWNhdGUgbmFtZQogICAgICAgICAgICBpZiAoICRSZXRDb2RlID1+IG17IFxBIER1cGxpY2F0ZU5hbWUgXHMrICguKykgfXhtcyApIHsKICAgICAgICAgICAgICAgIHB1c2ggQER1cGxpY2F0ZU5hbWVzLCAkMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ltcG9ydFJlc3VsdFJldHVybkNvZGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5Db2RlTmFtZSAgPT4gJFJldENvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybkNvZGVDb3VudCA9PiAkUmVzdWx0LT57UmV0Q29kZX0tPnskUmV0Q29kZX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGR1cGxpY2F0ZSBuYW1lcyBpZiBuZWNjZXNzYXJ5CiAgICAgICAgaWYgKEBEdXBsaWNhdGVOYW1lcykgewoKICAgICAgICAgICAgbXkgJER1cGxpY2F0ZU5hbWVzU3RyaW5nID0gam9pbiAnLCAnLCBARHVwbGljYXRlTmFtZXM7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ltcG9ydFJlc3VsdER1cGxpY2F0ZU5hbWVzJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIER1cGxpY2F0ZU5hbWVzID0+ICREdXBsaWNhdGVOYW1lc1N0cmluZywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBsYXN0IHByb2Nlc3NlZCBsaW5lIG11bWJlciBvZiBpbXBvcnQgZmlsZQogICAgICAgIGlmICggJFJlc3VsdC0+e0ZhaWxlZH0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnSW1wb3J0UmVzdWx0TGFzdExpbmVOdW1iZXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTGFzdExpbmVOdW1iZXIgPT4gJFJlc3VsdC0+e0NvdW50ZXJ9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc3RhcnQgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JbXBvcnRFeHBvcnQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBleHBvcnQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdFeHBvcnQnICkgewoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkVGVtcGxhdGVEYXRhID0ge307CiAgICAgICAgJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1RlbXBsYXRlSUQnICk7CgogICAgICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgICAgICAkVGVtcGxhdGVEYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnVGVtcGxhdGUgbm90IGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGV4cG9ydCBkYXRhCiAgICAgICAgbXkgJFJlc3VsdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkV4cG9ydCgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRSZXN1bHQgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLicpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBteSAkRmlsZUNvbnRlbnQgPSBqb2luICJcbiIsIEB7ICRSZXN1bHQtPntEZXN0aW5hdGlvbkNvbnRlbnR9IH07CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdFeHBvcnQuY3N2JywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvY3N2JywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEZpbGVDb250ZW50LAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IG9iamVjdCBsaXN0CiAgICAgICAgbXkgJE9iamVjdExpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3RMaXN0KCk7CgogICAgICAgIGlmICggISRPYmplY3RMaXN0ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIG9iamVjdCBiYWNrZW5kIGZvdW5kIScpLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCBmb3JtYXQgbGlzdAogICAgICAgIG15ICRGb3JtYXRMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0TGlzdCgpOwoKICAgICAgICBpZiAoICEkRm9ybWF0TGlzdCApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBmb3JtYXQgYmFja2VuZCBmb3VuZCEnKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdCcgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uQWRkJyApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHQnLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdmFsaWQgbGlzdAogICAgICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CgogICAgICAgIG15ICRFbXB0eURhdGFiYXNlID0gMTsKCiAgICAgICAgQ0xBU1M6CiAgICAgICAgZm9yIG15ICRPYmplY3QgKCBzb3J0IHsgJE9iamVjdExpc3QtPnskYX0gY21wICRPYmplY3RMaXN0LT57JGJ9IH0ga2V5cyAleyRPYmplY3RMaXN0fSApIHsKCiAgICAgICAgICAgICMgZ2V0IHRlbXBsYXRlIGxpc3QKICAgICAgICAgICAgbXkgJFRlbXBsYXRlTGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlTGlzdCgKICAgICAgICAgICAgICAgIE9iamVjdCA9PiAkT2JqZWN0LAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRUZW1wbGF0ZUxpc3QgfHwgcmVmICRUZW1wbGF0ZUxpc3QgbmUgJ0FSUkFZJyB8fCAhQHskVGVtcGxhdGVMaXN0fSApIHsKICAgICAgICAgICAgICAgIG5leHQgQ0xBU1M7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRFbXB0eURhdGFiYXNlID0gMDsKCiAgICAgICAgICAgICMgb3V0cHV0IGxpc3QKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3QnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TmFtZSA9PiAkT2JqZWN0TGlzdC0+eyRPYmplY3R9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGZvciBteSAkVGVtcGxhdGVJRCAoIEB7JFRlbXBsYXRlTGlzdH0gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgdGVtcGxhdGUgZGF0YQogICAgICAgICAgICAgICAgbXkgJFRlbXBsYXRlRGF0YSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJXskVGVtcGxhdGVEYXRhfSwKICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0TmFtZSA9PiAkRm9ybWF0TGlzdC0+eyAkVGVtcGxhdGVEYXRhLT57Rm9ybWF0fSB9LAogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZCAgICAgID0+ICRWYWxpZExpc3R7ICRUZW1wbGF0ZURhdGEtPntWYWxpZElEfSB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBhbiBlbXB0eSBsaXN0CiAgICAgICAgaWYgKCRFbXB0eURhdGFiYXNlKSB7CgogICAgICAgICAgICAjIG91dHB1dCBsaXN0CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE9iamVjdE5hbWUgPT4gJ1RlbXBsYXRlIExpc3QnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJyApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyIGFuZCBuYXZiYXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JbXBvcnRFeHBvcnQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgpzdWIgX01hc2tUZW1wbGF0ZUVkaXQxIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJVNlcnZlckVycm9yOwogICAgaWYgKCAkUGFyYW17U2VydmVyRXJyb3J9ICkgewogICAgICAgICVTZXJ2ZXJFcnJvciA9ICV7ICRQYXJhbXtTZXJ2ZXJFcnJvcn0gfTsKICAgIH0KCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdCcgKTsKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25PdmVydmlldycgKTsKCiAgICAjIGdlbmVyYXRlIFZhbGlkT3B0aW9uU3RyZwogICAgbXkgJVZhbGlkTGlzdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKICAgIG15ICRWYWxpZE9wdGlvblN0cmcgID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgTmFtZSAgICAgICA9PiAnVmFsaWRJRCcsCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgbXkgJENsYXNzID0gJyBWYWxpZGF0ZV9SZXF1aXJlZCAnOwoKICAgIGlmICggJFNlcnZlckVycm9ye05hbWV9ICkgewogICAgICAgICRDbGFzcyAuPSAnU2VydmVyRXJyb3InOwogICAgfQoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1RlbXBsYXRlRWRpdDEnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFZhbGlkT3B0aW9uU3RyZyA9PiAkVmFsaWRPcHRpb25TdHJnLAogICAgICAgICAgICBOYW1lQ2xhc3MgICAgICAgPT4gJENsYXNzLAogICAgICAgIH0sCiAgICApOwoKICAgIGlmICggJFBhcmFte1RlbXBsYXRlSUR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdFZGl0T2JqZWN0Rm9ybWF0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBPYmplY3ROYW1lID0+ICRQYXJhbXtPYmplY3R9LAogICAgICAgICAgICAgICAgRm9ybWF0TmFtZSA9PiAkUGFyYW17Rm9ybWF0fSwKICAgICAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte05ld30gKSB7CgogICAgICAgICMgZ2V0IEltcG9ydEV4cG9ydCBvYmplY3QKICAgICAgICBteSAkSW1wb3J0RXhwb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcpOwoKICAgICAgICAjIGdldCBvYmplY3QgbGlzdAogICAgICAgIG15ICRPYmplY3RMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0TGlzdCgpOwoKICAgICAgICBpZiAoICEkT2JqZWN0TGlzdCApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBvYmplY3QgYmFja2VuZCBmb3VuZCEnKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZm9ybWF0IGxpc3QKICAgICAgICBteSAkRm9ybWF0TGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdExpc3QoKTsKCiAgICAgICAgaWYgKCAhJEZvcm1hdExpc3QgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gZm9ybWF0IGJhY2tlbmQgZm91bmQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRDbGFzcyA9ICcgVmFsaWRhdGVfUmVxdWlyZWQgJzsKCiAgICAgICAgaWYgKCAkU2VydmVyRXJyb3J7T2JqZWN0fSApIHsKICAgICAgICAgICAgJENsYXNzIC49ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIE9iamVjdE9wdGlvblN0cmcKICAgICAgICBteSAkT2JqZWN0T3B0aW9uU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJE9iamVjdExpc3QsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnT2JqZWN0JywKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtPYmplY3R9IHx8ICcnLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAkQ2xhc3MgLiAnIE1vZGVybml6ZScsCiAgICAgICAgKTsKCiAgICAgICAgJENsYXNzID0gJyBWYWxpZGF0ZV9SZXF1aXJlZCAnOwogICAgICAgIGlmICggJFNlcnZlckVycm9ye0Zvcm1hdH0gKSB7CiAgICAgICAgICAgICRDbGFzcyAuPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBnZW5lcmF0ZSBGb3JtYXRPcHRpb25TdHJnCiAgICAgICAgbXkgJEZvcm1hdE9wdGlvblN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRGb3JtYXRMaXN0LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ0Zvcm1hdCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17Rm9ybWF0fSB8fCAnJywKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJENsYXNzIC4gJyBNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOZXdPYmplY3RGb3JtYXQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdE9wdGlvbiA9PiAkT2JqZWN0T3B0aW9uU3RyZywKICAgICAgICAgICAgICAgIEZvcm1hdE9wdGlvbiA9PiAkRm9ybWF0T3B0aW9uU3RyZywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IGhlYWRlciBhbmQgbmF2YmFyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkltcG9ydEV4cG9ydCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9NYXNrVGVtcGxhdGVFZGl0MiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVTZXJ2ZXJFcnJvcjsKICAgIGlmICggJFBhcmFte1NlcnZlckVycm9yfSApIHsKICAgICAgICAlU2VydmVyRXJyb3IgPSAleyAkUGFyYW17U2VydmVyRXJyb3J9IH07CiAgICB9CgogICAgbXkgJURhdGFUeXBlRXJyb3I7CiAgICBpZiAoICRQYXJhbXtEYXRhVHlwZUVycm9yfSApIHsKICAgICAgICAlRGF0YVR5cGVFcnJvciA9ICV7ICRQYXJhbXtEYXRhVHlwZUVycm9yfSB9OwogICAgfQoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgbXkgJFRlbXBsYXRlSUQ7CiAgICBpZiAoICRQYXJhbXtUZW1wbGF0ZUlEfSApIHsKICAgICAgICAkVGVtcGxhdGVJRCA9ICRQYXJhbXtUZW1wbGF0ZUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdOZWVkZWQgVGVtcGxhdGVJRCEnKSwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBJbXBvcnRFeHBvcnQgb2JqZWN0CiAgICBteSAkSW1wb3J0RXhwb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcpOwoKICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgIG15ICRUZW1wbGF0ZURhdGE7CiAgICAkVGVtcGxhdGVEYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgaWYgKCAhJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdUZW1wbGF0ZSBub3QgZm91bmQhJyksCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJFBhcmFte0JhY2tVUkx9ID0gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPVRlbXBsYXRlRWRpdDE7VGVtcGxhdGVJRD0kVGVtcGxhdGVJRCI7CgogICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JyApOwoKICAgICMgb3V0cHV0IGxpc3QKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1RlbXBsYXRlRWRpdDInLAogICAgICAgIERhdGEgPT4gJFRlbXBsYXRlRGF0YSwKICAgICk7CgogICAgIyBnZXQgb2JqZWN0IGF0dHJpYnV0ZXMKICAgIG15ICRPYmplY3RBdHRyaWJ1dGVMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0QXR0cmlidXRlc0dldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgb2JqZWN0IGRhdGEKICAgIG15ICRPYmplY3REYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZURhdGEtPntUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBqYXZhc2NyaXB0IHZhbGlkYXRpb24gY2xhc3MgcGVyIGRhdGF0eXBlCiAgICBteSAlSlNDbGFzczsKICAgIG15ICVQcmVkZWZpbmVkRXJyb3JNZXNzYWdlczsKCiAgICAkSlNDbGFzc3tOdW1iZXJ9ICAgICAgICAgICAgICAgID0gJ1ZhbGlkYXRlX051bWJlcic7CiAgICAkSlNDbGFzc3tOdW1iZXJCaWdnZXJUaGFuWmVyb30gID0gJ1ZhbGlkYXRlX051bWJlckJpZ2dlclRoYW5aZXJvJzsKICAgICRKU0NsYXNze0ludGVnZXJ9ICAgICAgICAgICAgICAgPSAnVmFsaWRhdGVfTnVtYmVySW50ZWdlcic7CiAgICAkSlNDbGFzc3tJbnRlZ2VyQmlnZ2VyVGhhblplcm99ID0gJ1ZhbGlkYXRlX051bWJlckludGVnZXJCaWdnZXJUaGFuWmVybyc7CgogICAgJFByZWRlZmluZWRFcnJvck1lc3NhZ2Vze051bWJlcn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ251bWJlcicpOwogICAgJFByZWRlZmluZWRFcnJvck1lc3NhZ2Vze051bWJlckJpZ2dlclRoYW5aZXJvfQogICAgICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdudW1iZXIgYmlnZ2VyIHRoYW4gemVybycpOwogICAgJFByZWRlZmluZWRFcnJvck1lc3NhZ2Vze0ludGVnZXJ9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdpbnRlZ2VyJyk7CiAgICAkUHJlZGVmaW5lZEVycm9yTWVzc2FnZXN7SW50ZWdlckJpZ2dlclRoYW5aZXJvfQogICAgICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdpbnRlZ2VyIGJpZ2dlciB0aGFuIHplcm8nKTsKCiAgICAjIG91dHB1dCBvYmplY3QgYXR0cmlidXRlcwogICAgZm9yIG15ICRJdGVtICggQHskT2JqZWN0QXR0cmlidXRlTGlzdH0gKSB7CgogICAgICAgIG15ICRDbGFzcyA9ICcgJzsKICAgICAgICBteSAkVmFsdWU7CgogICAgICAgIG15ICREYXRhVHlwZUVycm9yOwogICAgICAgIG15ICRFcnJvck1lc3NhZ2U7CgogICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntSZXF1aXJlZH0gKSB7CiAgICAgICAgICAgICRDbGFzcyAgICAgICAgPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgICAgICAkRXJyb3JNZXNzYWdlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdFbGVtZW50IHJlcXVpcmVkLCBwbGVhc2UgaW5zZXJ0IGRhdGEnKTsKICAgICAgICB9CgogICAgICAgIGlmICggJEl0ZW0tPntJbnB1dH0tPntEYXRhVHlwZX0gKSB7CiAgICAgICAgICAgICRDbGFzcyAuPSAiICRKU0NsYXNzeyAkSXRlbS0+e0lucHV0fS0+e0RhdGFUeXBlfSB9IjsKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICdJbnZhbGlkIGRhdGEsIHBsZWFzZSBpbnNlcnQgYSB2YWxpZCAlcycsCiAgICAgICAgICAgICAgICAkUHJlZGVmaW5lZEVycm9yTWVzc2FnZXN7ICRJdGVtLT57SW5wdXR9LT57RGF0YVR5cGV9IH0KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGRhdGEgZnJvbSBmb3JtIG9yIGZyb20gZGF0YWJhc2UKICAgICAgICAjIFNlcnZlckVycm9yID0gc2hvdyB0aGUgd3JvbmcgZGF0YSBpbiBmb3JtCiAgICAgICAgIyAhU2VydmVyRXJyb3IgPSBzaG93IGRhdGFiYXNlIGRhdGEgb3IgbmV3IGZpZWxkcwoKICAgICAgICBpZiAoICRQYXJhbXtTZXJ2ZXJFcnJvcn0gfHwgJFBhcmFte0RhdGFUeXBlRXJyb3J9ICkgewogICAgICAgICAgICAkVmFsdWUgPSAkUGFyYW17VGVtcGxhdGVEYXRhRm9ybX0tPnsgJEl0ZW0tPntLZXl9IH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkVmFsdWUgPSAkT2JqZWN0RGF0YS0+eyAkSXRlbS0+e0tleX0gfTsKICAgICAgICB9CgogICAgICAgICMgZXJyb3IgYXJlYQoKICAgICAgICAjIHByZXBhcmUgZGlmZmVyZW50IGRhdGEgJiBtZXNzYWdlIHBlciBlcnJvcgogICAgICAgIGlmICggJFNlcnZlckVycm9yeyAkSXRlbS0+e05hbWV9IH0gfHwgJERhdGFUeXBlRXJyb3J7ICRJdGVtLT57TmFtZX0gfSApIHsKICAgICAgICAgICAgJENsYXNzIC49ICcgU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgZm9ybSBpbnB1dAogICAgICAgIG15ICRJbnB1dFN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkltcG9ydEV4cG9ydEZvcm1JbnB1dENyZWF0ZSgKICAgICAgICAgICAgSXRlbSAgPT4gJEl0ZW0sCiAgICAgICAgICAgIENsYXNzID0+ICRDbGFzcyAuICcgTW9kZXJuaXplJywKICAgICAgICAgICAgVmFsdWUgPT4gJFZhbHVlLAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgaWQKICAgICAgICBteSAkSUQ7CiAgICAgICAgaWYgKCAkSXRlbS0+e1ByZWZpeH0gKSB7CiAgICAgICAgICAgICRJRCA9ICIkSXRlbS0+e1ByZWZpeH0kSXRlbS0+e0tleX0iOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJElEID0gJEl0ZW0tPntLZXl9OwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgYXR0cmlidXRlIHJvdwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUZW1wbGF0ZUVkaXQyRWxlbWVudCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiAkSXRlbS0+e05hbWV9IHx8ICcnLAogICAgICAgICAgICAgICAgSW5wdXRTdHJnICAgID0+ICRJbnB1dFN0cmluZywKICAgICAgICAgICAgICAgIElEICAgICAgICAgICA9PiAkSUQsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJEVycm9yTWVzc2FnZSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IGhlYWRlciBhbmQgbmF2YmFyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkltcG9ydEV4cG9ydCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICByZXR1cm4gJE91dHB1dDsKCn0KCnN1YiBfTWFza1RlbXBsYXRlRWRpdDMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlU2VydmVyRXJyb3I7CiAgICBpZiAoICRQYXJhbXtTZXJ2ZXJFcnJvcn0gKSB7CiAgICAgICAgJVNlcnZlckVycm9yID0gJXsgJFBhcmFte1NlcnZlckVycm9yfSB9OwogICAgfQoKICAgIG15ICRUZW1wbGF0ZUlEOwogICAgaWYgKCAkUGFyYW17VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgJFRlbXBsYXRlSUQgPSAkUGFyYW17VGVtcGxhdGVJRH07CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBpZiAoICEkVGVtcGxhdGVJRCApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnVGVtcGxhdGUgbm90IGZvdW5kIScpLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IEltcG9ydEV4cG9ydCBvYmplY3QKICAgIG15ICRJbXBvcnRFeHBvcnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0Jyk7CgogICAgIyBnZXQgdGVtcGxhdGUgZGF0YQogICAgbXkgJFRlbXBsYXRlRGF0YTsKICAgICRUZW1wbGF0ZURhdGEgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBpZiAoICEkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ1RlbXBsYXRlIG5vdCBmb3VuZCEnKSwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAkUGFyYW17QmFja1VSTH0gPSAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249VGVtcGxhdGVFZGl0MjtUZW1wbGF0ZUlEPSRUZW1wbGF0ZUlEIjsKCiAgICAjIG91dHB1dCBvdmVydmlldwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgIyBvdXRwdXQgbGlzdAogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnVGVtcGxhdGVFZGl0MycsCiAgICAgICAgRGF0YSA9PiAkVGVtcGxhdGVEYXRhLAogICAgKTsKCiAgICAjIGdldCBmb3JtYXQgYXR0cmlidXRlcwogICAgbXkgJEZvcm1hdEF0dHJpYnV0ZUxpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBmb3JtYXQgZGF0YQogICAgbXkgJEZvcm1hdERhdGEgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXREYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBpZiAoICEkRm9ybWF0RGF0YSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnRm9ybWF0IG5vdCBmb3VuZCEnKSwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIG91dHB1dCBmb3JtYXQgYXR0cmlidXRlcwogICAgZm9yIG15ICRJdGVtICggQHskRm9ybWF0QXR0cmlidXRlTGlzdH0gKSB7CgogICAgICAgICMgYnVpbGQgaWQKICAgICAgICBteSAkSUQ7CiAgICAgICAgaWYgKCAkSXRlbS0+e1ByZWZpeH0gKSB7CiAgICAgICAgICAgICRJRCA9ICIkSXRlbS0+e1ByZWZpeH0kSXRlbS0+e0tleX0iOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJElEID0gIiRJdGVtLT57S2V5fSI7CiAgICAgICAgfQoKICAgICAgICBteSAkQ2xhc3MgPSAnICc7CiAgICAgICAgaWYgKCAkSXRlbS0+e0lucHV0fS0+e1JlcXVpcmVkfSApIHsKICAgICAgICAgICAgJENsYXNzID0gJ1ZhbGlkYXRlX1JlcXVpcmVkICc7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRTZXJ2ZXJFcnJvcnsgJEl0ZW0tPntOYW1lfSB9ICkgewogICAgICAgICAgICAkQ2xhc3MgLj0gJyBTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBmb3JtIGlucHV0CiAgICAgICAgbXkgJElucHV0U3RyaW5nID0gJExheW91dE9iamVjdC0+SW1wb3J0RXhwb3J0Rm9ybUlucHV0Q3JlYXRlKAogICAgICAgICAgICBJdGVtICA9PiAkSXRlbSwKICAgICAgICAgICAgQ2xhc3MgPT4gJENsYXNzIC4gJyBNb2Rlcm5pemUnLAogICAgICAgICAgICBWYWx1ZSA9PiAkRm9ybWF0RGF0YS0+eyAkSXRlbS0+e0tleX0gfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBhdHRyaWJ1dGUgcm93CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RlbXBsYXRlRWRpdDNFbGVtZW50JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lID0+ICRJdGVtLT57TmFtZX0gfHwgJycsCiAgICAgICAgICAgICAgICBJbnB1dFN0cmcgPT4gJElucHV0U3RyaW5nLAogICAgICAgICAgICAgICAgSUQgICAgICAgID0+ICRJRCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCByZXF1aXJlZCBub3RpY2UKICAgICAgICBpZiAoICRJdGVtLT57SW5wdXR9LT57UmVxdWlyZWR9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RlbXBsYXRlRWRpdDNFbGVtZW50UmVxdWlyZWQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkSXRlbS0+e05hbWV9IHx8ICcnLAogICAgICAgICAgICAgICAgICAgIElEID0+ICRJRCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3V0cHV0IGhlYWRlciBhbmQgbmF2YmFyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkltcG9ydEV4cG9ydCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICByZXR1cm4gJE91dHB1dDsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkltcG9ydEV4cG9ydDo6TGF5b3V0Q2hlY2tib3g7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SW1wb3J0RXhwb3J0OjpMYXlvdXRDaGVja2JveCAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBmb3IgY2hlY2tib3ggZWxlbWVudHMgaW4gaW1wb3J0L2V4cG9ydC4KCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SW1wb3J0RXhwb3J0OjpMYXlvdXRDaGVja2JveC0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gRm9ybUlucHV0Q3JlYXRlKCkKCmNyZWF0ZSBhIGlucHV0IHN0cmluZwoKICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtSW5wdXRDcmVhdGUoCiAgICAgICAgSXRlbSAgID0+ICRJdGVtUmVmLAogICAgICAgIFByZWZpeCA9PiAnUHJlZml4OjonLCAgIyAob3B0aW9uYWwpCiAgICAgICAgVmFsdWUgID0+ICdWYWx1ZScsICAgICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybUlucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRQYXJhbXtQcmVmaXh9IHx8PSAnJzsKCiAgICBteSAkQ2hlY2tlZCA9ICRQYXJhbXtWYWx1ZX0gPyAnY2hlY2tlZD0iY2hlY2tlZCInIDogJyc7CgogICAgcmV0dXJuCiAgICAgICAgcXF7PGlucHV0IGlkPSIkUGFyYW17UHJlZml4fSRQYXJhbXtJdGVtfS0+e0tleX0iIHR5cGU9ImNoZWNrYm94IiBuYW1lPSIkUGFyYW17UHJlZml4fSRQYXJhbXtJdGVtfS0+e0tleX0iICRDaGVja2VkIC8+fTsKfQoKPWl0ZW0gRm9ybURhdGFHZXQoKQoKZ2V0IGZvcm0gZGF0YQoKICAgIG15ICRGb3JtRGF0YSA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtRGF0YUdldCgKICAgICAgICBJdGVtICAgPT4gJEl0ZW1SZWYsCiAgICAgICAgUHJlZml4ID0+ICdQcmVmaXg6OicsICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybURhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0l0ZW19ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJdGVtIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJFBhcmFte1ByZWZpeH0gfHw9ICcnOwoKICAgICMgZ2V0IGZvcm0gZGF0YQogICAgbXkgJEZvcm1EYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSgKICAgICAgICBQYXJhbSA9PiAkUGFyYW17UHJlZml4fSAuICRQYXJhbXtJdGVtfS0+e0tleX0sCiAgICApOwoKICAgIHJldHVybiAkRm9ybURhdGE7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkltcG9ydEV4cG9ydDo6TGF5b3V0VFQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SW1wb3J0RXhwb3J0OjpMYXlvdXRUVCAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBmb3IgZGlzcGxheSBUVCBjb2RlCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkltcG9ydEV4cG9ydDo6TGF5b3V0VFQtPm5ldygKICAgICAgICAlUGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIEZvcm1JbnB1dENyZWF0ZSgpCgpjcmVhdGUgYSBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+Rm9ybUlucHV0Q3JlYXRlKAogICAgICAgIEl0ZW0gPT4gJEl0ZW1SZWYsCiAgICApOwoKPWN1dAoKc3ViIEZvcm1JbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17SXRlbX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEl0ZW0hJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntEYXRhfTsKfQoKPWl0ZW0gRm9ybURhdGFHZXQoKQoKZ2V0IGZvcm0gZGF0YQoKICAgIG15ICRGb3JtRGF0YSA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtRGF0YUdldCgpOwoKPWN1dAoKc3ViIEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkltcG9ydEV4cG9ydDo6TGF5b3V0U2VsZWN0aW9uOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkltcG9ydEV4cG9ydDo6TGF5b3V0U2VsZWN0aW9uIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBsYXlvdXQgZnVuY3Rpb25zIGZvciBzZWxlY3Rpb24gZWxlbWVudHMKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SW1wb3J0RXhwb3J0OjpMYXlvdXRTZWxlY3Rpb24tPm5ldygKICAgICAgICAlUGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIEZvcm1JbnB1dENyZWF0ZSgpCgpjcmVhdGUgYSBpbnB1dCBzdHJpbmcKCiAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+Rm9ybUlucHV0Q3JlYXRlKAogICAgICAgIEl0ZW0gICA9PiAkSXRlbVJlZiwKICAgICAgICBQcmVmaXggPT4gJ1ByZWZpeDo6JywgICMgKG9wdGlvbmFsKQogICAgICAgIFZhbHVlICA9PiAnVmFsdWUnLCAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ2xhc3MgID0+ICdNb2Rlcm5pemUnICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybUlucHV0Q3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZQogICAgJFBhcmFte1ByZWZpeH0gfHw9ICcnOwogICAgJFBhcmFte1ZhbHVlfSAgfHw9ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1ZhbHVlRGVmYXVsdH07CgogICAgaWYgKCAkUGFyYW17VmFsdWV9ICYmICRQYXJhbXtWYWx1ZX0gPX4gbXsgIyMjIyMgfXhtcyApIHsKICAgICAgICBteSBAVmFsdWVzID0gc3BsaXQgJyMjIyMjJywgJFBhcmFte1ZhbHVlfTsKICAgICAgICAkUGFyYW17VmFsdWV9ID0gXEBWYWx1ZXM7CiAgICB9CgogICAgIyBnZW5lcmF0ZSBvcHRpb24gc3RyaW5nCiAgICBteSAkU3RyaW5nID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBJRCAgICAgICAgICAgPT4gJFBhcmFte1ByZWZpeH0gLiAkUGFyYW17SXRlbX0tPntLZXl9LAogICAgICAgIENsYXNzICAgICAgICA9PiAkUGFyYW17Q2xhc3N9LAogICAgICAgIE5hbWUgICAgICAgICA9PiAkUGFyYW17UHJlZml4fSAuICRQYXJhbXtJdGVtfS0+e0tleX0sCiAgICAgICAgRGF0YSAgICAgICAgID0+ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e0RhdGF9IHx8IHt9LAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17VmFsdWV9LAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUcmFuc2xhdGlvbn0sCiAgICAgICAgVHJlZVZpZXcgICAgID0+ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1RyZWVWaWV3fSB8fCAwLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntQb3NzaWJsZU5vbmV9LAogICAgICAgIE11bHRpcGxlICAgICA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntNdWx0aXBsZX0sCiAgICAgICAgU2l6ZSAgICAgICAgID0+ICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1NpemV9LAogICAgKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWl0ZW0gRm9ybURhdGFHZXQoKQoKZ2V0IGZvcm0gZGF0YQoKICAgIG15ICRGb3JtRGF0YSA9ICRCYWNrZW5kT2JqZWN0LT5Gb3JtRGF0YUdldCgKICAgICAgICBJdGVtICAgPT4gJEl0ZW1SZWYsCiAgICAgICAgUHJlZml4ID0+ICdQcmVmaXg6OicsICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybURhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0l0ZW19ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJdGVtIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAkUGFyYW17UHJlZml4fSB8fD0gJyc7CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICBteSBARm9ybURhdGFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRBcnJheSgKICAgICAgICBQYXJhbSA9PiAkUGFyYW17UHJlZml4fSAuICRQYXJhbXtJdGVtfS0+e0tleX0sCiAgICApOwoKICAgIG15ICRGb3JtRGF0YSA9IGpvaW4gJyMjIyMjJywgQEZvcm1EYXRhczsKCiAgICByZXR1cm4gJEZvcm1EYXRhIGlmICRGb3JtRGF0YTsKICAgIHJldHVybiAkRm9ybURhdGEgaWYgISRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlcXVpcmVkfTsKCiAgICAjIHNldCBpbnZhbGlkIHBhcmFtCiAgICAkUGFyYW17SXRlbX0tPntGb3JtfS0+e0ludmFsaWR9ID0gMTsKCiAgICByZXR1cm4gJEZvcm1EYXRhOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkltcG9ydEV4cG9ydDo6TGF5b3V0VGV4dDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJbXBvcnRFeHBvcnQ6OkxheW91dFRleHQgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGxheW91dCBmdW5jdGlvbnMgZm9yIHRleHQgZWxlbWVudHMKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SW1wb3J0RXhwb3J0OjpMYXlvdXRUZXh0LT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBGb3JtSW5wdXRDcmVhdGUoKQoKY3JlYXRlIGEgaW5wdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkZvcm1JbnB1dENyZWF0ZSgKICAgICAgICBJdGVtICAgPT4gJEl0ZW1SZWYsCiAgICAgICAgUHJlZml4ID0+ICdQcmVmaXg6OicsICAjIChvcHRpb25hbCkKICAgICAgICBWYWx1ZSAgPT4gJ1ZhbHVlJywgICAgICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBGb3JtSW5wdXRDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0l0ZW19ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJdGVtIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAkUGFyYW17UHJlZml4fSB8fD0gJyc7CgogICAgbXkgJFZhbHVlID0gJFBhcmFte1ZhbHVlfSB8fCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9OwogICAgbXkgJFNpemUgPSAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntTaXplfSB8fCA0MDsKICAgIG15ICRTaXplQ2xhc3M7CiAgICBpZiAoICRTaXplIDwgMTUgKSB7CiAgICAgICAgJFNpemVDbGFzcyA9ICdXMTBwYyc7CiAgICB9CiAgICBlbHNpZiAoICRTaXplIDwgMzUgKSB7CiAgICAgICAgJFNpemVDbGFzcyA9ICdXMzNwYyc7CiAgICB9CiAgICBlbHNpZiAoICRTaXplIDwgNTAgKSB7CiAgICAgICAgJFNpemVDbGFzcyA9ICdXNTBwYyc7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2l6ZUNsYXNzID0gJ1c3NXBjJzsKICAgIH0KCiAgICAjIHByZXBhcmUgZGF0YQogICAgbXkgJElEID0gKCAkUGFyYW17UHJlZml4fSB8fCAnJyApIC4gKCAkUGFyYW17SXRlbX0tPntLZXl9ICk7CiAgICBteSAkTmFtZSA9ICggJFBhcmFte1ByZWZpeH0gfHwgJycgKSAuICggJFBhcmFte05hbWV9IHx8ICRJRCApOwogICAgbXkgJENsYXNzID0gKCAkU2l6ZUNsYXNzIHx8ICcnICkgLiAoICRQYXJhbXtDbGFzc30gfHwgJycgKTsKCiAgICBteSAkU3RyaW5nID0gIjxpbnB1dCBpZD1cIiRJRFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIiROYW1lXCIgY2xhc3M9XCIkQ2xhc3NcIiAiOwoKICAgIGlmICgkVmFsdWUpIHsKCiAgICAgICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgICAgICMgdHJhbnNsYXRlCiAgICAgICAgaWYgKCAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUcmFuc2xhdGlvbn0gKSB7CiAgICAgICAgICAgICRWYWx1ZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkVmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgIyB0cmFuc2Zvcm0gYXNjaWkgdG8gaHRtbAogICAgICAgICRWYWx1ZSA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoCiAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICRWYWx1ZSwKICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU3RyaW5nIC49ICJ2YWx1ZT1cIiRWYWx1ZVwiICI7CiAgICB9CgogICAgIyBhZGQgbWF4aW11bSBsZW5ndGgKICAgIGlmICggJFBhcmFte0l0ZW19LT57SW5wdXR9LT57TWF4TGVuZ3RofSApIHsKICAgICAgICAkU3RyaW5nIC49ICJtYXhsZW5ndGg9XCIkUGFyYW17SXRlbX0tPntJbnB1dH0tPntNYXhMZW5ndGh9XCIgIjsKICAgIH0KCiAgICAkU3RyaW5nIC49ICIvPiAiOwoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9aXRlbSBGb3JtRGF0YUdldCgpCgpnZXQgZm9ybSBkYXRhCgogICAgbXkgJEZvcm1EYXRhID0gJEJhY2tlbmRPYmplY3QtPkZvcm1EYXRhR2V0KAogICAgICAgIEl0ZW0gICA9PiAkSXRlbVJlZiwKICAgICAgICBQcmVmaXggPT4gJ1ByZWZpeDo6JywgICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBGb3JtRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17SXRlbX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEl0ZW0hJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRQYXJhbXtQcmVmaXh9IHx8PSAnJzsKCiAgICAjIGdldCBmb3JtIGRhdGEKICAgIG15ICRGb3JtRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oCiAgICAgICAgUGFyYW0gPT4gJFBhcmFte1ByZWZpeH0gLiAkUGFyYW17SXRlbX0tPntLZXl9LAogICAgKTsKCiAgICAjIHJlZ2V4IGNoZWNrCiAgICBpZiAoICRQYXJhbXtJdGVtfS0+e0lucHV0fS0+e1JlZ2V4fSAmJiAkRm9ybURhdGEgIX4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57UmVnZXh9ICkgewoKICAgICAgICAkUGFyYW17SXRlbX0tPntGb3JtfS0+e0ludmFsaWR9ID0gMTsKICAgICAgICByZXR1cm4gJEZvcm1EYXRhOwogICAgfQoKICAgIHJldHVybiAkRm9ybURhdGEgaWYgJEZvcm1EYXRhOwogICAgcmV0dXJuICRGb3JtRGF0YSBpZiAhJFBhcmFte0l0ZW19LT57SW5wdXR9LT57UmVxdWlyZWR9OwoKICAgICMgc2V0IGludmFsaWQgcGFyYW0KICAgICRQYXJhbXtJdGVtfS0+e0Zvcm19LT57SW52YWxpZH0gPSAxOwoKICAgIHJldHVybiAkRm9ybURhdGE7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDo6SW1wb3J0RXhwb3J0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPW92ZXIKCj1pdGVtIEltcG9ydEV4cG9ydEZvcm1JbnB1dENyZWF0ZSgpCgpyZXR1cm5zIGEgaW5wdXQgZmllbGQgaHRtbCBzdHJpbmcKCiAgICBteSAkU3RyaW5nID0gJExheW91dE9iamVjdC0+SW1wb3J0RXhwb3J0Rm9ybUlucHV0Q3JlYXRlKAogICAgICAgIEl0ZW0gID0+ICRJdGVtUmVmLAogICAgICAgIFZhbHVlID0+ICdWYWx1ZScsICAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEltcG9ydEV4cG9ydEZvcm1JbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17SXRlbX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEl0ZW0hJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZE9iamVjdCA9ICRTZWxmLT5fSW1wb3J0RXhwb3J0TG9hZExheW91dEJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntUeXBlfSwKICAgICk7CgogICAgcmV0dXJuICcnIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIGxvb2t1cCBpdGVtIHZhbHVlCiAgICBteSAkU3RyaW5nID0gJEJhY2tlbmRPYmplY3QtPkZvcm1JbnB1dENyZWF0ZSglUGFyYW0pOwoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9aXRlbSBJbXBvcnRFeHBvcnRGb3JtRGF0YUdldCgpCgpyZXR1cm5zIHRoZSB2YWx1ZXMgZnJvbSB0aGUgaHRtbCBmb3JtIGFzIGhhc2ggcmVmZXJlbmNlCgogICAgbXkgJEZvcm1EYXRhID0gJExheW91dE9iamVjdC0+SW1wb3J0RXhwb3J0Rm9ybURhdGFHZXQoCiAgICAgICAgSXRlbSA9PiAkSXRlbVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0RXhwb3J0Rm9ybURhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0l0ZW19ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJdGVtIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvYWQgYmFja2VuZAogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkU2VsZi0+X0ltcG9ydEV4cG9ydExvYWRMYXlvdXRCYWNrZW5kKAogICAgICAgIFR5cGUgPT4gJFBhcmFte0l0ZW19LT57SW5wdXR9LT57VHlwZX0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJEJhY2tlbmRPYmplY3Q7CgogICAgIyBnZXQgZm9ybSBkYXRhCiAgICBteSAkRm9ybURhdGEgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoJVBhcmFtKTsKCiAgICByZXR1cm4gJEZvcm1EYXRhOwp9Cgo9aXRlbSBfSW1wb3J0RXhwb3J0TG9hZExheW91dEJhY2tlbmQoKQoKdG8gbG9hZCBhIGltcG9ydC9leHBvcnQgbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgogICAgbXkgJEJhY2tlbmQgPSAkTGF5b3V0T2JqZWN0LT5fSW1wb3J0RXhwb3J0TG9hZExheW91dEJhY2tlbmQoCiAgICAgICAgVHlwZSA9PiAnU2VsZWN0aW9uJywKICAgICk7CgpBbiBpbnN0YW5jZSBvZiB0aGUgbG9hZGVkIGJhY2tlbmQgbW9kdWxlIGlzIHJldHVybmVkLgoKPWN1dAoKc3ViIF9JbXBvcnRFeHBvcnRMb2FkTGF5b3V0QmFja2VuZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgaWYgKCAhJFBhcmFte1R5cGV9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVHlwZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRHZW5lcmljTW9kdWxlID0gIktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJbXBvcnRFeHBvcnQ6OkxheW91dCRQYXJhbXtUeXBlfSI7CgogICAgIyBsb2FkIHRoZSBiYWNrZW5kIG1vZHVsZQogICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkR2VuZXJpY01vZHVsZSkgKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgbG9hZCBiYWNrZW5kIG1vZHVsZSAkUGFyYW17VHlwZX0hIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBuZXcgaW5zdGFuY2UKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJEdlbmVyaWNNb2R1bGUtPm5ldygKICAgICAgICAleyRTZWxmfSwKICAgICAgICAlUGFyYW0sCiAgICAgICAgTGF5b3V0T2JqZWN0ID0+ICRTZWxmLAogICAgKTsKCiAgICBpZiAoICEkQmFja2VuZE9iamVjdCApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYmFja2VuZCBtb2R1bGUgJFBhcmFte1R5cGV9ISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuICRCYWNrZW5kT2JqZWN0Owp9CgoxOwoKPWJhY2sK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMgQ29tbW9uClslIFRyYW5zbGF0ZSgiQWRkIG1hcHBpbmcgdGVtcGxhdGUiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJDaGFyc2V0IikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiQ29sb24gKDopIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiQ29sdW1uIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiQ29sdW1uIFNlcGFyYXRvciIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkRvdCAoLikiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJTZW1pY29sb24gKDspIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiVGFidWxhdG9yIChUQUIpIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiSW5jbHVkZSBDb2x1bW4gSGVhZGVycyIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkltcG9ydCBzdW1tYXJ5IGZvciIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkltcG9ydGVkIHJlY29yZHMiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJFeHBvcnRlZCByZWNvcmRzIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiUmVjb3JkcyIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlNraXBwZWQiKSB8IGh0bWwgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDE+WyUgVHJhbnNsYXRlKCJJbXBvcnQvRXhwb3J0IE1hbmFnZW1lbnQiKSB8IGh0bWwgJV08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24iPjxzcGFuPlslIFRyYW5zbGF0ZSgiR28gdG8gb3ZlcnZpZXciKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249VGVtcGxhdGVFZGl0MSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gUGx1cyI+PHNwYW4+WyUgVHJhbnNsYXRlKCJBZGQgdGVtcGxhdGUiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25BZGQiKSAlXQogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25MaXN0IikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTm90ZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkNyZWF0ZSBhIHRlbXBsYXRlIHRvIGltcG9ydCBhbmQgZXhwb3J0IG9iamVjdCBpbmZvcm1hdGlvbi4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0xpc3QiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZShEYXRhLk9iamVjdE5hbWUpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIk51bWJlciIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkZvcm1hdCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNlbnRlciI+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU3RhcnQgSW1wb3J0IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlN0YXJ0IEV4cG9ydCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TGlzdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBbJSBJRiBEYXRhLlZhbGlkSUQgIT0gMSVdY2xhc3M9IkludmFsaWQiWyUgRU5EICVdPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249VGVtcGxhdGVFZGl0MTtUZW1wbGF0ZUlEPVslIERhdGEuVGVtcGxhdGVJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTnVtYmVyIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuRm9ybWF0TmFtZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5WYWxpZCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249VGVtcGxhdGVEZWxldGU7VGVtcGxhdGVJRD1bJSBEYXRhLlRlbXBsYXRlSUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGlkPSJEZWxldGVUZW1wbGF0ZUlEWyUgRGF0YS5UZW1wbGF0ZUlEIHwgaHRtbCAlXSIgY2xhc3M9ImZhIGZhLXRyYXNoLW8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249SW1wb3J0SW5mb3JtYXRpb247VGVtcGxhdGVJRD1bJSBEYXRhLlRlbXBsYXRlSUQgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkltcG9ydCIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPUV4cG9ydDtUZW1wbGF0ZUlEPVslIERhdGEuVGVtcGxhdGVJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiRXhwb3J0IikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TGlzdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdMaXN0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDEiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU3RlcCAxIG9mIDUgLSBFZGl0IGNvbW1vbiBpbmZvcm1hdGlvbiIpIHwgaHRtbCAlXTo8L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iVGVtcGxhdGVFZGl0MSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUZW1wbGF0ZUlEIiB2YWx1ZT0iWyUgRGF0YS5UZW1wbGF0ZUlEICVdIiAvPgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOYW1lIj5bJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgoKPCEtLSBWYWxpZGF0ZV9SZXF1aXJlZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iTmFtZSIgY2xhc3M9IlslIERhdGEuTmFtZUNsYXNzICVdIiB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiB2YWx1ZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgc2l6ZT0iNTAiIG1heGxlbmd0aD0iMjAwIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJOYW1lIGlzIHJlcXVpcmVkISIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJOYW1lIGlzIHJlcXVpcmVkISIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIk5ld09iamVjdEZvcm1hdCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik9iamVjdCI+WyUgVHJhbnNsYXRlKCJPYmplY3QiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuT2JqZWN0T3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJPYmplY3RFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiT2JqZWN0IGlzIHJlcXVpcmVkISIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iT2JqZWN0U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIk9iamVjdCBpcyByZXF1aXJlZCEiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJGb3JtYXQiPlslIFRyYW5zbGF0ZSgiRm9ybWF0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZvcm1hdE9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRm9ybWF0RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIkZvcm1hdCBpcyByZXF1aXJlZCEiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkZvcm1hdFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJGb3JtYXQgaXMgcmVxdWlyZWQhIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5ld09iamVjdEZvcm1hdCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkVkaXRPYmplY3RGb3JtYXQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJPYmplY3QiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgRGF0YS5PYmplY3ROYW1lIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik9iamVjdCIgdmFsdWU9IlslIERhdGEuT2JqZWN0IHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkZvcm1hdCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBEYXRhLkZvcm1hdE5hbWUgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRm9ybWF0IiB2YWx1ZT0iWyUgRGF0YS5Gb3JtYXQgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkVkaXRPYmplY3RGb3JtYXQiKSAlXQoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRJRCI+WyUgVHJhbnNsYXRlKCJWYWxpZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbGlkT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ29tbWVudCI+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iQ29tbWVudCIgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgdmFsdWU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iIHNpemU9IjUwIiBtYXhsZW5ndGg9IjIwMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiBuYW1lPSJTdWJtaXROZXh0IiB2YWx1ZT0iU3VibWl0TmV4dCI+WyUgVHJhbnNsYXRlKCJOZXh0IikgfCBodG1sICVdPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249J092ZXJ2aWV3JyI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV0gPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRlbXBsYXRlRWRpdDEiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVGVtcGxhdGVFZGl0MiIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTdGVwIDIgb2YgNSAtIEVkaXQgb2JqZWN0IGluZm9ybWF0aW9uIikgfCBodG1sICVdOjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJUZW1wbGF0ZUVkaXQyIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlRlbXBsYXRlSUQiIHZhbHVlPSJbJSBEYXRhLlRlbXBsYXRlSUQgfCBodG1sICVdIiAvPgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIk9iamVjdCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk9iamVjdCB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDJFbGVtZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5JRCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLklucHV0U3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iWyUgRGF0YS5JRCAlXUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKERhdGEuRXJyb3JNZXNzYWdlKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIERhdGEuSUQgJV1TZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZShEYXRhLkVycm9yTWVzc2FnZSkgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVGVtcGxhdGVFZGl0MkVsZW1lbnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkJhY2siIHR5cGU9ImJ1dHRvbiIgbmFtZT0iQmFjayIgPlslIFRyYW5zbGF0ZSgiQmFjayIpIHwgaHRtbCAlXTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiBuYW1lPSJTdWJtaXROZXh0IiB2YWx1ZT0iU3VibWl0TmV4dCIgPlslIFRyYW5zbGF0ZSgiTmV4dCIpIHwgaHRtbCAlXTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRlbXBsYXRlRWRpdDIiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVGVtcGxhdGVFZGl0MyIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTdGVwIDMgb2YgNSAtIEVkaXQgZm9ybWF0IGluZm9ybWF0aW9uIikgfCBodG1sICVdOjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJUZW1wbGF0ZUVkaXQzIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlRlbXBsYXRlSUQiIHZhbHVlPSJbJSBEYXRhLlRlbXBsYXRlSUQgfCBodG1sICVdIiAvPgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkZvcm1hdCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZvcm1hdCB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDNFbGVtZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5JRCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLklucHV0U3RyZyAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZW1wbGF0ZUVkaXQzRWxlbWVudFJlcXVpcmVkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIERhdGEuSUQgJV1FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoImlzIHJlcXVpcmVkISIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iWyUgRGF0YS5JRCAlXVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgiaXMgcmVxdWlyZWQhIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQzRWxlbWVudFJlcXVpcmVkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQzRWxlbWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQmFjayIgdHlwZT0iYnV0dG9uIiBuYW1lPSJCYWNrIiA+WyUgVHJhbnNsYXRlKCJCYWNrIikgfCBodG1sICVdPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IiB0eXBlPSJzdWJtaXQiIG5hbWU9IlN1Ym1pdE5leHQiIHZhbHVlPSJTdWJtaXROZXh0Ij5bJSBUcmFuc2xhdGUoIk5leHQiKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQzIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDQiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU3RlcCA0IG9mIDUgLSBFZGl0IG1hcHBpbmcgaW5mb3JtYXRpb24iKSB8IGh0bWwgJV06PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTWFwSGVhZGVyUm93IFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiT2JqZWN0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuT2JqZWN0TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkZvcm1hdCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZvcm1hdE5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iVGVtcGxhdGVTYXZlNCIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUZW1wbGF0ZUlEIiB2YWx1ZT0iWyUgRGF0YS5UZW1wbGF0ZUlEIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZW1wbGF0ZUVkaXQ0VGFibGVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2VudGVyIj5bJSBUcmFuc2xhdGUoRGF0YS5IZWFkZXIpIHwgaHRtbCAlXTwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQ0VGFibGVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZW1wbGF0ZUVkaXQ0Tm9NYXBGb3VuZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IlslIERhdGEuQ29sdW1ucyAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gbWFwIGVsZW1lbnRzIGZvdW5kLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGVtcGxhdGVFZGl0NE5vTWFwRm91bmQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVGVtcGxhdGVFZGl0NFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDRDb2x1bW4iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5JbnB1dFN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGVtcGxhdGVFZGl0NENvbHVtbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDRNYXBOdW1iZXJDb2x1bW4iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Db3VudGVyICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlRlbXBsYXRlRWRpdDRNYXBOdW1iZXJDb2x1bW4iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGVtcGxhdGVFZGl0NFVwQnV0dG9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQXJyb3dVcCJ0eXBlPSJzdWJtaXQiIG5hbWU9Ik1hcHBpbmdVcDo6WyUgRGF0YS5NYXBwaW5nSUQgfCBodG1sICVdIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJVcCIpIHwgaHRtbCAlXSI+IFslIFRyYW5zbGF0ZSgiVXAiKSB8IGh0bWwgJV0gPC9idXR0b24+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQ0VXBCdXR0b24iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZW1wbGF0ZUVkaXQ0Tm9VcEJ1dHRvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkFycm93VXAiIHR5cGU9InN1Ym1pdCIgZGlzYWJsZWQ9ImRpc2FibGVkIj4gWyUgVHJhbnNsYXRlKCJVcCIpIHwgaHRtbCAlXTwvYnV0dG9uPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGVtcGxhdGVFZGl0NE5vVXBCdXR0b24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZW1wbGF0ZUVkaXQ0RG93bkJ1dHRvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkFycm93RG93biIgdHlwZT0ic3VibWl0IiBuYW1lPSJNYXBwaW5nRG93bjo6WyUgRGF0YS5NYXBwaW5nSUQgfCBodG1sICVdIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJEb3duIikgfCBodG1sICVdIj4gWyUgVHJhbnNsYXRlKCJEb3duIikgfCBodG1sICVdPC9idXR0b24+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQ0RG93bkJ1dHRvbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDROb0Rvd25CdXR0b24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJBcnJvd0Rvd24iIHR5cGU9InN1Ym1pdCIgZGlzYWJsZWQ9ImRpc2FibGVkIj4gWyUgVHJhbnNsYXRlKCJEb3duIikgfCBodG1sICVdPC9idXR0b24+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQ0Tm9Eb3duQnV0dG9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJEZWxldGVDb2xvbW4iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik1hcHBpbmdEZWxldGU6OlslIERhdGEuTWFwcGluZ0lEIHwgaHRtbCAlXSIgdmFsdWU9IiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJUZW1wbGF0ZUVkaXQ0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlcxMDBwYyBTcGFjaW5nVG9wU21hbGwgTGVmdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gUGx1cyIgaWQ9Ik1hcHBpbmdBZGQiIHR5cGU9InN1Ym1pdCIgbmFtZT0iTWFwcGluZ0FkZCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQWRkIikgfCBodG1sICVdIj48c3Bhbj4gWyUgVHJhbnNsYXRlKCJBZGQgTWFwcGluZyBFbGVtZW50IikgfCBodG1sICVdPC9zcGFuPiA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJTdWJtaXRCYWNrIiB2YWx1ZT0iU3VibWl0QmFjayI+WyUgVHJhbnNsYXRlKCJCYWNrIikgfCBodG1sICVdPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgbmFtZT0iU3VibWl0TmV4dCIgdmFsdWU9IlN1Ym1pdE5leHQiPlslIFRyYW5zbGF0ZSgiTmV4dCIpIHwgaHRtbCAlXTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCgogICAgLy8gZmluZCB0aGUgbmV4dCBidXR0b24gYW5kIGdldCB0aGUgZmlyc3QgY29sdW1uIGRyb3Bkb3duCiAgICB2YXIgJE5leHRCdXR0b24gPSAkKCJidXR0b24uUHJpbWFyeVtuYW1lPSdTdWJtaXROZXh0J10iKS5maXJzdCgpLAogICAgICAgICRGaXJzdENvbHVtbiA9ICQoJyNPYmplY3RcXDpcXDowXFw6XFw6S2V5Jyk7CgogICAgLy8gaGFuZGxlIGNoYW5nZXMgdG8gdGhlIGZpcnN0IGNvbHVtbiBzZWxlY3RvcgogICAgJEZpcnN0Q29sdW1uLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChFdmVudCkgewoKICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY29sdW1uIHdpdGggYSB2YWx1ZQogICAgICAgIGlmICggJEZpcnN0Q29sdW1uLnZhbCgpICkgewogICAgICAgICAgICAvLyB3ZSByZW1vdmUgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZQogICAgICAgICAgICAkTmV4dEJ1dHRvbi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy8gd2UgYWRkIHRoZSBkaXNhYmxlZCBhdHRyaWJ1dGUKICAgICAgICAgICAgJE5leHRCdXR0b24uYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKICAgICAgICB9CgogICAgfSkudHJpZ2dlcignY2hhbmdlJyk7CgogICAgLy8gc2V0IHRoZSBoaWRkZW4gZmllbGQgdG8gZGVsZXRlIHRoaXMgY29sdW1uIGFuZCBzdWJtaXQgdGhlIGZvcm0KICAgICQoJy5EZWxldGVDb2xvbW4nKS51bmJpbmQoJ2NsaWNrJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbihFdmVudCkgewogICAgICAgICQodGhpcykuY2xvc2VzdCgndGQnKS5maW5kKCdpbnB1dFt0eXBlPSJoaWRkZW4iXScpLnZhbCgxKTsKICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2Zvcm0nKS5zdWJtaXQoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwoKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCgpbJSBSZW5kZXJCbG9ja0VuZCgiVGVtcGxhdGVFZGl0NCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZW1wbGF0ZUVkaXQ1IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlN0ZXAgNSBvZiA1IC0gRWRpdCBzZWFyY2ggaW5mb3JtYXRpb24iKSB8IGh0bWwgJV06PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlRlbXBsYXRlU2F2ZTUiIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iVGVtcGxhdGVJRCIgdmFsdWU9IlslIERhdGEuVGVtcGxhdGVJRCB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJUZW1wbGF0ZSBOYW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlJlc3RyaWN0RXhwb3J0Ij5bJSBUcmFuc2xhdGUoIlJlc3RyaWN0IGV4cG9ydCBwZXIgc2VhcmNoIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdCb3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5SZXN0cmljdEV4cG9ydFN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlRlbXBsYXRlRWRpdDVFbGVtZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5JRCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLklucHV0U3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRlbXBsYXRlRWRpdDVFbGVtZW50IikgJV0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9IlN1Ym1pdEJhY2siIHZhbHVlPSJTdWJtaXRCYWNrIj5bJSBUcmFuc2xhdGUoIkJhY2siKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgbmFtZT0iU3VibWl0TmV4dCIgdmFsdWU9IlN1Ym1pdE5leHQiPlslIFRyYW5zbGF0ZSgiRmluaXNoIikgfCBodG1sICVdPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVGVtcGxhdGVFZGl0NSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbXBvcnRJbmZvcm1hdGlvbiIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJJbXBvcnQgaW5mb3JtYXRpb24iKSB8IGh0bWwgJV06PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkltcG9ydCIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUZW1wbGF0ZUlEIiB2YWx1ZT0iWyUgRGF0YS5UZW1wbGF0ZUlEIHwgaHRtbCAlXSIgLz4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU291cmNlRmlsZSI+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlNvdXJjZUZpbGUiPlslIFRyYW5zbGF0ZSgiU291cmNlIEZpbGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9IlNvdXJjZUZpbGUiIHNpemU9IjQwIiBjbGFzcz0iZml4ZWQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU3RhcnQgSW1wb3J0IikgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoIlN0YXJ0IEltcG9ydCIpIHwgaHRtbCAlXTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkltcG9ydEluZm9ybWF0aW9uIikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAgICAgJCgnYnV0dG9uLkJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9ICJbJSBFbnYoIkJhc2VsaW5rIikgJV1bJSBEYXRhLkJhY2tVUkwgfCBodG1sICVdIjsKICAgICAgICB9KTsKICAgIC8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKCiAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkTWV0aG9kKCJWYWxpZGF0ZV9OdW1iZXJCaWdnZXJUaGFuWmVybyIsIGZ1bmN0aW9uKFZhbHVlLCBFbGVtZW50KSB7CiAgICAgICAgdmFyIE51bWJlciA9IHBhcnNlSW50KFZhbHVlLCAxMCk7CiAgICAgICAgaWYgKGlzTmFOKE51bWJlcikpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKE51bWJlciA+IDApIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICB9KTsKCiAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkTWV0aG9kKCJWYWxpZGF0ZV9OdW1iZXJJbnRlZ2VyIiwgZnVuY3Rpb24oVmFsdWUsIEVsZW1lbnQpIHsKICAgICAgICByZXR1cm4gKFZhbHVlLm1hdGNoKC9eWzAtOV0rJC8pKSA/IHRydWUgOiBmYWxzZTsKCiAgICB9KTsKCiAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkUnVsZSgiVmFsaWRhdGVfTnVtYmVyQmlnZ2VyVGhhblplcm8iLCB7IFZhbGlkYXRlX051bWJlckJpZ2dlclRoYW5aZXJvOiB0cnVlIH0pOwogICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkFkZFJ1bGUoIlZhbGlkYXRlX051bWJlckludGVnZXIiLCB7IFZhbGlkYXRlX051bWJlckludGVnZXI6IHRydWUgfSk7CiAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkUnVsZSgiVmFsaWRhdGVfTnVtYmVySW50ZWdlckJpZ2dlclRoYW5aZXJvIiwgeyBWYWxpZGF0ZV9OdW1iZXJJbnRlZ2VyOiB0cnVlLCBWYWxpZGF0ZV9OdW1iZXJCaWdnZXJUaGFuWmVybzogdHJ1ZSB9KTsKCi8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQoKPC9kaXY+CgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSW1wb3J0UmVzdWx0IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBcmlhUm9sZU1haW4iPgogICAgPGRpdiBjbGFzcz0iVzUwcGMgU3BhY2luZ1RvcExhcmdlIFNwYWNpbmdCb3R0b21MYXJnZSBDZW50ZXJCb3giPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJJbXBvcnQgc3VtbWFyeSBmb3IiKSB8IGh0bWwgJV0gWyUgRGF0YS5PYmplY3QgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iT3ZlcnZpZXciLz4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJSZWNvcmRzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkNvdW50ZXIgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlN1Y2Nlc3MiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TdWNjZXNzIHwgaHRtbCAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbXBvcnRSZXN1bHRSZXR1cm5Db2RlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbJSBUcmFuc2xhdGUoRGF0YS5SZXR1cm5Db2RlTmFtZSkgfCBodG1sICVdOiBbJSBEYXRhLlJldHVybkNvZGVDb3VudCB8IGh0bWwgJV0pClslIFJlbmRlckJsb2NrRW5kKCJJbXBvcnRSZXN1bHRSZXR1cm5Db2RlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkZhaWxlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5GYWlsZWQgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkltcG9ydFJlc3VsdER1cGxpY2F0ZU5hbWVzIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiRHVwbGljYXRlIG5hbWVzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkR1cGxpY2F0ZU5hbWVzIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbXBvcnRSZXN1bHREdXBsaWNhdGVOYW1lcyIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbXBvcnRSZXN1bHRMYXN0TGluZU51bWJlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkxhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkxhc3RMaW5lTnVtYmVyIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbXBvcnRSZXN1bHRMYXN0TGluZU51bWJlciIpICVdCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkNlbnRlciBTcGFjaW5nVG9wU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0iT2siIHZhbHVlPSJbJSBUcmFuc2xhdGUoIk9rIikgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoIk9rIikgfCBodG1sICVdPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkltcG9ydFJlc3VsdCIpICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQgLSBpbXBvcnQsIGV4cG9ydCBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGltcG9ydCBhbmQgZXhwb3J0IGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJEltcG9ydEV4cG9ydE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBUZW1wbGF0ZUxpc3QoKQoKcmV0dXJuIGEgbGlzdCBvZiB0ZW1wbGF0ZXMgYXMgYXJyYXkgcmVmZXJlbmNlCgogICAgbXkgJFRlbXBsYXRlTGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlTGlzdCgKICAgICAgICBPYmplY3QgPT4gJ1RpY2tldCcsICAjIChvcHRpb25hbCkKICAgICAgICBGb3JtYXQgPT4gJ0NTVicgICAgICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgVGVtcGxhdGVMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBzcWwgc3RyaW5nCiAgICBteSAkU1FMID0gJ1NFTEVDVCBpZCBGUk9NIGltZXhwb3J0X3RlbXBsYXRlIFdIRVJFIDE9MSAnOwogICAgbXkgQEJJTkQ7CgogICAgaWYgKCAkUGFyYW17T2JqZWN0fSApIHsKICAgICAgICAkU1FMIC49ICdBTkQgaW1leHBvcnRfb2JqZWN0ID0gPyAnOwogICAgICAgIHB1c2ggQEJJTkQsIFwkUGFyYW17T2JqZWN0fTsKICAgIH0KICAgIGlmICggJFBhcmFte0Zvcm1hdH0gKSB7CiAgICAgICAgJFNRTCAuPSAnQU5EIGltZXhwb3J0X2Zvcm1hdCA9ID8gJzsKICAgICAgICBwdXNoIEBCSU5ELCBcJFBhcmFte0Zvcm1hdH07CiAgICB9CgogICAgIyBhZGQgb3JkZXIgb3B0aW9uCiAgICAkU1FMIC49ICdPUkRFUiBCWSBpZCc7CgogICAgIyBnZXQgREIgb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICBCaW5kID0+IFxAQklORCwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAVGVtcGxhdGVMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAVGVtcGxhdGVMaXN0LCAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBcQFRlbXBsYXRlTGlzdDsKfQoKPWl0ZW0gVGVtcGxhdGVHZXQoKQoKZ2V0IGEgaW1wb3J0IGV4cG9ydCB0ZW1wbGF0ZQoKUmV0dXJuCiAgICAkVGVtcGxhdGVEYXRhe1RlbXBsYXRlSUR9CiAgICAkVGVtcGxhdGVEYXRhe051bWJlcn0KICAgICRUZW1wbGF0ZURhdGF7T2JqZWN0fQogICAgJFRlbXBsYXRlRGF0YXtGb3JtYXR9CiAgICAkVGVtcGxhdGVEYXRhe05hbWV9CiAgICAkVGVtcGxhdGVEYXRhe1ZhbGlkSUR9CiAgICAkVGVtcGxhdGVEYXRhe0NvbW1lbnR9CiAgICAkVGVtcGxhdGVEYXRhe0NyZWF0ZVRpbWV9CiAgICAkVGVtcGxhdGVEYXRhe0NyZWF0ZUJ5fQogICAgJFRlbXBsYXRlRGF0YXtDaGFuZ2VUaW1lfQogICAgJFRlbXBsYXRlRGF0YXtDaGFuZ2VCeX0KCiAgICBteSAkVGVtcGxhdGVEYXRhUmVmID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgVGVtcGxhdGVHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgcmVzdWx0IGlzIGFscmVhZHkgY2FjaGVkCiAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntUZW1wbGF0ZUdldH0tPnsgJFBhcmFte1RlbXBsYXRlSUR9IH0KICAgICAgICBpZiAkU2VsZi0+e0NhY2hlfS0+e1RlbXBsYXRlR2V0fS0+eyAkUGFyYW17VGVtcGxhdGVJRH0gfTsKCiAgICAjIGdldCBEQiBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIGltZXhwb3J0X29iamVjdCwgaW1leHBvcnRfZm9ybWF0LCBuYW1lLCB2YWxpZF9pZCwgY29tbWVudHMsICcKICAgICAgICAgICAgLiAnY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSBGUk9NIGltZXhwb3J0X3RlbXBsYXRlIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1RlbXBsYXRlSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlVGVtcGxhdGVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFRlbXBsYXRlRGF0YXtUZW1wbGF0ZUlEfSA9ICRSb3dbMF07CiAgICAgICAgJFRlbXBsYXRlRGF0YXtPYmplY3R9ICAgICA9ICRSb3dbMV07CiAgICAgICAgJFRlbXBsYXRlRGF0YXtGb3JtYXR9ICAgICA9ICRSb3dbMl07CiAgICAgICAgJFRlbXBsYXRlRGF0YXtOYW1lfSAgICAgICA9ICRSb3dbM107CiAgICAgICAgJFRlbXBsYXRlRGF0YXtWYWxpZElEfSAgICA9ICRSb3dbNF07CiAgICAgICAgJFRlbXBsYXRlRGF0YXtDb21tZW50fSAgICA9ICRSb3dbNV0gfHwgJyc7CiAgICAgICAgJFRlbXBsYXRlRGF0YXtDcmVhdGVUaW1lfSA9ICRSb3dbNl07CiAgICAgICAgJFRlbXBsYXRlRGF0YXtDcmVhdGVCeX0gICA9ICRSb3dbN107CiAgICAgICAgJFRlbXBsYXRlRGF0YXtDaGFuZ2VUaW1lfSA9ICRSb3dbOF07CiAgICAgICAgJFRlbXBsYXRlRGF0YXtDaGFuZ2VCeX0gICA9ICRSb3dbOV07CgogICAgICAgICRUZW1wbGF0ZURhdGF7TnVtYmVyfSA9IHNwcmludGYgIiUwNmQiLCAkVGVtcGxhdGVEYXRhe1RlbXBsYXRlSUR9OwogICAgfQoKICAgICMgY2FjaGUgdGhlIHJlc3VsdAogICAgJFNlbGYtPntDYWNoZX0tPntUZW1wbGF0ZUdldH0tPnsgJFBhcmFte1RlbXBsYXRlSUR9IH0gPSBcJVRlbXBsYXRlRGF0YTsKCiAgICByZXR1cm4gXCVUZW1wbGF0ZURhdGE7Cn0KCj1pdGVtIFRlbXBsYXRlQWRkKCkKCmFkZCBhIG5ldyBpbXBvcnQvZXhwb3J0IHRlbXBsYXRlCgogICAgbXkgJFRlbXBsYXRlSUQgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZUFkZCgKICAgICAgICBPYmplY3QgID0+ICdUaWNrZXQnLAogICAgICAgIEZvcm1hdCAgPT4gJ0NTVicsCiAgICAgICAgTmFtZSAgICA9PiAnVGVtcGxhdGUgTmFtZScsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIENvbW1lbnQgPT4gJ0NvbW1lbnQnLCAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFRlbXBsYXRlQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoT2JqZWN0IEZvcm1hdCBOYW1lIFZhbGlkSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgICRQYXJhbXtDb21tZW50fSB8fD0gJyc7CgogICAgIyBnZXQgQ2hlY2tJdGVtIG9iamVjdAogICAgbXkgJENoZWNrSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKTsKCiAgICAjIGNsZWFudXAgZ2l2ZW4gcGFyYW1zCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPYmplY3QgRm9ybWF0KSkgewogICAgICAgICRDaGVja0l0ZW1PYmplY3QtPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFNwYWNlcyAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkQ2hlY2tJdGVtT2JqZWN0LT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgREIgb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGZpbmQgZXhpdGluZyB0ZW1wbGF0ZSB3aXRoIHNhbWUgbmFtZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBpbWV4cG9ydF90ZW1wbGF0ZSBXSEVSRSBpbWV4cG9ydF9vYmplY3QgPSA/IEFORCBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte09iamVjdH0sIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICROb0FkZDsKICAgIHdoaWxlICggJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE5vQWRkID0gMTsKICAgIH0KCiAgICAjIGFib3J0IGluc2VydCBvZiBuZXcgdGVtcGxhdGUsIGlmIHRlbXBsYXRlIG5hbWUgYWxyZWFkeSBleGlzdHMKICAgIGlmICgkTm9BZGQpIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCBhZGQgbmV3IHRlbXBsYXRlISBUZW1wbGF0ZSB3aXRoIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGlzIG9iamVjdC4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgaW5zZXJ0IG5ldyB0ZW1wbGF0ZQogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gaW1leHBvcnRfdGVtcGxhdGUgJwogICAgICAgICAgICAuICcoaW1leHBvcnRfb2JqZWN0LCBpbWV4cG9ydF9mb3JtYXQsIG5hbWUsIHZhbGlkX2lkLCBjb21tZW50cywgJwogICAgICAgICAgICAuICdjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSBWQUxVRVMgJwogICAgICAgICAgICAuICcoPywgPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17T2JqZWN0fSwgXCRQYXJhbXtGb3JtYXR9LCBcJFBhcmFte05hbWV9LCBcJFBhcmFte1ZhbGlkSUR9LAogICAgICAgICAgICBcJFBhcmFte0NvbW1lbnR9LCBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGZpbmQgaWQgb2YgbmV3IHRlbXBsYXRlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIGltZXhwb3J0X3RlbXBsYXRlIFdIRVJFIGltZXhwb3J0X29iamVjdCA9ID8gQU5EIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17T2JqZWN0fSwgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFRlbXBsYXRlSUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkVGVtcGxhdGVJRCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRUZW1wbGF0ZUlEOwp9Cgo9aXRlbSBUZW1wbGF0ZVVwZGF0ZSgpCgp1cGRhdGUgYSBleGlzdGluZyBpbXBvcnQvZXhwb3J0IHRlbXBsYXRlCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZVVwZGF0ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBOYW1lICAgICAgID0+ICdUZW1wbGF0ZSBOYW1lJywKICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgICA9PiAnQ29tbWVudCcsICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFRlbXBsYXRlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBOYW1lIFZhbGlkSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgICRQYXJhbXtDb21tZW50fSB8fD0gJyc7CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBDb21tZW50KSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IERCIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBnZXQgdGhlIG9iamVjdCBvZiB0aGlzIHRlbXBsYXRlIGlkCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpbWV4cG9ydF9vYmplY3QgRlJPTSBpbWV4cG9ydF90ZW1wbGF0ZSBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtUZW1wbGF0ZUlEfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJE9iamVjdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRPYmplY3QgPSAkUm93WzBdOwogICAgfQoKICAgIGlmICggISRPYmplY3QgKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgdXBkYXRlIHRlbXBsYXRlIGJlY2F1c2UgaXQgaGFzbid0IGJlZW4gZm91bmQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGZpbmQgZXhpdGluZyB0ZW1wbGF0ZSB3aXRoIHNhbWUgbmFtZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBpbWV4cG9ydF90ZW1wbGF0ZSBXSEVSRSBpbWV4cG9ydF9vYmplY3QgPSA/IEFORCBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJE9iamVjdCwgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFVwZGF0ZSA9IDE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBpZiAoICRQYXJhbXtUZW1wbGF0ZUlEfSBuZSAkUm93WzBdICkgewogICAgICAgICAgICAkVXBkYXRlID0gMDsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhJFVwZGF0ZSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCB1cGRhdGUgdGVtcGxhdGUhIFRlbXBsYXRlIHdpdGggc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoaXMgb2JqZWN0LiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyByZXNldCBjYWNoZQogICAgZGVsZXRlICRTZWxmLT57Q2FjaGV9LT57VGVtcGxhdGVHZXR9LT57ICRQYXJhbXtUZW1wbGF0ZUlEfSB9OwoKICAgICMgdXBkYXRlIHRlbXBsYXRlCiAgICByZXR1cm4gJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSBpbWV4cG9ydF90ZW1wbGF0ZSBTRVQgbmFtZSA9ID8sJwogICAgICAgICAgICAuICd2YWxpZF9pZCA9ID8sIGNvbW1lbnRzID0gPywgJwogICAgICAgICAgICAuICdjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/ICcKICAgICAgICAgICAgLiAnV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwgXCRQYXJhbXtWYWxpZElEfSwgXCRQYXJhbXtDb21tZW50fSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIF0sCiAgICApOwp9Cgo9aXRlbSBUZW1wbGF0ZURlbGV0ZSgpCgpkZWxldGUgZXhpc3RpbmcgaW1wb3J0L2V4cG9ydCB0ZW1wbGF0ZXMKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gWzEsNDQsMTY2LDVdLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgVGVtcGxhdGVEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIGlmICggIXJlZiAkUGFyYW17VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgJFBhcmFte1RlbXBsYXRlSUR9ID0gWyAkUGFyYW17VGVtcGxhdGVJRH0gXTsKICAgIH0KICAgIGVsc2lmICggcmVmICRQYXJhbXtUZW1wbGF0ZUlEfSBuZSAnQVJSQVknICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1RlbXBsYXRlSUQgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2Ugb3IgYSBzdHJpbmchJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRlbGV0ZSBleGlzdGluZyBzZWFyY2ggZGF0YQogICAgJFNlbGYtPlNlYXJjaERhdGFEZWxldGUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBkZWxldGUgYWxsIG1hcHBpbmcgZGF0YQogICAgZm9yIG15ICRUZW1wbGF0ZUlEICggQHsgJFBhcmFte1RlbXBsYXRlSUR9IH0gKSB7CiAgICAgICAgJFNlbGYtPk1hcHBpbmdEZWxldGUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRlbGV0ZSBleGlzdGluZyBmb3JtYXQgZGF0YQogICAgJFNlbGYtPkZvcm1hdERhdGFEZWxldGUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBkZWxldGUgZXhpc3Rpbmcgb2JqZWN0IGRhdGEKICAgICRTZWxmLT5PYmplY3REYXRhRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY3JlYXRlIHRoZSB0ZW1wbGF0ZSBpZCBzdHJpbmcKICAgIG15ICRUZW1wbGF0ZUlEU3RyaW5nID0gam9pbiBxeywgfSwgbWFwIHsnPyd9IEB7ICRQYXJhbXtUZW1wbGF0ZUlEfSB9OwoKICAgICMgY3JlYXRlIGFuZCBhZGQgYmluZCBwYXJhbWV0ZXJzCiAgICBteSBAQklORCA9IG1hcCB7IFwkXyB9IEB7ICRQYXJhbXtUZW1wbGF0ZUlEfSB9OwoKICAgICMgcmVzZXQgY2FjaGUKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlfS0+e1RlbXBsYXRlR2V0fTsKCiAgICAjIGRlbGV0ZSB0ZW1wbGF0ZXMKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMICA9PiAiREVMRVRFIEZST00gaW1leHBvcnRfdGVtcGxhdGUgV0hFUkUgaWQgSU4gKCAkVGVtcGxhdGVJRFN0cmluZyApIiwKICAgICAgICBCaW5kID0+IFxAQklORCwKICAgICk7Cn0KCj1pdGVtIE9iamVjdExpc3QoKQoKcmV0dXJuIGEgbGlzdCBvZiBhdmFpbGFibGUgb2JqZWN0cyBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRPYmplY3RMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0TGlzdCgpOwoKPWN1dAoKc3ViIE9iamVjdExpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcKICAgIG15ICRNb2R1bGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmRSZWdpc3RyYXRpb24nKTsKCiAgICByZXR1cm4gaWYgISRNb2R1bGVMaXN0OwogICAgcmV0dXJuIGlmIHJlZiAkTW9kdWxlTGlzdCBuZSAnSEFTSCc7CgogICAgIyBjcmVhdGUgdGhlIG9iamVjdCBsaXN0CiAgICBteSAkT2JqZWN0TGlzdCA9IHt9OwogICAgZm9yIG15ICRNb2R1bGUgKCBzb3J0IGtleXMgJXskTW9kdWxlTGlzdH0gKSB7CiAgICAgICAgJE9iamVjdExpc3QtPnskTW9kdWxlfSA9ICRNb2R1bGVMaXN0LT57JE1vZHVsZX0tPntOYW1lfTsKICAgIH0KCiAgICByZXR1cm4gJE9iamVjdExpc3Q7Cn0KCj1pdGVtIE9iamVjdEF0dHJpYnV0ZXNHZXQoKQoKZ2V0IHRoZSBhdHRyaWJ1dGVzIG9mIGFuIG9iamVjdCBiYWNrZW5kIGFzIGFycmF5L2hhc2ggcmVmZXJlbmNlCgogICAgbXkgJEF0dHJpYnV0ZXMgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0QXR0cmlidXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGVtcGxhdGUgZGF0YQogICAgbXkgJFRlbXBsYXRlRGF0YSA9ICRTZWxmLT5UZW1wbGF0ZUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIHRlbXBsYXRlIGRhdGEKICAgIGlmICggISRUZW1wbGF0ZURhdGEgfHwgISRUZW1wbGF0ZURhdGEtPntPYmplY3R9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRlbXBsYXRlIHdpdGggSUQgJFBhcmFte1RlbXBsYXRlSUR9IGlzIGluY29tcGxldGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvYWQgYmFja2VuZAogICAgbXkgJEJhY2tlbmQgPSAkS2VybmVsOjpPTS0+R2V0KAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjonIC4gJFRlbXBsYXRlRGF0YS0+e09iamVjdH0KICAgICk7CgogICAgcmV0dXJuIGlmICEkQmFja2VuZDsKCiAgICAjIGdldCBhbiBhdHRyaWJ1dGUgbGlzdCBvZiB0aGUgb2JqZWN0CiAgICBteSAkQXR0cmlidXRlcyA9ICRCYWNrZW5kLT5PYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuICRBdHRyaWJ1dGVzOwp9Cgo9aXRlbSBPYmplY3REYXRhR2V0KCkKCmdldCB0aGUgb2JqZWN0IGRhdGEgZnJvbSBhIHRlbXBsYXRlCgogICAgbXkgJE9iamVjdERhdGFSZWYgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3REYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE9iamVjdERhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IERCIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICdTRUxFQ1QgZGF0YV9rZXksIGRhdGFfdmFsdWUgRlJPTSBpbWV4cG9ydF9vYmplY3QgV0hFUkUgdGVtcGxhdGVfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtUZW1wbGF0ZUlEfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVPYmplY3REYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE9iamVjdERhdGF7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgcmV0dXJuIFwlT2JqZWN0RGF0YTsKfQoKPWl0ZW0gT2JqZWN0RGF0YVNhdmUoKQoKc2F2ZSB0aGUgb2JqZWN0IGRhdGEgb2YgYSB0ZW1wbGF0ZQoKICAgIG15ICRUcnVlID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0RGF0YVNhdmUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgT2JqZWN0RGF0YSA9PiAkSGFzaFJlZiwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE9iamVjdERhdGFTYXZlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBPYmplY3REYXRhIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIGlmICggcmVmICRQYXJhbXtPYmplY3REYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnT2JqZWN0RGF0YSBtdXN0IGJlIGEgaGFzaCByZWZlcmVuY2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRlbGV0ZSBleGlzdGluZyBvYmplY3QgZGF0YQogICAgJFNlbGYtPk9iamVjdERhdGFEZWxldGUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgREFUQUtFWToKICAgIGZvciBteSAkRGF0YUtleSAoIHNvcnQga2V5cyAleyAkUGFyYW17T2JqZWN0RGF0YX0gfSApIHsKCiAgICAgICAgbXkgJERhdGFWYWx1ZSA9ICRQYXJhbXtPYmplY3REYXRhfS0+eyREYXRhS2V5fTsKCiAgICAgICAgbmV4dCBEQVRBS0VZIGlmICFkZWZpbmVkICREYXRhS2V5OwogICAgICAgIG5leHQgREFUQUtFWSBpZiAhZGVmaW5lZCAkRGF0YVZhbHVlOwoKICAgICAgICAjIGluc2VydCBvbmUgcm93CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGltZXhwb3J0X29iamVjdCAnCiAgICAgICAgICAgICAgICAuICcodGVtcGxhdGVfaWQsIGRhdGFfa2V5LCBkYXRhX3ZhbHVlKSBWQUxVRVMgJwogICAgICAgICAgICAgICAgLiAnKD8sID8sID8pJywKICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VGVtcGxhdGVJRH0sIFwkRGF0YUtleSwgXCREYXRhVmFsdWUgXSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBPYmplY3REYXRhRGVsZXRlKCkKCmRlbGV0ZSB0aGUgZXhpc3Rpbmcgb2JqZWN0IGRhdGEgb2YgYSB0ZW1wbGF0ZQoKICAgIG15ICRUcnVlID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0RGF0YURlbGV0ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3REYXRhRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gWzEsNDQsMTY2LDVdLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0RGF0YURlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhcmVmICRQYXJhbXtUZW1wbGF0ZUlEfSApIHsKICAgICAgICAkUGFyYW17VGVtcGxhdGVJRH0gPSBbICRQYXJhbXtUZW1wbGF0ZUlEfSBdOwogICAgfQogICAgZWxzaWYgKCByZWYgJFBhcmFte1RlbXBsYXRlSUR9IG5lICdBUlJBWScgKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnVGVtcGxhdGVJRCBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSBvciBhIHN0cmluZyEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIHRoZSB0ZW1wbGF0ZSBpZCBzdHJpbmcKICAgIG15ICRUZW1wbGF0ZUlEU3RyaW5nID0gam9pbiBxeywgfSwgbWFwIHsnPyd9IEB7ICRQYXJhbXtUZW1wbGF0ZUlEfSB9OwoKICAgICMgY3JlYXRlIGFuZCBhZGQgYmluZCBwYXJhbWV0ZXJzCiAgICBteSBAQklORCA9IG1hcCB7IFwkXyB9IEB7ICRQYXJhbXtUZW1wbGF0ZUlEfSB9OwoKICAgICMgZGVsZXRlIHRlbXBsYXRlcwogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBpbWV4cG9ydF9vYmplY3QgV0hFUkUgdGVtcGxhdGVfaWQgSU4gKCAkVGVtcGxhdGVJRFN0cmluZyApIiwKICAgICAgICBCaW5kID0+IFxAQklORCwKICAgICk7Cn0KCj1pdGVtIEZvcm1hdExpc3QoKQoKcmV0dXJuIGEgbGlzdCBvZiBhdmFpbGFibGUgZm9ybWF0cyBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRGb3JtYXRMaXN0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0TGlzdCgpOwoKPWN1dAoKc3ViIEZvcm1hdExpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcKICAgIG15ICRNb2R1bGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmRSZWdpc3RyYXRpb24nKTsKCiAgICByZXR1cm4gaWYgISRNb2R1bGVMaXN0OwogICAgcmV0dXJuIGlmIHJlZiAkTW9kdWxlTGlzdCBuZSAnSEFTSCc7CgogICAgIyBjcmVhdGUgdGhlIGZvcm1hdCBsaXN0CiAgICBteSAkRm9ybWF0TGlzdCA9IHt9OwogICAgZm9yIG15ICRNb2R1bGUgKCBzb3J0IGtleXMgJXskTW9kdWxlTGlzdH0gKSB7CiAgICAgICAgJEZvcm1hdExpc3QtPnskTW9kdWxlfSA9ICRNb2R1bGVMaXN0LT57JE1vZHVsZX0tPntOYW1lfTsKICAgIH0KCiAgICByZXR1cm4gJEZvcm1hdExpc3Q7Cn0KCj1pdGVtIEZvcm1hdEF0dHJpYnV0ZXNHZXQoKQoKZ2V0IHRoZSBhdHRyaWJ1dGVzIG9mIGEgZm9ybWF0IGJhY2tlbmQgYXMgYXJyYXkvaGFzaCByZWZlcmVuY2UKCiAgICBteSAkQXR0cmlidXRlcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBGb3JtYXRBdHRyaWJ1dGVzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICBteSAkVGVtcGxhdGVEYXRhID0gJFNlbGYtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgdGVtcGxhdGUgZGF0YQogICAgaWYgKCAhJFRlbXBsYXRlRGF0YSB8fCAhJFRlbXBsYXRlRGF0YS0+e0Zvcm1hdH0gKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVGVtcGxhdGUgd2l0aCBJRCAkUGFyYW17VGVtcGxhdGVJRH0gaXMgaW5jb21wbGV0ZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9hZCBiYWNrZW5kCiAgICBteSAkQmFja2VuZCA9ICRLZXJuZWw6Ok9NLT5HZXQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmQ6OicgLiAkVGVtcGxhdGVEYXRhLT57Rm9ybWF0fQogICAgKTsKCiAgICByZXR1cm4gaWYgISRCYWNrZW5kOwoKICAgICMgZ2V0IGFuIGF0dHJpYnV0ZSBsaXN0IG9mIHRoZSBmb3JtYXQKICAgIG15ICRBdHRyaWJ1dGVzID0gJEJhY2tlbmQtPkZvcm1hdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZXM7Cn0KCj1pdGVtIEZvcm1hdERhdGFHZXQoKQoKZ2V0IHRoZSBmb3JtYXQgZGF0YSBmcm9tIGEgdGVtcGxhdGUKCiAgICBteSAkRm9ybWF0RGF0YVJlZiA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybWF0RGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgREIgb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBkYXRhX2tleSwgZGF0YV92YWx1ZSBGUk9NIGltZXhwb3J0X2Zvcm1hdCBXSEVSRSB0ZW1wbGF0ZV9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1RlbXBsYXRlSUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJUZvcm1hdERhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRm9ybWF0RGF0YXsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICByZXR1cm4gXCVGb3JtYXREYXRhOwp9Cgo9aXRlbSBGb3JtYXREYXRhU2F2ZSgpCgpzYXZlIHRoZSBmb3JtYXQgZGF0YSBvZiBhIHRlbXBsYXRlCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXREYXRhU2F2ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBGb3JtYXREYXRhID0+ICRIYXNoUmVmLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybWF0RGF0YVNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIEZvcm1hdERhdGEgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCByZWYgJFBhcmFte0Zvcm1hdERhdGF9IG5lICdIQVNIJyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdGb3JtYXREYXRhIG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGVsZXRlIGV4aXN0aW5nIGZvcm1hdCBkYXRhCiAgICAkU2VsZi0+Rm9ybWF0RGF0YURlbGV0ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBEQVRBS0VZOgogICAgZm9yIG15ICREYXRhS2V5ICggc29ydCBrZXlzICV7ICRQYXJhbXtGb3JtYXREYXRhfSB9ICkgewoKICAgICAgICBteSAkRGF0YVZhbHVlID0gJFBhcmFte0Zvcm1hdERhdGF9LT57JERhdGFLZXl9OwoKICAgICAgICBuZXh0IERBVEFLRVkgaWYgIWRlZmluZWQgJERhdGFLZXk7CiAgICAgICAgbmV4dCBEQVRBS0VZIGlmICFkZWZpbmVkICREYXRhVmFsdWU7CgogICAgICAgICMgaW5zZXJ0IG9uZSByb3cKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gaW1leHBvcnRfZm9ybWF0ICcKICAgICAgICAgICAgICAgIC4gJyh0ZW1wbGF0ZV9pZCwgZGF0YV9rZXksIGRhdGFfdmFsdWUpIFZBTFVFUyAoPywgPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtUZW1wbGF0ZUlEfSwgXCREYXRhS2V5LCBcJERhdGFWYWx1ZSBdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEZvcm1hdERhdGFEZWxldGUoKQoKZGVsZXRlIHRoZSBleGlzdGluZyBmb3JtYXQgZGF0YSBvZiBhIHRlbXBsYXRlCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXREYXRhRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdERhdGFEZWxldGUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiBbMSw0NCwxNjYsNV0sCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBGb3JtYXREYXRhRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICFyZWYgJFBhcmFte1RlbXBsYXRlSUR9ICkgewogICAgICAgICRQYXJhbXtUZW1wbGF0ZUlEfSA9IFsgJFBhcmFte1RlbXBsYXRlSUR9IF07CiAgICB9CiAgICBlbHNpZiAoIHJlZiAkUGFyYW17VGVtcGxhdGVJRH0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdUZW1wbGF0ZUlEIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlIG9yIGEgc3RyaW5nIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIHRlbXBsYXRlIGlkIHN0cmluZwogICAgbXkgJFRlbXBsYXRlSURTdHJpbmcgPSBqb2luIHF7LCB9LCBtYXAgeyc/J30gQHsgJFBhcmFte1RlbXBsYXRlSUR9IH07CgogICAgIyBjcmVhdGUgYW5kIGFkZCBiaW5kIHBhcmFtZXRlcnMKICAgIG15IEBCSU5EID0gbWFwIHsgXCRfIH0gQHsgJFBhcmFte1RlbXBsYXRlSUR9IH07CgogICAgIyBkZWxldGUgdGVtcGxhdGVzCiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGltZXhwb3J0X2Zvcm1hdCBXSEVSRSB0ZW1wbGF0ZV9pZCBJTiAoICRUZW1wbGF0ZUlEU3RyaW5nICkiLAogICAgICAgIEJpbmQgPT4gXEBCSU5ELAogICAgKTsKfQoKPWl0ZW0gTWFwcGluZ0xpc3QoKQoKcmV0dXJuIGEgbGlzdCBvZiBtYXBwaW5nIGRhdGEgaWRzIHNvcnRlZCBieSBwb3NpdGlvbiBhcyBhcnJheSByZWZlcmVuY2UKCiAgICBteSAkTWFwcGluZ0xpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nTGlzdCgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE1hcHBpbmdMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBEQiBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIGlkIEZST00gaW1leHBvcnRfbWFwcGluZyBXSEVSRSB0ZW1wbGF0ZV9pZCA9ID8gT1JERVIgQlkgcG9zaXRpb24nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1RlbXBsYXRlSUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQE1hcHBpbmdMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBATWFwcGluZ0xpc3QsICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIFxATWFwcGluZ0xpc3Q7Cn0KCj1pdGVtIE1hcHBpbmdBZGQoKQoKYWRkIGEgbmV3IG1hcHBpbmcgZGF0YSByb3cKCiAgICBteSAkTWFwcGluZ0lEID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0FkZCgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE1hcHBpbmdBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IERCIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBmaW5kIG1heGltdW0gcG9zaXRpb24KICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIG1heChwb3NpdGlvbikgRlJPTSBpbWV4cG9ydF9tYXBwaW5nIFdIRVJFIHRlbXBsYXRlX2lkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1RlbXBsYXRlSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkTmV3UG9zaXRpb24gPSAwOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgIGlmICggZGVmaW5lZCAkUm93WzBdICkgewogICAgICAgICAgICAkTmV3UG9zaXRpb24gPSAkUm93WzBdOwogICAgICAgICAgICAkTmV3UG9zaXRpb24rKzsKICAgICAgICB9CiAgICB9CgogICAgIyBpbnNlcnQgYSBuZXcgbWFwcGluZyBkYXRhIHJvdwogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCAgPT4gJ0lOU0VSVCBJTlRPIGltZXhwb3J0X21hcHBpbmcgKHRlbXBsYXRlX2lkLCBwb3NpdGlvbikgVkFMVUVTICg/LCA/KScsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VGVtcGxhdGVJRH0sIFwkTmV3UG9zaXRpb24gXSwKICAgICk7CgogICAgIyBmaW5kIGlkIG9mIG5ldyBtYXBwaW5nIGRhdGEgcm93CiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIGltZXhwb3J0X21hcHBpbmcgV0hFUkUgdGVtcGxhdGVfaWQgPSA/IEFORCBwb3NpdGlvbiA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtUZW1wbGF0ZUlEfSwgXCROZXdQb3NpdGlvbiBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJE1hcHBpbmdJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRNYXBwaW5nSUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkTWFwcGluZ0lEOwp9Cgo9aXRlbSBNYXBwaW5nRGVsZXRlKCkKCmRlbGV0ZSBleGlzdGluZyBtYXBwaW5nIGRhdGEgcm93cwoKICAgIG15ICRUcnVlID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0RlbGV0ZSgKICAgICAgICBNYXBwaW5nSUQgID0+IDEyMywKICAgICAgICBUZW1wbGF0ZUlEID0+IDMyMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gMzIxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ0RlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgREIgb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte01hcHBpbmdJRH0gKSB7CgogICAgICAgICMgZGVsZXRlIGV4aXN0aW5nIG9iamVjdCBtYXBwaW5nIGRhdGEKICAgICAgICAkU2VsZi0+TWFwcGluZ09iamVjdERhdGFEZWxldGUoCiAgICAgICAgICAgIE1hcHBpbmdJRCA9PiAkUGFyYW17TWFwcGluZ0lEfSwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIGV4aXN0aW5nIGZvcm1hdCBtYXBwaW5nIGRhdGEKICAgICAgICAkU2VsZi0+TWFwcGluZ0Zvcm1hdERhdGFEZWxldGUoCiAgICAgICAgICAgIE1hcHBpbmdJRCA9PiAkUGFyYW17TWFwcGluZ0lEfSwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIG9uZSBtYXBwaW5nIHJvdwogICAgICAgICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGltZXhwb3J0X21hcHBpbmcgV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17TWFwcGluZ0lEfSBdLAogICAgICAgICk7CgogICAgICAgICMgcmVidWlsZCBtYXBwaW5nIHBvc2l0aW9ucwogICAgICAgICRTZWxmLT5NYXBwaW5nUG9zaXRpb25SZWJ1aWxkKAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGdldCBtYXBwaW5nIGxpc3QKICAgICAgICBteSAkTWFwcGluZ0xpc3QgPSAkU2VsZi0+TWFwcGluZ0xpc3QoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGZvciBteSAkTWFwcGluZ0lEICggQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAgICAgIyBkZWxldGUgZXhpc3Rpbmcgb2JqZWN0IG1hcHBpbmcgZGF0YQogICAgICAgICAgICAkU2VsZi0+TWFwcGluZ09iamVjdERhdGFEZWxldGUoCiAgICAgICAgICAgICAgICBNYXBwaW5nSUQgPT4gJE1hcHBpbmdJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZGVsZXRlIGV4aXN0aW5nIGZvcm1hdCBtYXBwaW5nIGRhdGEKICAgICAgICAgICAgJFNlbGYtPk1hcHBpbmdGb3JtYXREYXRhRGVsZXRlKAogICAgICAgICAgICAgICAgTWFwcGluZ0lEID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSBhbGwgbWFwcGluZyByb3dzIG9mIHRoaXMgdGVtcGxhdGUKICAgICAgICByZXR1cm4gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gaW1leHBvcnRfbWFwcGluZyBXSEVSRSB0ZW1wbGF0ZV9pZCA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtUZW1wbGF0ZUlEfSBdLAogICAgICAgICk7CiAgICB9Cn0KCj1pdGVtIE1hcHBpbmdVcCgpCgptb3ZlIGFuIG1hcHBpbmcgZGF0YSByb3cgdXAKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdVcCgKICAgICAgICBNYXBwaW5nSUQgID0+IDEyMywKICAgICAgICBUZW1wbGF0ZUlEID0+IDMyMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE1hcHBpbmdVcCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhNYXBwaW5nSUQgVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IG1hcHBpbmcgZGF0YSBsaXN0CiAgICBteSAkTWFwcGluZ0xpc3QgPSAkU2VsZi0+TWFwcGluZ0xpc3QoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIDEgaWYgJFBhcmFte01hcHBpbmdJRH0gPT0gJE1hcHBpbmdMaXN0LT5bMF07CgogICAgIyBnZXQgREIgb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBwb3NpdGlvbiBGUk9NIGltZXhwb3J0X21hcHBpbmcgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtNYXBwaW5nSUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFBvc2l0aW9uOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFBvc2l0aW9uID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gMSBpZiAhJFBvc2l0aW9uOwoKICAgIG15ICRQb3NpdGlvblVwcGVyID0gJFBvc2l0aW9uIC0gMTsKCiAgICAjIHVwZGF0ZSBwb3NpdGlvbnMKICAgICREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMICA9PiAnVVBEQVRFIGltZXhwb3J0X21hcHBpbmcgU0VUIHBvc2l0aW9uID0gPyBXSEVSRSB0ZW1wbGF0ZV9pZCA9ID8gQU5EIHBvc2l0aW9uID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUG9zaXRpb24sIFwkUGFyYW17VGVtcGxhdGVJRH0sIFwkUG9zaXRpb25VcHBlciBdLAogICAgKTsKICAgICREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMICA9PiAnVVBEQVRFIGltZXhwb3J0X21hcHBpbmcgU0VUIHBvc2l0aW9uID0gPyBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBvc2l0aW9uVXBwZXIsIFwkUGFyYW17TWFwcGluZ0lEfSBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gTWFwcGluZ0Rvd24oKQoKbW92ZSBhbiBtYXBwaW5nIGRhdGEgcm93IGRvd24KCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdEb3duKAogICAgICAgIE1hcHBpbmdJRCAgPT4gMTIzLAogICAgICAgIFRlbXBsYXRlSUQgPT4gMzIxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ0Rvd24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTWFwcGluZ0lEIFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBtYXBwaW5nIGRhdGEgbGlzdAogICAgbXkgJE1hcHBpbmdMaXN0ID0gJFNlbGYtPk1hcHBpbmdMaXN0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxIGlmICRQYXJhbXtNYXBwaW5nSUR9ID09ICRNYXBwaW5nTGlzdC0+Wy0xXTsKCiAgICAjIGdldCBEQiBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIHBvc2l0aW9uIEZST00gaW1leHBvcnRfbWFwcGluZyBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte01hcHBpbmdJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkUG9zaXRpb247CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUG9zaXRpb24gPSAkUm93WzBdOwogICAgfQoKICAgIG15ICRQb3NpdGlvbkRvd24gPSAkUG9zaXRpb24gKyAxOwoKICAgICMgdXBkYXRlIHBvc2l0aW9ucwogICAgJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgID0+ICdVUERBVEUgaW1leHBvcnRfbWFwcGluZyBTRVQgcG9zaXRpb24gPSA/IFdIRVJFIHRlbXBsYXRlX2lkID0gPyBBTkQgcG9zaXRpb24gPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQb3NpdGlvbiwgXCRQYXJhbXtUZW1wbGF0ZUlEfSwgXCRQb3NpdGlvbkRvd24gXSwKICAgICk7CiAgICAkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCAgPT4gJ1VQREFURSBpbWV4cG9ydF9tYXBwaW5nIFNFVCBwb3NpdGlvbiA9ID8gV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQb3NpdGlvbkRvd24sIFwkUGFyYW17TWFwcGluZ0lEfSBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gTWFwcGluZ1Bvc2l0aW9uUmVidWlsZCgpCgpyZWJ1aWxkIHRoZSBwb3NpdGlvbnMgb2YgYSBtYXBwaW5nIGxpc3QKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdQb3NpdGlvblJlYnVpbGQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBNYXBwaW5nUG9zaXRpb25SZWJ1aWxkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBtYXBwaW5nIGRhdGEgbGlzdAogICAgbXkgJE1hcHBpbmdMaXN0ID0gJFNlbGYtPk1hcHBpbmdMaXN0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgdXBkYXRlIHBvc2l0aW9uCiAgICBteSAkQ291bnRlciA9IDA7CiAgICBmb3IgbXkgJE1hcHBpbmdJRCAoIEB7JE1hcHBpbmdMaXN0fSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gJ1VQREFURSBpbWV4cG9ydF9tYXBwaW5nIFNFVCBwb3NpdGlvbiA9ID8gV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkQ291bnRlciwgXCRNYXBwaW5nSUQgXSwKICAgICAgICApOwogICAgICAgICRDb3VudGVyKys7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KCkKCmdldCB0aGUgYXR0cmlidXRlcyBvZiBhbiBvYmplY3QgYmFja2VuZCBhcyBhcnJheS9oYXNoIHJlZmVyZW5jZQoKICAgIG15ICRBdHRyaWJ1dGVzID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBNYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGVtcGxhdGUgZGF0YQogICAgbXkgJFRlbXBsYXRlRGF0YSA9ICRTZWxmLT5UZW1wbGF0ZUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIHRlbXBsYXRlIGRhdGEKICAgIGlmICggISRUZW1wbGF0ZURhdGEgfHwgISRUZW1wbGF0ZURhdGEtPntPYmplY3R9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRlbXBsYXRlIHdpdGggSUQgJFBhcmFte1RlbXBsYXRlSUR9IGlzIGluY29tcGxldGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvYWQgYmFja2VuZAogICAgbXkgJEJhY2tlbmQgPSAkS2VybmVsOjpPTS0+R2V0KAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjonIC4gJFRlbXBsYXRlRGF0YS0+e09iamVjdH0KICAgICk7CgogICAgcmV0dXJuIGlmICEkQmFja2VuZDsKCiAgICAjIGdldCBhbiBhdHRyaWJ1dGUgbGlzdCBvZiB0aGUgb2JqZWN0CiAgICBteSAkQXR0cmlidXRlcyA9ICRCYWNrZW5kLT5NYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZXM7Cn0KCj1pdGVtIE1hcHBpbmdPYmplY3REYXRhRGVsZXRlKCkKCmRlbGV0ZSB0aGUgZXhpc3Rpbmcgb2JqZWN0IGRhdGEgb2YgYSBtYXBwaW5nCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nT2JqZWN0RGF0YURlbGV0ZSgKICAgICAgICBNYXBwaW5nSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgIG15ICRUcnVlID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ09iamVjdERhdGFEZWxldGUoCiAgICAgICAgTWFwcGluZ0lEID0+IFsxLDQ0LDE2Niw1XSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ09iamVjdERhdGFEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhNYXBwaW5nSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhcmVmICRQYXJhbXtNYXBwaW5nSUR9ICkgewogICAgICAgICRQYXJhbXtNYXBwaW5nSUR9ID0gWyAkUGFyYW17TWFwcGluZ0lEfSBdOwogICAgfQogICAgZWxzaWYgKCByZWYgJFBhcmFte01hcHBpbmdJRH0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdNYXBwaW5nSUQgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2Ugb3IgYSBzdHJpbmchJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSB0aGUgdGVtcGxhdGUgaWQgc3RyaW5nCiAgICBteSAkTWFwcGluZ0lEU3RyaW5nID0gam9pbiBxeywgfSwgbWFwIHsnPyd9IEB7ICRQYXJhbXtNYXBwaW5nSUR9IH07CgogICAgIyBjcmVhdGUgYW5kIGFkZCBiaW5kIHBhcmFtZXRlcnMKICAgIG15IEBCSU5EID0gbWFwIHsgXCRfIH0gQHsgJFBhcmFte01hcHBpbmdJRH0gfTsKCiAgICAjIGRlbGV0ZSBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGltZXhwb3J0X21hcHBpbmdfb2JqZWN0IFdIRVJFIG1hcHBpbmdfaWQgSU4gKCAkTWFwcGluZ0lEU3RyaW5nICkiLAogICAgICAgIEJpbmQgPT4gXEBCSU5ELAogICAgKTsKfQoKPWl0ZW0gTWFwcGluZ09iamVjdERhdGFTYXZlKCkKCnNhdmUgdGhlIG9iamVjdCBkYXRhIG9mIGEgbWFwcGluZwoKICAgIG15ICRUcnVlID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ09iamVjdERhdGFTYXZlKAogICAgICAgIE1hcHBpbmdJRCAgICAgICAgID0+IDEyMywKICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiAkSGFzaFJlZiwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBNYXBwaW5nT2JqZWN0RGF0YVNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhNYXBwaW5nSUQgTWFwcGluZ09iamVjdERhdGEgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCByZWYgJFBhcmFte01hcHBpbmdPYmplY3REYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTWFwcGluZ09iamVjdERhdGEgbXVzdCBiZSBhIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkZWxldGUgZXhpc3Rpbmcgb2JqZWN0IG1hcHBpbmcgZGF0YQogICAgJFNlbGYtPk1hcHBpbmdPYmplY3REYXRhRGVsZXRlKAogICAgICAgIE1hcHBpbmdJRCA9PiAkUGFyYW17TWFwcGluZ0lEfSwKICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIERBVEFLRVk6CiAgICBmb3IgbXkgJERhdGFLZXkgKCBzb3J0IGtleXMgJXsgJFBhcmFte01hcHBpbmdPYmplY3REYXRhfSB9ICkgewoKICAgICAgICBteSAkRGF0YVZhbHVlID0gJFBhcmFte01hcHBpbmdPYmplY3REYXRhfS0+eyREYXRhS2V5fTsKCiAgICAgICAgbmV4dCBEQVRBS0VZIGlmICFkZWZpbmVkICREYXRhS2V5OwogICAgICAgIG5leHQgREFUQUtFWSBpZiAhZGVmaW5lZCAkRGF0YVZhbHVlOwoKICAgICAgICAjIGluc2VydCBvbmUgbWFwcGluZyBvYmplY3Qgcm93CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGltZXhwb3J0X21hcHBpbmdfb2JqZWN0ICcKICAgICAgICAgICAgICAgIC4gJyhtYXBwaW5nX2lkLCBkYXRhX2tleSwgZGF0YV92YWx1ZSkgVkFMVUVTICg/LCA/LCA/KScsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte01hcHBpbmdJRH0sIFwkRGF0YUtleSwgXCREYXRhVmFsdWUgXSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBNYXBwaW5nT2JqZWN0RGF0YUdldCgpCgpnZXQgdGhlIG9iamVjdCBkYXRhIG9mIGEgbWFwcGluZwoKICAgIG15ICRPYmplY3REYXRhUmVmID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ09iamVjdERhdGFHZXQoCiAgICAgICAgTWFwcGluZ0lEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ09iamVjdERhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTWFwcGluZ0lEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgREIgb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBkYXRhX2tleSwgZGF0YV92YWx1ZSBGUk9NIGltZXhwb3J0X21hcHBpbmdfb2JqZWN0IFdIRVJFIG1hcHBpbmdfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtNYXBwaW5nSUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJU1hcHBpbmdPYmplY3REYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE1hcHBpbmdPYmplY3REYXRheyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgfQoKICAgIHJldHVybiBcJU1hcHBpbmdPYmplY3REYXRhOwp9Cgo9aXRlbSBNYXBwaW5nRm9ybWF0QXR0cmlidXRlc0dldCgpCgpnZXQgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gZm9ybWF0IGJhY2tlbmQgYXMgYXJyYXkvaGFzaCByZWZlcmVuY2UKCiAgICBteSAkQXR0cmlidXRlcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgIG15ICRUZW1wbGF0ZURhdGEgPSAkU2VsZi0+VGVtcGxhdGVHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayB0ZW1wbGF0ZSBkYXRhCiAgICBpZiAoICEkVGVtcGxhdGVEYXRhIHx8ICEkVGVtcGxhdGVEYXRhLT57Rm9ybWF0fSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUZW1wbGF0ZSB3aXRoIElEICRQYXJhbXtUZW1wbGF0ZUlEfSBpcyBpbmNvbXBsZXRlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb2FkIGJhY2tlbmQKICAgIG15ICRCYWNrZW5kID0gJEtlcm5lbDo6T00tPkdldCgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6Rm9ybWF0QmFja2VuZDo6JyAuICRUZW1wbGF0ZURhdGEtPntGb3JtYXR9CiAgICApOwoKICAgIHJldHVybiBpZiAhJEJhY2tlbmQ7CgogICAgIyBnZXQgYW4gYXR0cmlidXRlIGxpc3Qgb2YgdGhlIGZvcm1hdAogICAgbXkgJEF0dHJpYnV0ZXMgPSAkQmFja2VuZC0+TWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZXM7Cn0KCj1pdGVtIE1hcHBpbmdGb3JtYXREYXRhRGVsZXRlKCkKCmRlbGV0ZSB0aGUgZXhpc3RpbmcgZm9ybWF0IGRhdGEgb2YgYSBtYXBwaW5nCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nRm9ybWF0RGF0YURlbGV0ZSgKICAgICAgICBNYXBwaW5nSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgIG15ICRUcnVlID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0Zvcm1hdERhdGFEZWxldGUoCiAgICAgICAgTWFwcGluZ0lEID0+IFsxLDQ0LDE2Niw1XSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ0Zvcm1hdERhdGFEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhNYXBwaW5nSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhcmVmICRQYXJhbXtNYXBwaW5nSUR9ICkgewogICAgICAgICRQYXJhbXtNYXBwaW5nSUR9ID0gWyAkUGFyYW17TWFwcGluZ0lEfSBdOwogICAgfQogICAgZWxzaWYgKCByZWYgJFBhcmFte01hcHBpbmdJRH0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdNYXBwaW5nSUQgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2Ugb3IgYSBzdHJpbmchJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSB0aGUgdGVtcGxhdGUgaWQgc3RyaW5nCiAgICBteSAkTWFwcGluZ0lEU3RyaW5nID0gam9pbiBxeywgfSwgbWFwIHsnPyd9IEB7ICRQYXJhbXtNYXBwaW5nSUR9IH07CgogICAgIyBjcmVhdGUgYW5kIGFkZCBiaW5kIHBhcmFtZXRlcnMKICAgIG15IEBCSU5EID0gbWFwIHsgXCRfIH0gQHsgJFBhcmFte01hcHBpbmdJRH0gfTsKCiAgICAjIGRlbGV0ZSBtYXBwaW5nIGZvcm1hdCBkYXRhCiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGltZXhwb3J0X21hcHBpbmdfZm9ybWF0IFdIRVJFIG1hcHBpbmdfaWQgSU4gKCAkTWFwcGluZ0lEU3RyaW5nICkiLAogICAgICAgIEJpbmQgPT4gXEBCSU5ELAogICAgKTsKfQoKPWl0ZW0gTWFwcGluZ0Zvcm1hdERhdGFTYXZlKCkKCnNhdmUgdGhlIGZvcm1hdCBkYXRhIG9mIGEgbWFwcGluZwoKICAgIG15ICRUcnVlID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0Zvcm1hdERhdGFTYXZlKAogICAgICAgIE1hcHBpbmdJRCAgICAgICAgID0+IDEyMywKICAgICAgICBNYXBwaW5nRm9ybWF0RGF0YSA9PiAkSGFzaFJlZiwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBNYXBwaW5nRm9ybWF0RGF0YVNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhNYXBwaW5nSUQgTWFwcGluZ0Zvcm1hdERhdGEgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCByZWYgJFBhcmFte01hcHBpbmdGb3JtYXREYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTWFwcGluZ0Zvcm1hdERhdGEgbXVzdCBiZSBhIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkZWxldGUgZXhpc3RpbmcgZm9ybWF0IG1hcHBpbmcgZGF0YQogICAgJFNlbGYtPk1hcHBpbmdGb3JtYXREYXRhRGVsZXRlKAogICAgICAgIE1hcHBpbmdJRCA9PiAkUGFyYW17TWFwcGluZ0lEfSwKICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIERBVEFLRVk6CiAgICBmb3IgbXkgJERhdGFLZXkgKCBzb3J0IGtleXMgJXsgJFBhcmFte01hcHBpbmdGb3JtYXREYXRhfSB9ICkgewoKICAgICAgICBteSAkRGF0YVZhbHVlID0gJFBhcmFte01hcHBpbmdGb3JtYXREYXRhfS0+eyREYXRhS2V5fTsKCiAgICAgICAgbmV4dCBEQVRBS0VZIGlmICFkZWZpbmVkICREYXRhS2V5OwogICAgICAgIG5leHQgREFUQUtFWSBpZiAhZGVmaW5lZCAkRGF0YVZhbHVlOwoKICAgICAgICAjIGluc2VydCBvbmUgbWFwcGluZyBmb3JtYXQgcm93CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGltZXhwb3J0X21hcHBpbmdfZm9ybWF0ICcKICAgICAgICAgICAgICAgIC4gJyhtYXBwaW5nX2lkLCBkYXRhX2tleSwgZGF0YV92YWx1ZSkgVkFMVUVTICg/LCA/LCA/KScsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte01hcHBpbmdJRH0sIFwkRGF0YUtleSwgXCREYXRhVmFsdWUgXSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBNYXBwaW5nRm9ybWF0RGF0YUdldCgpCgpnZXQgdGhlIGZvcm1hdCBkYXRhIG9mIGEgbWFwcGluZwoKICAgIG15ICRPYmplY3REYXRhUmVmID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0Zvcm1hdERhdGFHZXQoCiAgICAgICAgTWFwcGluZ0lEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ0Zvcm1hdERhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTWFwcGluZ0lEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgREIgb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBkYXRhX2tleSwgZGF0YV92YWx1ZSBGUk9NIGltZXhwb3J0X21hcHBpbmdfZm9ybWF0IFdIRVJFIG1hcHBpbmdfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtNYXBwaW5nSUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJU1hcHBpbmdGb3JtYXREYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE1hcHBpbmdGb3JtYXREYXRheyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgfQoKICAgIHJldHVybiBcJU1hcHBpbmdGb3JtYXREYXRhOwp9Cgo9aXRlbSBTZWFyY2hBdHRyaWJ1dGVzR2V0KCkKCmdldCB0aGUgc2VhcmNoIGF0dHJpYnV0ZXMgb2YgYSBvYmplY3QgYmFja2VuZCBhcyBhcnJheS9oYXNoIHJlZmVyZW5jZQoKICAgIG15ICRBdHRyaWJ1dGVzID0gJEltcG9ydEV4cG9ydE9iamVjdC0+U2VhcmNoQXR0cmlidXRlc0dldCgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFNlYXJjaEF0dHJpYnV0ZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgIG15ICRUZW1wbGF0ZURhdGEgPSAkU2VsZi0+VGVtcGxhdGVHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayB0ZW1wbGF0ZSBkYXRhCiAgICBpZiAoICEkVGVtcGxhdGVEYXRhIHx8ICEkVGVtcGxhdGVEYXRhLT57T2JqZWN0fSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUZW1wbGF0ZSB3aXRoIElEICRQYXJhbXtUZW1wbGF0ZUlEfSBpcyBpbmNvbXBsZXRlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb2FkIGJhY2tlbmQKICAgIG15ICRCYWNrZW5kID0gJEtlcm5lbDo6T00tPkdldCgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6JyAuICRUZW1wbGF0ZURhdGEtPntPYmplY3R9CiAgICApOwoKICAgIHJldHVybiBpZiAhJEJhY2tlbmQ7CgogICAgIyBnZXQgYW4gc2VhcmNoIGF0dHJpYnV0ZSBsaXN0IG9mIGFuIG9iamVjdAogICAgbXkgJEF0dHJpYnV0ZXMgPSAkQmFja2VuZC0+U2VhcmNoQXR0cmlidXRlc0dldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZXM7Cn0KCj1pdGVtIFNlYXJjaERhdGFHZXQoKQoKZ2V0IHRoZSBzZWFyY2ggZGF0YSBmcm9tIGEgdGVtcGxhdGUKCiAgICBteSAkU2VhcmNoRGF0YVJlZiA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlNlYXJjaERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgREIgb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBkYXRhX2tleSwgZGF0YV92YWx1ZSBGUk9NIGltZXhwb3J0X3NlYXJjaCBXSEVSRSB0ZW1wbGF0ZV9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1RlbXBsYXRlSUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJVNlYXJjaERhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU2VhcmNoRGF0YXsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICByZXR1cm4gXCVTZWFyY2hEYXRhOwp9Cgo9aXRlbSBTZWFyY2hEYXRhU2F2ZSgpCgpzYXZlIHRoZSBzZWFyY2ggZGF0YSBvZiBhIHRlbXBsYXRlCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5TZWFyY2hEYXRhU2F2ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBTZWFyY2hEYXRhID0+ICRIYXNoUmVmLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoRGF0YVNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFNlYXJjaERhdGEgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCByZWYgJFBhcmFte1NlYXJjaERhdGF9IG5lICdIQVNIJyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdTZWFyY2hEYXRhIG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGVsZXRlIGV4aXN0aW5nIHNlYXJjaCBkYXRhCiAgICAkU2VsZi0+U2VhcmNoRGF0YURlbGV0ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBEQVRBS0VZOgogICAgZm9yIG15ICREYXRhS2V5ICggc29ydCBrZXlzICV7ICRQYXJhbXtTZWFyY2hEYXRhfSB9ICkgewoKICAgICAgICAjIHF1b3RlCiAgICAgICAgbXkgJERhdGFWYWx1ZSA9ICRQYXJhbXtTZWFyY2hEYXRhfS0+eyREYXRhS2V5fTsKCiAgICAgICAgbmV4dCBEQVRBS0VZIGlmICEkRGF0YUtleTsKICAgICAgICBuZXh0IERBVEFLRVkgaWYgISREYXRhVmFsdWU7CgogICAgICAgICMgaW5zZXJ0IG9uZSByb3cKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gaW1leHBvcnRfc2VhcmNoICcKICAgICAgICAgICAgICAgIC4gJyh0ZW1wbGF0ZV9pZCwgZGF0YV9rZXksIGRhdGFfdmFsdWUpIFZBTFVFUyAoPywgPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtUZW1wbGF0ZUlEfSwgXCREYXRhS2V5LCBcJERhdGFWYWx1ZSBdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFNlYXJjaERhdGFEZWxldGUoKQoKZGVsZXRlIHRoZSBleGlzdGluZyBzZWFyY2ggZGF0YSBvZiBhIHRlbXBsYXRlCgogICAgbXkgJFRydWUgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5TZWFyY2hEYXRhRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICBteSAkVHJ1ZSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlNlYXJjaERhdGFEZWxldGUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiBbMSw0NCwxNjYsNV0sCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hEYXRhRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICFyZWYgJFBhcmFte1RlbXBsYXRlSUR9ICkgewogICAgICAgICRQYXJhbXtUZW1wbGF0ZUlEfSA9IFsgJFBhcmFte1RlbXBsYXRlSUR9IF07CiAgICB9CiAgICBlbHNpZiAoIHJlZiAkUGFyYW17VGVtcGxhdGVJRH0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdUZW1wbGF0ZUlEIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlIG9yIGEgc3RyaW5nIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIHRlbXBsYXRlIGlkIHN0cmluZwogICAgbXkgJFRlbXBsYXRlSURTdHJpbmcgPSBqb2luIHF7LCB9LCBtYXAgeyc/J30gQHsgJFBhcmFte1RlbXBsYXRlSUR9IH07CgogICAgIyBjcmVhdGUgYW5kIGFkZCBiaW5kIHBhcmFtZXRlcnMKICAgIG15IEBCSU5EID0gbWFwIHsgXCRfIH0gQHsgJFBhcmFte1RlbXBsYXRlSUR9IH07CgogICAgIyBkZWxldGUgdGVtcGxhdGVzCiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGltZXhwb3J0X3NlYXJjaCBXSEVSRSB0ZW1wbGF0ZV9pZCBJTiAoICRUZW1wbGF0ZUlEU3RyaW5nICkiLAogICAgICAgIEJpbmQgPT4gXEBCSU5ELAogICAgKTsKfQoKPWl0ZW0gRXhwb3J0KCkKCmV4cG9ydCBmdW5jdGlvbgoKICAgIG15ICRSZXN1bHRSZWYgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5FeHBvcnQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCnJldHVybnMgc29tZXRoaW5nIGxpa2UKCiAgICAkUmVzdWx0UmVmID0gewogICAgICAgIFN1Y2Nlc3MgICA9PiAyLAogICAgICAgIEZhaWxlZCAgICA9PiAwLAogICAgICAgIERlc3RpbmF0aW9uQ29udGVudCA9PiBbCiAgICAgICAgICAgIFsgJ0F0dHJfMWEnLCAnQXR0cl8xYicsICdBdHRyXzFjJywgXSwKICAgICAgICAgICAgWyAnQXR0cl8yYScsICdBdHRyXzJiJywgJ0F0dHJfM2MnLCBdLAogICAgICAgIF0sCiAgICB9OwoKPWN1dAoKc3ViIEV4cG9ydCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGVtcGxhdGUgZGF0YQogICAgbXkgJFRlbXBsYXRlRGF0YSA9ICRTZWxmLT5UZW1wbGF0ZUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIHRlbXBsYXRlIGRhdGEKICAgIGlmICggISRUZW1wbGF0ZURhdGEgfHwgISRUZW1wbGF0ZURhdGEtPntPYmplY3R9IHx8ICEkVGVtcGxhdGVEYXRhLT57Rm9ybWF0fSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUZW1wbGF0ZSB3aXRoIElEICRQYXJhbXtUZW1wbGF0ZUlEfSBpcyBpbmNvbXBsZXRlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb2FkIG9iamVjdCBiYWNrZW5kCiAgICBteSAkT2JqZWN0QmFja2VuZCA9ICRLZXJuZWw6Ok9NLT5HZXQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OicgLiAkVGVtcGxhdGVEYXRhLT57T2JqZWN0fQogICAgKTsKCiAgICByZXR1cm4gaWYgISRPYmplY3RCYWNrZW5kOwoKICAgICMgbG9hZCBmb3JtYXQgYmFja2VuZAogICAgbXkgJEZvcm1hdEJhY2tlbmQgPSAkS2VybmVsOjpPTS0+R2V0KAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpGb3JtYXRCYWNrZW5kOjonIC4gJFRlbXBsYXRlRGF0YS0+e0Zvcm1hdH0KICAgICk7CgogICAgcmV0dXJuIGlmICEkRm9ybWF0QmFja2VuZDsKCiAgICAjIGdldCBleHBvcnQgZGF0YQogICAgbXkgJEV4cG9ydERhdGEgPSAkT2JqZWN0QmFja2VuZC0+RXhwb3J0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBmb3JtYXQgZGF0YQogICAgbXkgJEZvcm1hdERhdGEgPSAkU2VsZi0+Rm9ybWF0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGlmIGNvbHVtbiBoZWFkZXJzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgZXhwb3J0CiAgICBpZiAoICRGb3JtYXREYXRhLT57SW5jbHVkZUNvbHVtbkhlYWRlcnN9ICkgewoKICAgICAgICAjIGdldCBvYmplY3QgYXR0cmlidXRlcyAodGhlIG5hbWUgb2YgdGhlIGNvbHVtbnMpCiAgICAgICAgbXkgJE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzID0gJFNlbGYtPk1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhIGxvb2t1cCBoYXNoIGZvciB0aGUgb2JqZWN0IGF0dHJpYnV0ZSBuYW1lcwogICAgICAgIG15ICVBdHRyaWJ1dGVMb29rdXAgPSBtYXAgeyAkXy0+e0tleX0gPT4gJF8tPntWYWx1ZX0gfSBAeyAkTWFwcGluZ09iamVjdEF0dHJpYnV0ZXMtPlswXS0+e0lucHV0fS0+e0RhdGF9IH07CgogICAgICAgICMgZ2V0IG1hcHBpbmcgZGF0YSBsaXN0CiAgICAgICAgbXkgJE1hcHBpbmdMaXN0ID0gJFNlbGYtPk1hcHBpbmdMaXN0KAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aGUgY29sdW1uIG5hbWVzCiAgICAgICAgbXkgQENvbHVtbk5hbWVzOwogICAgICAgIGZvciBteSAkTWFwcGluZ0lEICggQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAgICAgIyBnZXQgbWFwcGluZyBvYmplY3QgZGF0YQogICAgICAgICAgICBteSAkTWFwcGluZ09iamVjdERhdGEgPSAkU2VsZi0+TWFwcGluZ09iamVjdERhdGFHZXQoCiAgICAgICAgICAgICAgICBNYXBwaW5nSUQgPT4gJE1hcHBpbmdJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBjb2x1bW4gbmFtZQogICAgICAgICAgICBteSAkQ29sdW1uTmFtZSA9ICRBdHRyaWJ1dGVMb29rdXB7ICRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0gfTsKCiAgICAgICAgICAgIHB1c2ggQENvbHVtbk5hbWVzLCAkQ29sdW1uTmFtZTsKICAgICAgICB9CgogICAgICAgICMgYWRkIGNvbHVtbiBoZWFkZXJzIGFzIGZpcnN0IHJvdwogICAgICAgIHVuc2hpZnQgQHskRXhwb3J0RGF0YX0sIFxAQ29sdW1uTmFtZXM7CiAgICB9CgogICAgbXkgJVJlc3VsdCA9ICgKICAgICAgICBTdWNjZXNzICAgICAgICAgICAgPT4gMCwKICAgICAgICBGYWlsZWQgICAgICAgICAgICAgPT4gMCwKICAgICAgICBEZXN0aW5hdGlvbkNvbnRlbnQgPT4gW10sCiAgICApOwoKICAgIEVYUE9SVERBVEFST1c6CiAgICBmb3IgbXkgJEV4cG9ydERhdGFSb3cgKCBAeyRFeHBvcnREYXRhfSApIHsKCiAgICAgICAgIyBleHBvcnQgb25lIHJvdwogICAgICAgIG15ICREZXN0aW5hdGlvbkNvbnRlbnRSb3cgPSAkRm9ybWF0QmFja2VuZC0+RXhwb3J0RGF0YVNhdmUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+ICRFeHBvcnREYXRhUm93LAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggIWRlZmluZWQgJERlc3RpbmF0aW9uQ29udGVudFJvdyApIHsKICAgICAgICAgICAgJFJlc3VsdHtGYWlsZWR9Kys7CiAgICAgICAgICAgIG5leHQgRVhQT1JUREFUQVJPVzsKICAgICAgICB9CgogICAgICAgICMgYWRkIHJvdyB0byBkZXN0aW5hdGlvbiBjb250ZW50CiAgICAgICAgcHVzaCBAeyAkUmVzdWx0e0Rlc3RpbmF0aW9uQ29udGVudH0gfSwgJERlc3RpbmF0aW9uQ29udGVudFJvdzsKICAgICAgICAkUmVzdWx0e1N1Y2Nlc3N9Kys7CiAgICB9CgogICAgIyBsb2cgcmVzdWx0CiAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgTWVzc2FnZSAgPT4gIkV4cG9ydCBvZiAkUmVzdWx0e0ZhaWxlZH0gcmVjb3JkcyAoJFRlbXBsYXRlRGF0YS0+e09iamVjdH0pOiBmYWlsZWQhIiwKICAgICk7CiAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgTWVzc2FnZSAgPT4gIkV4cG9ydCBvZiAkUmVzdWx0e1N1Y2Nlc3N9IHJlY29yZHMgKCRUZW1wbGF0ZURhdGEtPntPYmplY3R9KTogc3VjY2Vzc2Z1bCEiLAogICAgKTsKCiAgICByZXR1cm4gXCVSZXN1bHQ7Cn0KCj1pdGVtIEltcG9ydCgpCgppbXBvcnQgZnVuY3Rpb24KCiAgICBteSAkUmVzdWx0UmVmID0gJEltcG9ydEV4cG9ydE9iamVjdC0+SW1wb3J0KAogICAgICAgIFRlbXBsYXRlSUQgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJFN0cmluZ1JlZiwgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICBteSAkVGVtcGxhdGVEYXRhID0gJFNlbGYtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgdGVtcGxhdGUgZGF0YQogICAgaWYgKCAhJFRlbXBsYXRlRGF0YSB8fCAhJFRlbXBsYXRlRGF0YS0+e09iamVjdH0gfHwgISRUZW1wbGF0ZURhdGEtPntGb3JtYXR9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRlbXBsYXRlIHdpdGggSUQgJFBhcmFte1RlbXBsYXRlSUR9IGlzIGluY29tcGxldGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvYWQgb2JqZWN0IGJhY2tlbmQKICAgIG15ICRPYmplY3RCYWNrZW5kID0gJEtlcm5lbDo6T00tPkdldCgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6JyAuICRUZW1wbGF0ZURhdGEtPntPYmplY3R9CiAgICApOwoKICAgIHJldHVybiBpZiAhJE9iamVjdEJhY2tlbmQ7CgogICAgIyBsb2FkIGZvcm1hdCBiYWNrZW5kCiAgICBteSAkRm9ybWF0QmFja2VuZCA9ICRLZXJuZWw6Ok9NLT5HZXQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmQ6OicgLiAkVGVtcGxhdGVEYXRhLT57Rm9ybWF0fQogICAgKTsKCiAgICByZXR1cm4gaWYgISRGb3JtYXRCYWNrZW5kOwoKICAgICMgZ2V0IGltcG9ydCBkYXRhCiAgICBteSAkSW1wb3J0RGF0YSA9ICRGb3JtYXRCYWNrZW5kLT5JbXBvcnREYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJFBhcmFte1NvdXJjZUNvbnRlbnR9LAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJEltcG9ydERhdGE7CgogICAgIyBnZXQgZm9ybWF0IGRhdGEKICAgIG15ICRGb3JtYXREYXRhID0gJFNlbGYtPkZvcm1hdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBpZiBjb2x1bW4gaGVhZGVycyBhcmUgYWN0aXZhdGVkLCB0aGUgZmlyc3Qgcm93IG11c3QgYmUgcmVtb3ZlZAogICAgaWYgKCAkRm9ybWF0RGF0YS0+e0luY2x1ZGVDb2x1bW5IZWFkZXJzfSApIHsKICAgICAgICBzaGlmdCBAeyRJbXBvcnREYXRhfTsKICAgIH0KCiAgICAjIE51bWJlciBvZiBzdWNjZXNzZnVsbHkgYW5kIG5vdCBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgcm93cwogICAgbXkgJVJlc3VsdCA9ICgKICAgICAgICBPYmplY3QgID0+ICRUZW1wbGF0ZURhdGEtPntPYmplY3R9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICBGYWlsZWQgID0+IDAsCiAgICAgICAgUmV0Q29kZSA9PiB7fSwKICAgICAgICBDb3VudGVyID0+IDAsCiAgICApOwogICAgSU1QT1JUREFUQVJPVzoKICAgIGZvciBteSAkSW1wb3J0RGF0YVJvdyAoIEB7JEltcG9ydERhdGF9ICkgewoKICAgICAgICAkUmVzdWx0e0NvdW50ZXJ9Kys7CgogICAgICAgICMgaW1wb3J0IGEgc2luZ2xlIHJvdwogICAgICAgIG15ICggJElELCAkUmV0Q29kZSApID0gJE9iamVjdEJhY2tlbmQtPkltcG9ydERhdGFTYXZlKAogICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiAkSW1wb3J0RGF0YVJvdywKICAgICAgICAgICAgQ291bnRlciAgICAgICA9PiAkUmVzdWx0e0NvdW50ZXJ9LAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRJRCApIHsKCiAgICAgICAgICAgICMgY291bnQgRHVwbGljYXRlTmFtZSBlbnRyaWVzIGFzIGVycm9ycwogICAgICAgICAgICBpZiAoICRSZXRDb2RlICYmICRSZXRDb2RlID1+IG17IFxBIER1cGxpY2F0ZU5hbWUgfXhtcyApIHsKICAgICAgICAgICAgICAgICRSZXN1bHR7UmV0Q29kZX0tPnskUmV0Q29kZX0rKzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkUmVzdWx0e0ZhaWxlZH0rKzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRSZXN1bHR7UmV0Q29kZX0tPnskUmV0Q29kZX0rKzsKICAgICAgICAgICAgJFJlc3VsdHtTdWNjZXNzfSsrOwogICAgICAgIH0KICAgIH0KCiAgICAjIGxvZyByZXN1bHQKICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICJJbXBvcnQgb2YgJFJlc3VsdHtDb3VudGVyfSAkUmVzdWx0e09iamVjdH0gcmVjb3JkczogIgogICAgICAgICAgICAuICIkUmVzdWx0e0ZhaWxlZH0gZmFpbGVkLCAkUmVzdWx0e1N1Y2Nlc3N9IHN1Y2NlZWRlZCIsCiAgICApOwogICAgZm9yIG15ICRSZXRDb2RlICggc29ydCBrZXlzICV7ICRSZXN1bHR7UmV0Q29kZX0gfSApIHsKICAgICAgICBteSAkQ291bnQgPSAkUmVzdWx0e1JldENvZGV9LT57JFJldENvZGV9IHx8IDA7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIkltcG9ydCBvZiAkUmVzdWx0e0NvdW50ZXJ9ICRSZXN1bHR7T2JqZWN0fSByZWNvcmRzOiAkQ291bnQgJFJldENvZGUiLAogICAgICAgICk7CiAgICB9CiAgICBpZiAoICRSZXN1bHR7RmFpbGVkfSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTGFzdCBwcm9jZXNzZWQgbGluZSBudW1iZXIgb2YgaW1wb3J0IGZpbGU6ICRSZXN1bHR7Q291bnRlcn0iLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIFwlUmVzdWx0Owp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBTb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6Rm9ybWF0QmFja2VuZDo6Q1NWOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmQ6OkNTViAtIGltcG9ydC9leHBvcnQgYmFja2VuZCBmb3IgQ1NWCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBmdW5jdGlvbnMgdG8gaW1wb3J0IGFuZCBleHBvcnQgYSBjc3YgZm9ybWF0Cgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJEltcG9ydEV4cG9ydENTVkJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpGb3JtYXRCYWNrZW5kOjpDU1YnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgnVGV4dDo6Q1NWJykgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDUEFOIG1vZHVsZSBUZXh0OjpDU1YgaXMgcmVxdWlyZWQgdG8gdXNlIHRoZSBDU1YgaW1wb3J0L2V4cG9ydCBtb2R1bGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRlZmluZSBhdmFpbGFibGUgc2VwYXJhdG9ycwogICAgJFNlbGYtPntBdmFpbGFibGVTZXBhcmF0b3JzfSA9IHsKICAgICAgICBUYWJ1bGF0b3IgPT4gIlx0IiwKICAgICAgICBTZW1pY29sb24gPT4gJzsnLAogICAgICAgIENvbG9uICAgICA9PiAnOicsCiAgICAgICAgRG90ICAgICAgID0+ICcuJywKICAgICAgICBDb21tYSAgICAgPT4gJywnLAogICAgfTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIEZvcm1hdEF0dHJpYnV0ZXNHZXQoKQoKZ2V0IHRoZSBmb3JtYXQgYXR0cmlidXRlcyBvZiBhIGZvcm1hdCBhcyBhcnJheS9oYXNoIHJlZmVyZW5jZQoKICAgIG15ICRBdHRyaWJ1dGVzID0gJEZvcm1hdEJhY2tlbmQtPkZvcm1hdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEZvcm1hdEF0dHJpYnV0ZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRBdHRyaWJ1dGVzID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0NvbHVtblNlcGFyYXRvcicsCiAgICAgICAgICAgIE5hbWUgID0+ICdDb2x1bW4gU2VwYXJhdG9yJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFRhYnVsYXRvciA9PiAnVGFidWxhdG9yIChUQUIpJywKICAgICAgICAgICAgICAgICAgICBTZW1pY29sb24gPT4gJ1NlbWljb2xvbiAoOyknLAogICAgICAgICAgICAgICAgICAgIENvbG9uICAgICA9PiAnQ29sb24gKDopJywKICAgICAgICAgICAgICAgICAgICBEb3QgICAgICAgPT4gJ0RvdCAoLiknLAogICAgICAgICAgICAgICAgICAgIENvbW1hICAgICA9PiAnQ29tbWEgKCwpJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDaGFyc2V0JywKICAgICAgICAgICAgTmFtZSAgPT4gJ0NoYXJzZXQnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgVmFsdWVEZWZhdWx0ID0+ICdVVEYtOCcsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgICAgID0+IDIwLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoICAgID0+IDIwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnSW5jbHVkZUNvbHVtbkhlYWRlcnMnLAogICAgICAgICAgICBOYW1lICA9PiAnSW5jbHVkZSBDb2x1bW4gSGVhZGVycycsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAwID0+ICdObycsCiAgICAgICAgICAgICAgICAgICAgMSA9PiAnWWVzJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICBdOwoKICAgIHJldHVybiAkQXR0cmlidXRlczsKfQoKPWl0ZW0gTWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQoKQoKZ2V0IHRoZSBtYXBwaW5nIGF0dHJpYnV0ZXMgb2YgYW4gZm9ybWF0IGFzIGFycmF5L2hhc2ggcmVmZXJlbmNlCgogICAgbXkgJEF0dHJpYnV0ZXMgPSAkRm9ybWF0QmFja2VuZC0+TWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0CiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJEF0dHJpYnV0ZXMgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ29sdW1uJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0NvbHVtbicsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgID0+ICdUVCcsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiAnJywKICAgICAgICAgICAgICAgIFJlcXVpcmVkID0+IDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIF07CgogICAgcmV0dXJuICRBdHRyaWJ1dGVzOwp9Cgo9aXRlbSBJbXBvcnREYXRhR2V0KCkKCmdldCBpbXBvcnQgZGF0YSBhcyAyRC1hcnJheSByZWZlcmVuY2UKCiAgICBteSAkSW1wb3J0RGF0YSA9ICRGb3JtYXRCYWNrZW5kLT5JbXBvcnREYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJFN0cmluZ1JlZiwgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgSW1wb3J0RGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFtdIGlmICFkZWZpbmVkICRQYXJhbXtTb3VyY2VDb250ZW50fTsKCiAgICAjIGNoZWNrIHNvdXJjZSBjb250ZW50CiAgICBpZiAoIHJlZiAkUGFyYW17U291cmNlQ29udGVudH0gbmUgJ1NDQUxBUicgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdTb3VyY2VDb250ZW50IG11c3QgYmUgYSBzY2FsYXIgcmVmZXJlbmNlJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBmb3JtYXQgZGF0YQogICAgbXkgJEZvcm1hdERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPkZvcm1hdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBmb3JtYXQgZGF0YQogICAgaWYgKCAhJEZvcm1hdERhdGEgfHwgcmVmICRGb3JtYXREYXRhIG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIGZvcm1hdCBkYXRhIGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9IiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjaGFyc2V0CiAgICBteSAkQ2hhcnNldCA9ICRGb3JtYXREYXRhLT57Q2hhcnNldH0gfHw9ICcnOwogICAgJENoYXJzZXQgPX4gc3sgXHMqICh1dGYtOHx1dGY4KSBccyogfXtVVEYtOH14bXNpOwoKICAgICMgY2hlY2sgdGhlIGNoYXJzZXQKICAgIGlmICggISRDaGFyc2V0ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHZhbGlkIGNoYXJzZXQgZm91bmQgZm9yIHRoZSB0ZW1wbGF0ZSBpZCAkUGFyYW17VGVtcGxhdGVJRH0iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IHNlcGFyYXRvcgogICAgJEZvcm1hdERhdGEtPntDb2x1bW5TZXBhcmF0b3J9IHx8PSAnJzsKICAgIG15ICRTZXBhcmF0b3IgPSAkU2VsZi0+e0F2YWlsYWJsZVNlcGFyYXRvcnN9LT57ICRGb3JtYXREYXRhLT57Q29sdW1uU2VwYXJhdG9yfSB9IHx8ICcnOwoKICAgICMgY2hlY2sgdGhlIHNlcGFyYXRvcgogICAgaWYgKCAhJFNlcGFyYXRvciApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyB2YWxpZCBzZXBhcmF0b3IgZm91bmQgZm9yIHRoZSB0ZW1wbGF0ZSBpZCAkUGFyYW17VGVtcGxhdGVJRH0iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIHRoZSBwYXJzZXIgb2JqZWN0CiAgICBteSAkUGFyc2VPYmplY3QgPSBUZXh0OjpDU1YtPm5ldygKICAgICAgICB7CiAgICAgICAgICAgIHF1b3RlX2NoYXIgICAgICAgICAgPT4gJyInLAogICAgICAgICAgICBlc2NhcGVfY2hhciAgICAgICAgID0+ICciJywKICAgICAgICAgICAgc2VwX2NoYXIgICAgICAgICAgICA9PiAkU2VwYXJhdG9yLAogICAgICAgICAgICBlb2wgICAgICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBhbHdheXNfcXVvdGUgICAgICAgID0+IDEsCiAgICAgICAgICAgIGJpbmFyeSAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAga2VlcF9tZXRhX2luZm8gICAgICA9PiAwLAogICAgICAgICAgICBhbGxvd19sb29zZV9xdW90ZXMgID0+IDAsCiAgICAgICAgICAgIGFsbG93X2xvb3NlX2VzY2FwZXMgPT4gMCwKICAgICAgICAgICAgYWxsb3dfd2hpdGVzcGFjZSAgICA9PiAwLAogICAgICAgICAgICBibGFua19pc191bmRlZiAgICAgID0+IDAsCiAgICAgICAgICAgIHZlcmJhdGltICAgICAgICAgICAgPT4gMCwKICAgICAgICB9CiAgICApOwoKICAgICMgY3JlYXRlIGFuIGluIG1lbW9yeSB0ZW1wIGZpbGUgYW5kIG9wZW4gaXQKICAgIG15ICRGaWxlQ29udGVudCA9ICcnOwogICAgb3BlbiBteSAkRkgsICcrPCcsIFwkRmlsZUNvbnRlbnQ7ICAgICMjIG5vIGNyaXRpYwoKICAgICMgd3JpdGUgc291cmNlIGNvbnRlbnQKICAgIHByaW50ICRGSCAkeyAkUGFyYW17U291cmNlQ29udGVudH0gfTsKCiAgICAjIHJld2luZCBmaWxlIGhhbmRsZQogICAgc2VlayAkRkgsIDAsIDA7CgogICAgIyBwYXJzZSB0aGUgY29udGVudAogICAgbXkgJExpbmVDb3VudCA9IDE7CiAgICBteSBASW1wb3J0RGF0YTsKCiAgICAjIGl0IGlzIGltcG9ydGFudCB0byB1c2UgdGhpcyBzeW50YXggIndoaWxlICggIWVvZigkRkgpICkiCiAgICAjIGFzIHRoZSBDUEFOIG1vZHVsZSBUZXh0OjpDU1ZfWFMgbWlnaHQgc2hvdyBlcnJvcnMgaWYgdGhlCiAgICAjIGdldGxpbmUgY2FsbCBpcyB3aXRoaW4gdGhlIHdoaWxlIHRlc3QKICAgICMgaGF2ZSBhIGxvb2sgYXQgaHR0cDovL2J1Z3Mub3Rycy5vcmcvc2hvd19idWcuY2dpP2lkPTkyNzAKICAgIHdoaWxlICggIWVvZigkRkgpICkgewogICAgICAgIG15ICRDb2x1bW4gPSAkUGFyc2VPYmplY3QtPmdldGxpbmUoJEZIKTsKICAgICAgICBwdXNoIEBJbXBvcnREYXRhLCAkQ29sdW1uOwogICAgICAgICRMaW5lQ291bnQrKzsKICAgIH0KCiAgICAjIGVycm9yIGhhbmRsaW5nCiAgICBteSAoICRQYXJzZUVycm9yQ29kZSwgJFBhcnNlRXJyb3JTdHJpbmcgKSA9ICRQYXJzZU9iamVjdC0+ZXJyb3JfZGlhZygpOwogICAgaWYgKCRQYXJzZUVycm9yQ29kZSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiSW1wb3J0RXJyb3IgYXQgbGluZSAkTGluZUNvdW50LCAiCiAgICAgICAgICAgICAgICAuICJFcnJvckNvZGU6ICRQYXJzZUVycm9yQ29kZSAnJFBhcnNlRXJyb3JTdHJpbmcnICIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNsb3NlIHRoZSBpbiBtZW1vcnkgZmlsZSBoYW5kbGUKICAgIGNsb3NlICRGSDsKCiAgICByZXR1cm4gXEBJbXBvcnREYXRhIGlmICRDaGFyc2V0IG5lICdVVEYtOCc7CgogICAgIyBzZXQgdXRmOCBmbGFnCiAgICBmb3IgbXkgJFJvdyAoQEltcG9ydERhdGEpIHsKICAgICAgICBmb3IgbXkgJENlbGwgKCBAeyRSb3d9ICkgewogICAgICAgICAgICBFbmNvZGU6Ol91dGY4X29uKCRDZWxsKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFxASW1wb3J0RGF0YTsKfQoKPWl0ZW0gRXhwb3J0RGF0YVNhdmUoKQoKZXhwb3J0IG9uZSByb3cgb2YgdGhlIGV4cG9ydCBkYXRhCgogICAgbXkgJERlc3RpbmF0aW9uQ29udGVudCA9ICRGb3JtYXRCYWNrZW5kLT5FeHBvcnREYXRhU2F2ZSgKICAgICAgICBUZW1wbGF0ZUlEICAgID0+IDEyMywKICAgICAgICBFeHBvcnREYXRhUm93ID0+ICRBcnJheVJlZiwKICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEV4cG9ydERhdGFTYXZlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgRXhwb3J0RGF0YVJvdyBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgZXhwb3J0IGRhdGEgcm93CiAgICBpZiAoIHJlZiAkUGFyYW17RXhwb3J0RGF0YVJvd30gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0V4cG9ydERhdGFSb3cgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGZvcm1hdCBkYXRhCiAgICBteSAkRm9ybWF0RGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKS0+Rm9ybWF0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGZvcm1hdCBkYXRhCiAgICBpZiAoICEkRm9ybWF0RGF0YSB8fCByZWYgJEZvcm1hdERhdGEgbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gZm9ybWF0IGRhdGEgZm91bmQgZm9yIHRoZSB0ZW1wbGF0ZSBpZCAkUGFyYW17VGVtcGxhdGVJRH0iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNoYXJzZXQKICAgIG15ICRDaGFyc2V0ID0gJEZvcm1hdERhdGEtPntDaGFyc2V0fSB8fD0gJyc7CiAgICAkQ2hhcnNldCA9fiBzeyBccyogKHV0Zi04fHV0ZjgpIFxzKiB9e1VURi04fXhtc2k7CgogICAgIyBjaGVjayB0aGUgY2hhcnNldAogICAgaWYgKCAhJENoYXJzZXQgKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gdmFsaWQgY2hhcnNldCBmb3VuZCBmb3IgdGhlIHRlbXBsYXRlIGlkICRQYXJhbXtUZW1wbGF0ZUlEfSIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY2hhcnNldAogICAgJEZvcm1hdERhdGEtPntDb2x1bW5TZXBhcmF0b3J9IHx8PSAnJzsKICAgIG15ICRTZXBhcmF0b3IgPSAkU2VsZi0+e0F2YWlsYWJsZVNlcGFyYXRvcnN9LT57ICRGb3JtYXREYXRhLT57Q29sdW1uU2VwYXJhdG9yfSB9IHx8ICcnOwoKICAgICMgY2hlY2sgdGhlIHNlcGFyYXRvcgogICAgaWYgKCAhJFNlcGFyYXRvciApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyB2YWxpZCBzZXBhcmF0b3IgZm91bmQgZm9yIHRoZSB0ZW1wbGF0ZSBpZCAkUGFyYW17VGVtcGxhdGVJRH0iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIHRoZSBwYXJzZXIgb2JqZWN0CiAgICBteSAkUGFyc2VPYmplY3QgPSBUZXh0OjpDU1YtPm5ldygKICAgICAgICB7CiAgICAgICAgICAgIHF1b3RlX2NoYXIgICAgICAgICAgPT4gJyInLAogICAgICAgICAgICBlc2NhcGVfY2hhciAgICAgICAgID0+ICciJywKICAgICAgICAgICAgc2VwX2NoYXIgICAgICAgICAgICA9PiAkU2VwYXJhdG9yLAogICAgICAgICAgICBlb2wgICAgICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBhbHdheXNfcXVvdGUgICAgICAgID0+IDEsCiAgICAgICAgICAgIGJpbmFyeSAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAga2VlcF9tZXRhX2luZm8gICAgICA9PiAwLAogICAgICAgICAgICBhbGxvd19sb29zZV9xdW90ZXMgID0+IDAsCiAgICAgICAgICAgIGFsbG93X2xvb3NlX2VzY2FwZXMgPT4gMCwKICAgICAgICAgICAgYWxsb3dfd2hpdGVzcGFjZSAgICA9PiAwLAogICAgICAgICAgICBibGFua19pc191bmRlZiAgICAgID0+IDAsCiAgICAgICAgICAgIHZlcmJhdGltICAgICAgICAgICAgPT4gMCwKICAgICAgICB9CiAgICApOwoKICAgIGlmICggISRQYXJzZU9iamVjdC0+Y29tYmluZSggQHsgJFBhcmFte0V4cG9ydERhdGFSb3d9IH0gKSApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBjb21iaW5lIHRoZSBleHBvcnQgZGF0YSB0byBhIHN0cmluZyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIHRoZSBDU1Ygc3RyaW5nCiAgICBteSAkU3RyaW5nID0gJFBhcnNlT2JqZWN0LT5zdHJpbmcoKTsKCiAgICByZXR1cm4gJFN0cmluZyBpZiAkQ2hhcnNldCBuZSAnVVRGLTgnOwoKICAgICMgc2V0IHV0ZjggZmxhZwogICAgRW5jb2RlOjpfdXRmOF9vbigkU3RyaW5nKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6OkFkbWluOjpJVFNNOjpJbXBvcnRFeHBvcnQ6OkltcG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBiYXNlIHF3KEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpCYXNlQ29tbWFuZCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcsCik7CgpzdWIgQ29uZmlndXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPkRlc2NyaXB0aW9uKCdUaGUgdG9vbCBmb3IgaW1wb3J0aW5nIGNvbmZpZyBpdGVtcycpOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAndGVtcGxhdGUtbnVtYmVyJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiU3BlY2lmeSBhIHRlbXBsYXRlIG51bWJlciB0byBiZSBpbXBvZXJ0ZWQuIiwKICAgICAgICBSZXF1aXJlZCAgICA9PiAxLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvXGQrL3NteCwKICAgICk7CiAgICAkU2VsZi0+QWRkQXJndW1lbnQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3NvdXJjZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIlNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIGZpbGUgd2hpY2ggY29udGFpbmluZyB0aGUgY29uZmlnIGl0ZW0gZGF0YSBmb3IgaW1wb3J0aW5nLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci8uKi9zbXgsCiAgICApOwoKICAgIHJldHVybjsKfQoKc3ViIFByZVJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTb3VyY2VQYXRoID0gJFNlbGYtPkdldEFyZ3VtZW50KCdzb3VyY2UnKTsKICAgIGlmICggJFNvdXJjZVBhdGggJiYgIS1yICRTb3VyY2VQYXRoICkgewogICAgICAgIGRpZSAiRmlsZSAkU291cmNlUGF0aCBkb2VzIG5vdCBleGlzdCwgY2FuIG5vdCBiZSByZWFkLlxuIjsKICAgIH0KCiAgICByZXR1cm47Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVGVtcGxhdGVJRCA9ICRTZWxmLT5HZXRPcHRpb24oJ3RlbXBsYXRlLW51bWJlcicpOwoKICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgIG15ICRUZW1wbGF0ZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICBpZiAoICEkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgJFNlbGYtPlByaW50RXJyb3IoIlRlbXBsYXRlICRUZW1wbGF0ZUlEIG5vdCBmb3VuZCEuXG4iKTsKICAgICAgICAkU2VsZi0+UHJpbnRFcnJvcigiRXhwb3J0IGFib3J0ZWQuLlxuIik7CiAgICAgICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZUVycm9yKCk7CiAgICB9CgogICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkltcG9ydGluZyBjb25maWcgaXRlbXMuLi48L3llbGxvdz5cbiIpOwogICAgJFNlbGYtPlByaW50KCAiPHllbGxvdz4iIC4gKCAnPScgeCA2OSApIC4gIjwveWVsbG93PlxuIiApOwoKICAgIG15ICRTb3VyY2VDb250ZW50OwogICAgbXkgJFNvdXJjZUZpbGUgPSAkU2VsZi0+R2V0QXJndW1lbnQoJ3NvdXJjZScpOwoKICAgIGlmICgkU291cmNlRmlsZSkgewoKICAgICAgICAkU2VsZi0+UHJpbnQoIjx5ZWxsb3c+UmVhZCBGaWxlICRTb3VyY2VGaWxlLjwveWVsbG93PlxuIik7CgogICAgICAgICMgcmVhZCBzb3VyY2UgZmlsZQogICAgICAgICRTb3VyY2VDb250ZW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+RmlsZVJlYWQoCiAgICAgICAgICAgIExvY2F0aW9uID0+ICRTb3VyY2VGaWxlLAogICAgICAgICAgICBSZXN1bHQgICA9PiAnU0NBTEFSJywKICAgICAgICAgICAgTW9kZSAgICAgPT4gJ2Jpbm1vZGUnLAogICAgICAgICk7CgogICAgICAgIGlmICggISRTb3VyY2VDb250ZW50ICkgewogICAgICAgICAgICAkU2VsZi0+UHJpbnRFcnJvcigiQ2FuJ3QgcmVhZCBmaWxlICRTb3VyY2VGaWxlLlxuSW1wb3J0IGFib3J0ZWQuXG4iKSBpZiAhJFNvdXJjZUNvbnRlbnQ7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+RXhpdENvZGVFcnJvcigpOwogICAgICAgIH0KCiAgICB9CgogICAgIyBpbXBvcnQgZGF0YQogICAgbXkgJFJlc3VsdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKS0+SW1wb3J0KAogICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgU291cmNlQ29udGVudCA9PiAkU291cmNlQ29udGVudCwKICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICApOwoKICAgIGlmICggISRSZXN1bHQgKSB7CiAgICAgICAgJFNlbGYtPlByaW50RXJyb3IoIlxuRXJyb3Igb2NjdXJyZWQuIEltcG9ydCBpbXBvc3NpYmxlISBTZWUgdGhlIE9UUlMgbG9nIGZvciBkZXRhaWxzLlxuIik7CiAgICAgICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZUVycm9yKCk7CiAgICB9CgogICAgIyBwcmludCByZXN1bHQKICAgICRTZWxmLT5QcmludCgiXG48Z3JlZW4+SW1wb3J0IG9mICRSZXN1bHQtPntDb3VudGVyfSAkUmVzdWx0LT57T2JqZWN0fSByZWNvcmRzOjwvZ3JlZW4+XG4iKTsKICAgICRTZWxmLT5QcmludCggIjxncmVlbj4iIC4gKCAnLScgeCA2OSApIC4gIjwvZ3JlZW4+XG4iICk7CiAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj5TdWNjZXNzOiAkUmVzdWx0LT57U3VjY2Vzc30gc3VjY2VlZGVkPC9ncmVlbj5cbiIpOwogICAgaWYgKCAkUmVzdWx0LT57RmFpbGVkfSApIHsKICAgICAgICAkU2VsZi0+UHJpbnRFcnJvcigiJFJlc3VsdC0+e0ZhaWxlZH0gZmFpbGVkLlxuIik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj5FcnJvcjogJFJlc3VsdC0+e0ZhaWxlZH0gZmFpbGVkLjwvZ3JlZW4+XG4iKTsKICAgIH0KCiAgICBmb3IgbXkgJFJldENvZGUgKCBzb3J0IGtleXMgJXsgJFJlc3VsdC0+e1JldENvZGV9IH0gKSB7CiAgICAgICAgbXkgJENvdW50ID0gJFJlc3VsdC0+e1JldENvZGV9LT57JFJldENvZGV9IHx8IDA7CiAgICAgICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+SW1wb3J0IG9mICRSZXN1bHQtPntDb3VudGVyfSAkUmVzdWx0LT57T2JqZWN0fSByZWNvcmRzOiAkQ291bnQgJFJldENvZGU8L2dyZWVuPlxuIik7CiAgICB9CiAgICBpZiAoICRSZXN1bHQtPntGYWlsZWR9ICkgewogICAgICAgICRTZWxmLT5QcmludCgiPGdyZWVuPkxhc3QgcHJvY2Vzc2VkIGxpbmUgbnVtYmVyIG9mIGltcG9ydCBmaWxlOiAkUmVzdWx0LT57Q291bnRlcn08L2dyZWVuPlxuIik7CiAgICB9CgogICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+SW1wb3J0IGNvbXBsZXRlLjwvZ3JlZW4+XG4iKTsKICAgICRTZWxmLT5QcmludCggIjxncmVlbj4iIC4gKCAnLScgeCA2OSApIC4gIjwvZ3JlZW4+XG4iICk7CiAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj5Eb25lLjwvZ3JlZW4+XG4iKTsKCiAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlT2soKTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6OkFkbWluOjpJVFNNOjpJbXBvcnRFeHBvcnQ6OkV4cG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBiYXNlIHF3KEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpCYXNlQ29tbWFuZCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcsCik7CgpzdWIgQ29uZmlndXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPkRlc2NyaXB0aW9uKCdUaGUgdG9vbCBmb3IgZXhwb3J0aW5nIGNvbmZpZyBpdGVtcycpOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAndGVtcGxhdGUtbnVtYmVyJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiU3BlY2lmeSBhIHRlbXBsYXRlIG51bWJlciB0byBiZSBleHBvcnRlZC4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci9cZCsvc214LAogICAgKTsKICAgICRTZWxmLT5BZGRBcmd1bWVudCgKICAgICAgICBOYW1lICAgICAgICA9PiAnZGVzdGluYXRpb24nLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJTcGVjaWZ5IHRoZSBwYXRoIHRvIGEgZmlsZSB3aGVyZSBjb25maWcgaXRlbSBkYXRhIHNob3VsZCBiZSBleHBvcnRlZC4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvLiovc214LAogICAgKTsKCiAgICByZXR1cm47Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVGVtcGxhdGVJRCA9ICRTZWxmLT5HZXRPcHRpb24oJ3RlbXBsYXRlLW51bWJlcicpOwoKICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgIG15ICRUZW1wbGF0ZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICBpZiAoICEkVGVtcGxhdGVEYXRhLT57VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgJFNlbGYtPlByaW50RXJyb3IoIlRlbXBsYXRlICRUZW1wbGF0ZUlEIG5vdCBmb3VuZCEuXG4iKTsKICAgICAgICAkU2VsZi0+UHJpbnRFcnJvcigiRXhwb3J0IGFib3J0ZWQuLlxuIik7CiAgICAgICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZUVycm9yKCk7CiAgICB9CgogICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkV4cG9ydGluZyBjb25maWcgaXRlbXMuLi48L3llbGxvdz5cbiIpOwogICAgJFNlbGYtPlByaW50KCAiPHllbGxvdz4iIC4gKCAnPScgeCA2OSApIC4gIjwveWVsbG93PlxuIiApOwoKICAgICMgZXhwb3J0IGRhdGEKICAgIG15ICRSZXN1bHQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPkV4cG9ydCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgaWYgKCAhJFJlc3VsdCApIHsKICAgICAgICAkU2VsZi0+UHJpbnRFcnJvcigiRXJyb3Igb2NjdXJyZWQuIEV4cG9ydCBpbXBvc3NpYmxlISBTZWUgU3lzbG9nIGZvciBkZXRhaWxzLlxuIik7CiAgICAgICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZUVycm9yKCk7CiAgICB9CgogICAgJFNlbGYtPlByaW50KCAiPGdyZWVuPiIgLiAoICctJyB4IDY5ICkgLiAiPC9ncmVlbj5cbiIgKTsKICAgICRTZWxmLT5QcmludCgiPGdyZWVuPlN1Y2Nlc3M6ICRSZXN1bHQtPntTdWNjZXNzfSBzdWNjZWVkZWQ8L2dyZWVuPlxuIik7CiAgICBpZiAoICRSZXN1bHQtPntGYWlsZWR9ICkgewogICAgICAgICRTZWxmLT5QcmludEVycm9yKCIkUmVzdWx0LT57RmFpbGVkfSBmYWlsZWQuXG4iKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5QcmludCgiPGdyZWVuPkVycm9yOiAkUmVzdWx0LT57RmFpbGVkfSBmYWlsZWQuPC9ncmVlbj5cbiIpOwogICAgfQoKICAgIG15ICREZXN0aW5hdGlvbkZpbGUgPSAkU2VsZi0+R2V0QXJndW1lbnQoJ2Rlc3RpbmF0aW9uJyk7CgogICAgaWYgKCREZXN0aW5hdGlvbkZpbGUpIHsKCiAgICAgICAgbXkgJEZpbGVDb250ZW50ID0gam9pbiAiXG4iLCBAeyAkUmVzdWx0LT57RGVzdGluYXRpb25Db250ZW50fSB9OwoKICAgICAgICAjIHNhdmUgZGVzdGluYXRpb24gY29udGVudCB0byBmaWxlCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5GaWxlV3JpdGUoCiAgICAgICAgICAgIExvY2F0aW9uID0+ICREZXN0aW5hdGlvbkZpbGUsCiAgICAgICAgICAgIENvbnRlbnQgID0+IFwkRmlsZUNvbnRlbnQsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludEVycm9yKCJDYW4ndCB3cml0ZSBmaWxlICREZXN0aW5hdGlvbkZpbGUuXG5FeHBvcnQgYWJvcnRlZC5cbiIpOwogICAgICAgICAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlRXJyb3IoKTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT5QcmludCgiPGdyZWVuPkZpbGUgJERlc3RpbmF0aW9uRmlsZSBzYXZlZC48L2dyZWVuPlxuIik7CgogICAgfQoKICAgICRTZWxmLT5QcmludCgiPGdyZWVuPkV4cG9ydCBjb21wbGV0ZS48L2dyZWVuPlxuIik7CiAgICAkU2VsZi0+UHJpbnQoICI8Z3JlZW4+IiAuICggJy0nIHggNjkgKSAuICI8L2dyZWVuPlxuIiApOwogICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+RG9uZS48L2dyZWVuPlxuIik7CgogICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZU9rKCk7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyBxdygkU2VsZik7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKbXkgJFVzZXJPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7Cm15ICRJbXBvcnRFeHBvcnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0Jyk7Cm15ICRIZWxwZXIgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgY3JlYXRlIG5lZWRlZCB1c2VycwpteSBAVXNlcklEczsKewoKICAgICMgZGlzYWJsZSBlbWFpbCBjaGVja3MgdG8gY3JlYXRlIG5ldyB1c2VyCiAgICBteSAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZyA9CiAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdDaGVja0VtYWlsQWRkcmVzc2VzJykgfHwgMTsKCiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+IDAsCiAgICApOwoKICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gMiApIHsKCiAgICAgICAgIyBjcmVhdGUgbmV3IHVzZXJzIGZvciB0aGUgdGVzdHMKICAgICAgICBteSAkVXNlcklEID0gJFVzZXJPYmplY3QtPlVzZXJBZGQoCiAgICAgICAgICAgIFVzZXJGaXJzdG5hbWUgPT4gJ0ltcG9ydEV4cG9ydCcgLiAkQ291bnRlciwKICAgICAgICAgICAgVXNlckxhc3RuYW1lICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICBVc2VyTG9naW4gICAgID0+ICdVbml0VGVzdC1JbXBvcnRFeHBvcnQtJyAuICRDb3VudGVyIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgICAgICAgICAgVXNlckVtYWlsICAgICA9PiAnVW5pdFRlc3QtSW1wb3J0RXhwb3J0LScgLiAkQ291bnRlciAuICdAbG9jYWxob3N0JywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAVXNlcklEcywgJFVzZXJJRDsKICAgIH0KCiAgICAjIHJlc3RvcmUgb3JpZ2luYWwgZW1haWwgY2hlY2sgcGFyYW0KCiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnLAogICAgKTsKfQoKIyBjcmVhdGUgbmVlZGVkIHJhbmRvbSB0ZW1wbGF0ZSBuYW1lcwpteSBAVGVtcGxhdGVOYW1lOwoKZm9yIG15ICRDb3VudGVyICggMSAuLiA1ICkgewoKICAgIHB1c2ggQFRlbXBsYXRlTmFtZSwgJ1VuaXRUZXN0JyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7Cn0KCiMgY3JlYXRlIG5lZWRlZCByYW5kb20gb2JqZWN0IG5hbWVzCm15IEBPYmplY3ROYW1lOwpwdXNoIEBPYmplY3ROYW1lLCAnVW5pdFRlc3QnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiMgY3JlYXRlIG5lZWRlZCBmb3JtYXQgbmFtZXMKbXkgQEZvcm1hdE5hbWUgPSAoJ0NTVicpOwoKIyBnZXQgb3JpZ2luYWwgdGVtcGxhdGUgbGlzdCBmb3IgbGF0ZXIgY2hlY2tzIChhbGwgZWxlbWVudHMpCm15ICRUZW1wbGF0ZUxpc3QxQWxsID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVMaXN0KAogICAgVXNlcklEID0+IDEsCik7CgojIGdldCBvcmlnaW5hbCB0ZW1wbGF0ZSBsaXN0IGZvciBsYXRlciBjaGVja3MgKGFsbCBlbGVtZW50cykKbXkgJFRlbXBsYXRlTGlzdDFPYmplY3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZUxpc3QoCiAgICBPYmplY3QgPT4gJE9iamVjdE5hbWVbMF0sCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBkZWZpbmUgZ2VuZXJhbCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkSXRlbURhdGEgPSBbCgogICAgIyB0aGlzIHRlbXBsYXRlIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBGb3JtYXQgID0+ICRGb3JtYXROYW1lWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICRUZW1wbGF0ZU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyB0ZW1wbGF0ZSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgT2JqZWN0ICA9PiAkT2JqZWN0TmFtZVswXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAkVGVtcGxhdGVOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgdGVtcGxhdGUgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE9iamVjdCAgPT4gJE9iamVjdE5hbWVbMF0sCiAgICAgICAgICAgIEZvcm1hdCAgPT4gJEZvcm1hdE5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyB0ZW1wbGF0ZSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgT2JqZWN0ID0+ICRPYmplY3ROYW1lWzBdLAogICAgICAgICAgICBGb3JtYXQgPT4gJEZvcm1hdE5hbWVbMF0sCiAgICAgICAgICAgIE5hbWUgICA9PiAkVGVtcGxhdGVOYW1lWzBdLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgdGVtcGxhdGUgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE9iamVjdCAgPT4gJE9iamVjdE5hbWVbMF0sCiAgICAgICAgICAgIEZvcm1hdCAgPT4gJEZvcm1hdE5hbWVbMF0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFRlbXBsYXRlTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyB0ZW1wbGF0ZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE9iamVjdCAgPT4gJE9iamVjdE5hbWVbMF0sCiAgICAgICAgICAgIEZvcm1hdCAgPT4gJEZvcm1hdE5hbWVbMF0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFRlbXBsYXRlTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBPYmplY3QgICA9PiAkT2JqZWN0TmFtZVswXSwKICAgICAgICAgICAgRm9ybWF0ICAgPT4gJEZvcm1hdE5hbWVbMF0sCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRUZW1wbGF0ZU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyB0ZW1wbGF0ZSBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgb25lIHRlc3QgYmVmb3JlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE9iamVjdCAgPT4gJE9iamVjdE5hbWVbMF0sCiAgICAgICAgICAgIEZvcm1hdCAgPT4gJEZvcm1hdE5hbWVbMF0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFRlbXBsYXRlTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHRlbXBsYXRlIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5CiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgT2JqZWN0ICA9PiAkT2JqZWN0TmFtZVswXSwKICAgICAgICAgICAgRm9ybWF0ICA9PiAkRm9ybWF0TmFtZVswXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAkVGVtcGxhdGVOYW1lWzFdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1Rlc3RDb21tZW50JywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgT2JqZWN0ICAgPT4gJE9iamVjdE5hbWVbMF0sCiAgICAgICAgICAgIEZvcm1hdCAgID0+ICRGb3JtYXROYW1lWzBdLAogICAgICAgICAgICBOYW1lICAgICA9PiAkVGVtcGxhdGVOYW1lWzFdLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnVGVzdENvbW1lbnQnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHRlbXBsYXRlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAodGVtcGxhdGUgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHRlbXBsYXRlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAodGVtcGxhdGUgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgID0+ICRUZW1wbGF0ZU5hbWVbMV0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSB0ZW1wbGF0ZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHRlbXBsYXRlIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFRlbXBsYXRlTmFtZVsxXSAuICdVUERBVEUyJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHRlbXBsYXRlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkICh0ZW1wbGF0ZSB1cGRhdGUgYXJndW1lbnRzIGFyZSBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRUZW1wbGF0ZU5hbWVbMV0gLiAnVVBEQVRFMycsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1Rlc3RDb21tZW50IFVQREFURTMnLAogICAgICAgICAgICBWYWxpZElEID0+IDIsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBOYW1lICAgICA9PiAkVGVtcGxhdGVOYW1lWzFdIC4gJ1VQREFURTMnLAogICAgICAgICAgICBWYWxpZElEICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICA9PiAnVGVzdENvbW1lbnQgVVBEQVRFMycsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHRlbXBsYXRlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkICh0ZW1wbGF0ZSB1cGRhdGUgYXJndW1lbnRzIGFyZSBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRUZW1wbGF0ZU5hbWVbMV0gLiAnVVBEQVRFNCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJFRlbXBsYXRlTmFtZVsxXSAuICdVUERBVEU0JywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHRlbXBsYXRlIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChjaGVjayBzdHJpbmcgY2xlYW5lciBmdW5jdGlvbikKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBPYmplY3QgID0+ICIgXHQgXG4gXHIgIiAuICRPYmplY3ROYW1lWzBdIC4gIiBcdCBcbiBcciAiLAogICAgICAgICAgICBGb3JtYXQgID0+ICIgXHQgXG4gXHIgIiAuICRGb3JtYXROYW1lWzBdIC4gIiBcdCBcbiBcciAiLAogICAgICAgICAgICBOYW1lICAgID0+ICIgXHQgXG4gXHIgIiAuICRUZW1wbGF0ZU5hbWVbMl0gLiAiIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBPYmplY3QgICA9PiAkT2JqZWN0TmFtZVswXSwKICAgICAgICAgICAgRm9ybWF0ICAgPT4gJEZvcm1hdE5hbWVbMF0sCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRUZW1wbGF0ZU5hbWVbMl0sCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICdUZXN0IENvbW1lbnQnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHRlbXBsYXRlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIChjaGVjayBzdHJpbmcgY2xlYW5lciBmdW5jdGlvbikKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICIgXHQgXG4gXHIgIiAuICRUZW1wbGF0ZU5hbWVbMl0gLiAiVVBEQVRFMSBcdCBcbiBcciAiLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gIiBcdCBcbiBcciBUZXN0IENvbW1lbnQgVVBEQVRFMSBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBOYW1lICAgICA9PiAkVGVtcGxhdGVOYW1lWzJdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnVGVzdCBDb21tZW50IFVQREFURTEnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyB0ZW1wbGF0ZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAoVW5pY29kZSBjaGVja3MpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgT2JqZWN0ICA9PiAnIMaVIMaYICcgLiAkT2JqZWN0TmFtZVswXSAuICcgxrUgxrsgJywKICAgICAgICAgICAgRm9ybWF0ICA9PiAnIMeTIMejICcgLiAkRm9ybWF0TmFtZVswXSAuICcgx6Ugx64gJywKICAgICAgICAgICAgTmFtZSAgICA9PiAnIMe3IMicICcgLiAkVGVtcGxhdGVOYW1lWzNdIC4gJyDIniDIoCAnLAogICAgICAgICAgICBWYWxpZElEID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJyDRoCDRpCBUZXN0Q29tbWVudDUgz6AgzqkgJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgT2JqZWN0ICAgPT4gJ8aVxpgnIC4gJE9iamVjdE5hbWVbMF0gLiAnxrXGuycsCiAgICAgICAgICAgIEZvcm1hdCAgID0+ICfHk8ejJyAuICRGb3JtYXROYW1lWzBdIC4gJ8elx64nLAogICAgICAgICAgICBOYW1lICAgICA9PiAnx7cgyJwgJyAuICRUZW1wbGF0ZU5hbWVbM10gLiAnIMieIMigJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJ9GgINGkIFRlc3RDb21tZW50NSDPoCDOqScsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+IDEsCiAgICAgICAgfSwKICAgIH0sCl07CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgcnVuIGdlbmVyYWwgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJFRlc3RDb3VudCA9IDE7Cm15IEBBZGRlZFRlbXBsYXRlSURzOwoKVEVNUExBVEU6CmZvciBteSAkSXRlbSAoIEB7JEl0ZW1EYXRhfSApIHsKCiAgICBpZiAoICRJdGVtLT57QWRkfSApIHsKCiAgICAgICAgIyBhZGQgbmV3IHRlbXBsYXRlCiAgICAgICAgbXkgJFRlbXBsYXRlSUQgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZUFkZCggJXsgJEl0ZW0tPntBZGR9IH0gKTsKCiAgICAgICAgaWYgKCRUZW1wbGF0ZUlEKSB7CiAgICAgICAgICAgIHB1c2ggQEFkZGVkVGVtcGxhdGVJRHMsICRUZW1wbGF0ZUlEOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiB0ZW1wbGF0ZSB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntBZGRHZXR9ICkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRUZW1wbGF0ZUlELAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogVGVtcGxhdGVBZGQoKSAtIFRlbXBsYXRlS2V5OiAkVGVtcGxhdGVJRCIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSggJFRlbXBsYXRlSUQsICJUZXN0ICRUZXN0Q291bnQ6IFRlbXBsYXRlQWRkKCkiICk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJEl0ZW0tPntBZGRHZXR9ICkgewoKICAgICAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhIHRvIGNoZWNrIHRoZSB2YWx1ZXMgYWZ0ZXIgdGVtcGxhdGUgd2FzIGFkZGVkCiAgICAgICAgbXkgJFRlbXBsYXRlR2V0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJEFkZGVkVGVtcGxhdGVJRHNbLTFdLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRJdGVtLT57QWRkfS0+e1VzZXJJRH0gfHwgMSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHRlbXBsYXRlIGRhdGEgYWZ0ZXIgY3JlYXRpb24gb2YgdGVtcGxhdGUKICAgICAgICBmb3IgbXkgJFRlbXBsYXRlQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRJdGVtLT57QWRkR2V0fSB9ICkgewogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkVGVtcGxhdGVHZXQtPnskVGVtcGxhdGVBdHRyaWJ1dGV9IHx8ICcnLAogICAgICAgICAgICAgICAgJEl0ZW0tPntBZGRHZXR9LT57JFRlbXBsYXRlQXR0cmlidXRlfSB8fCAnJywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFRlbXBsYXRlR2V0KCkgLSAkVGVtcGxhdGVBdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRJdGVtLT57VXBkYXRlfSApIHsKCiAgICAgICAgIyBjaGVjayBsYXN0IHRlbXBsYXRlIGlkIHZhcmlhYmxlCiAgICAgICAgaWYgKCAhJEFkZGVkVGVtcGxhdGVJRHNbLTFdICkgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogTk8gTEFTVCBJVEVNIElEIEdJVkVOLiBQbGVhc2UgYWRkIGEgdGVtcGxhdGUgZmlyc3QuIgogICAgICAgICAgICApOwogICAgICAgICAgICBsYXN0IFRFTVBMQVRFOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgdGhlIHRlbXBsYXRlCiAgICAgICAgbXkgJFVwZGF0ZVN1Y2VzcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlVXBkYXRlKAogICAgICAgICAgICAleyAkSXRlbS0+e1VwZGF0ZX0gfSwKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkQWRkZWRUZW1wbGF0ZUlEc1stMV0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiB0ZW1wbGF0ZSB3YXMgdXBkYXRlZCBzdWNjZXNzZnVsbHkgb3Igbm90CiAgICAgICAgaWYgKCAkSXRlbS0+e1VwZGF0ZUdldH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFVwZGF0ZVN1Y2VzcywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFRlbXBsYXRlVXBkYXRlKCkgLSBUZW1wbGF0ZUtleTogJEFkZGVkVGVtcGxhdGVJRHNbLTFdIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRVcGRhdGVTdWNlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBUZW1wbGF0ZVVwZGF0ZSgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkSXRlbS0+e1VwZGF0ZUdldH0gKSB7CgogICAgICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEgdG8gY2hlY2sgdGhlIHZhbHVlcyBhZnRlciB0aGUgdXBkYXRlCiAgICAgICAgbXkgJFRlbXBsYXRlR2V0ID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJEFkZGVkVGVtcGxhdGVJRHNbLTFdLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRJdGVtLT57VXBkYXRlfS0+e1VzZXJJRH0gfHwgMSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHRlbXBsYXRlIGRhdGEgYWZ0ZXIgdXBkYXRlCiAgICAgICAgZm9yIG15ICRUZW1wbGF0ZUF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkSXRlbS0+e1VwZGF0ZUdldH0gfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFRlbXBsYXRlR2V0LT57JFRlbXBsYXRlQXR0cmlidXRlfSB8fCAnJywKICAgICAgICAgICAgICAgICRJdGVtLT57VXBkYXRlR2V0fS0+eyRUZW1wbGF0ZUF0dHJpYnV0ZX0gfHwgJycsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBUZW1wbGF0ZUdldCgpIC0gJFRlbXBsYXRlQXR0cmlidXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Cn0KY29udGludWUgewoKICAgICMgaW5jcmVtZW50IHRoZSBjb3VudGVyCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUZW1wbGF0ZUxpc3QgdGVzdCAxIChjaGVjayBhcnJheSByZWZlcmVuY2VzKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGxpc3QgbXVzdCBiZSBhbiBlbXB0eSBhcnJheSByZWZlcmVuY2UKJFNlbGYtPlRydWUoCiAgICByZWYgJFRlbXBsYXRlTGlzdDFBbGwgZXEgJ0FSUkFZJyAmJiByZWYgJFRlbXBsYXRlTGlzdDFPYmplY3QgZXEgJ0FSUkFZJywKICAgICJUZXN0ICRUZXN0Q291bnQ6IFRlbXBsYXRlTGlzdCgpIC0gYXJyYXkgcmVmZXJlbmNlcyIsCik7CgokVGVzdENvdW50Kys7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVtcGxhdGVMaXN0IHRlc3QgMiAobGlzdCBtdXN0IGJlIGVtcHR5KQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGxpc3QgbXVzdCBiZSBhbiBlbXB0eSBsaXN0CiRTZWxmLT5UcnVlKAogICAgc2NhbGFyIEB7JFRlbXBsYXRlTGlzdDFPYmplY3R9IGVxIDAsCiAgICAiVGVzdCAkVGVzdENvdW50OiBUZW1wbGF0ZUxpc3QoKSAtIGVtcHR5IGxpc3QiLAopOwoKJFRlc3RDb3VudCsrOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFRlbXBsYXRlTGlzdCB0ZXN0IDIgKGNoZWNrIGNvcnJlY3QgbnVtYmVyIG9mIG5ldyBpdGVtcykKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgdGVtcGxhdGUgbGlzdCB3aXRoIGFsbCBlbGVtZW50cwpteSAkVGVtcGxhdGVMaXN0MiA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlRlbXBsYXRlTGlzdCgKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBsaXN0IG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlCiRTZWxmLT5UcnVlKAogICAgcmVmICRUZW1wbGF0ZUxpc3QyIGVxICdBUlJBWScsCiAgICAiVGVzdCAkVGVzdENvdW50OiBUZW1wbGF0ZUxpc3QoKSAtIGFycmF5IHJlZmVyZW5jZSIsCik7CgpteSAkVGVtcGxhdGVMaXN0Q291bnQgPSBzY2FsYXIgQHskVGVtcGxhdGVMaXN0Mn0gLSBzY2FsYXIgQHskVGVtcGxhdGVMaXN0MUFsbH07CgojIGNoZWNrIGNvcnJlY3QgbnVtYmVyIG9mIG5ldyBpdGVtcwokU2VsZi0+VHJ1ZSgKICAgICRUZW1wbGF0ZUxpc3RDb3VudCBlcSBzY2FsYXIgQEFkZGVkVGVtcGxhdGVJRHMsCiAgICAiVGVzdCAkVGVzdENvdW50OiBUZW1wbGF0ZUxpc3QoKSAtIGNvcnJlY3QgbnVtYmVyIG9mIG5ldyBpdGVtcyIsCik7CgokVGVzdENvdW50Kys7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVtcGxhdGVEZWxldGUgdGVzdCAxIChhZGQgb25lIHRlbXBsYXRlIGFuZCBkZWxldGUgaXQpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IHRlbXBsYXRlIGxpc3Qgd2l0aCBhbGwgZWxlbWVudHMKbXkgJFRlbXBsYXRlRGVsZXRlMUxpc3QxID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVMaXN0KAogICAgT2JqZWN0ID0+ICRPYmplY3ROYW1lWzBdLAogICAgVXNlcklEID0+IDEsCik7CgojIGFkZCBhIHRlc3QgdGVtcGxhdGUKbXkgJFRlbXBsYXRlRGVsZXRlSUQgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZUFkZCgKICAgIE9iamVjdCAgPT4gJE9iamVjdE5hbWVbMF0sCiAgICBGb3JtYXQgID0+ICRGb3JtYXROYW1lWzBdLAogICAgTmFtZSAgICA9PiAkVGVtcGxhdGVOYW1lWzRdLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBnZXQgdGVtcGxhdGUgbGlzdCB3aXRoIGFsbCBlbGVtZW50cwpteSAkVGVtcGxhdGVEZWxldGUxTGlzdDIgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5UZW1wbGF0ZUxpc3QoCiAgICBPYmplY3QgPT4gJE9iamVjdE5hbWVbMF0sCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgbGlzdCBtdXN0IGhhdmUgb25lIGVsZW1lbnQgbW9yZQokU2VsZi0+VHJ1ZSgKICAgIHNjYWxhciBAeyRUZW1wbGF0ZURlbGV0ZTFMaXN0MX0gZXEgKCBzY2FsYXIgQHskVGVtcGxhdGVEZWxldGUxTGlzdDJ9ICkgLSAxLAogICAgIlRlc3QgJFRlc3RDb3VudDogVGVtcGxhdGVEZWxldGUoKSAtIG51bWJlciBvZiBsaXN0ZWQgZWxlbWVudHMiLAopOwoKIyBkZWxldGUgdGhlIG5ldyB0ZW1wbGF0ZQpteSAkVGVtcGxhdGVEZWxldGUxID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVEZWxldGUoCiAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZURlbGV0ZUlELAogICAgVXNlcklEICAgICA9PiAxLAopOwoKIyBsaXN0IG11c3QgYmUgc3VjY2Vzc2Z1bAokU2VsZi0+VHJ1ZSgKICAgICRUZW1wbGF0ZURlbGV0ZTEsCiAgICAiVGVzdCAkVGVzdENvdW50OiBUZW1wbGF0ZURlbGV0ZSgpIiwKKTsKCiMgZ2V0IHRlbXBsYXRlIGxpc3Qgd2l0aCBhbGwgZWxlbWVudHMKbXkgJFRlbXBsYXRlRGVsZXRlMUxpc3QzID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVMaXN0KAogICAgT2JqZWN0ID0+ICRPYmplY3ROYW1lWzBdLAogICAgVXNlcklEID0+IDEsCik7CgojIGxpc3QgbXVzdCBoYXZlIHRoZSBvcmlnaW5hbCBudW1iZXIgb2YgZWxlbWVudHMKJFNlbGYtPlRydWUoCiAgICBzY2FsYXIgQHskVGVtcGxhdGVEZWxldGUxTGlzdDF9IGVxIHNjYWxhciBAeyRUZW1wbGF0ZURlbGV0ZTFMaXN0M30sCiAgICAiVGVzdCAkVGVzdENvdW50OiBUZW1wbGF0ZURlbGV0ZSgpIC0gbnVtYmVyIG9mIGxpc3RlZCBlbGVtZW50cyIsCik7CgokVGVzdENvdW50Kys7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgVGVtcGxhdGVEZWxldGUgdGVzdCAyIChkZWxldGUgYWxsIHVuaXQgdGVzdCB0ZW1wbGF0ZXMpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCmZvciBteSAkVGVtcGxhdGVJRCAoQEFkZGVkVGVtcGxhdGVJRHMpIHsKCiAgICAjIGRlbGV0ZSB0aGUgdGVtcGxhdGUKICAgIG15ICRTdWNjZXNzID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVEZWxldGUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgc3VjY2VzcwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogVGVtcGxhdGVEZWxldGUoKSBUZW1wbGF0ZUlEICRUZW1wbGF0ZUlEIiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgT2JqZWN0TGlzdCB0ZXN0IDEgKGNoZWNrIGdlbmVyYWwgZnVuY3Rpb25hbGl0eSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBkZWZpbmUgdGVzdCBsaXN0Cm15ICRPYmplY3RMaXN0MVRlc3RMaXN0ID0gewogICAgVW5pdFRlc3QxID0+IHsKICAgICAgICBNb2R1bGUgPT4gJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlVuaXRUZXN0MScsCiAgICAgICAgTmFtZSAgID0+ICdVbml0IFRlc3QgMScsCiAgICB9LAogICAgVW5pdFRlc3QyID0+IHsKICAgICAgICBNb2R1bGUgPT4gJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlVuaXRUZXN0MicsCiAgICAgICAgTmFtZSAgID0+ICdVbml0IFRlc3QgMicsCiAgICB9LAp9OwoKIyBnZXQgb3JpZ2luYWwgb2JqZWN0IGxpc3QKbXkgJE9iamVjdExpc3RPcmcgPQogICAgJENvbmZpZ09iamVjdC0+R2V0KCdJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmRSZWdpc3RyYXRpb24nKTsKCiMgc2V0IHRlc3QgbGlzdAokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnSW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kUmVnaXN0cmF0aW9uJywKICAgIFZhbHVlID0+ICRPYmplY3RMaXN0MVRlc3RMaXN0LAopOwoKIyBnZXQgb2JqZWN0IGxpc3QKbXkgJE9iamVjdExpc3QxID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0TGlzdCgpOwoKIyBsaXN0IG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZQokU2VsZi0+VHJ1ZSgKICAgIHJlZiAkT2JqZWN0TGlzdDEgZXEgJ0hBU0gnLAogICAgIlRlc3QgJFRlc3RDb3VudDogT2JqZWN0TGlzdCgpIC0gaGFzaCByZWZlcmVuY2UiLAopOwoKIyBjaGVjayB0aGUgbGlzdApLRVk6CmZvciBteSAkS2V5ICggc29ydCBrZXlzICV7JE9iamVjdExpc3QxfSApIHsKCiAgICBpZiAoICEkT2JqZWN0TGlzdDFUZXN0TGlzdC0+eyRLZXl9ICkgewogICAgICAgICRPYmplY3RMaXN0MVRlc3RMaXN0LT57RHVtbXl9ID0gMTsKICAgIH0KCiAgICBuZXh0IEtFWSBpZiAkT2JqZWN0TGlzdDEtPnskS2V5fSBuZSAkT2JqZWN0TGlzdDFUZXN0TGlzdC0+eyRLZXl9LT57TmFtZX07CgogICAgZGVsZXRlICRPYmplY3RMaXN0MVRlc3RMaXN0LT57JEtleX07Cn0KCiRTZWxmLT5UcnVlKAogICAgISV7JE9iamVjdExpc3QxVGVzdExpc3R9LAogICAgIlRlc3QgJFRlc3RDb3VudDogT2JqZWN0TGlzdCgpIC0gY29udGVudCBpcyB2YWxpZCIsCik7CgojIHJlc3RvcmUgb3JpZ2luYWwgb2JqZWN0IGxpc3QKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ0ltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZFJlZ2lzdHJhdGlvbicsCiAgICBWYWx1ZSA9PiAkT2JqZWN0TGlzdE9yZywKKTsKCiRUZXN0Q291bnQrKzsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBGb3JtYXRMaXN0IHRlc3QgMSAoY2hlY2sgZ2VuZXJhbCBmdW5jdGlvbmFsaXR5KQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGRlZmluZSB0ZXN0IGxpc3QKbXkgJEZvcm1hdExpc3QxVGVzdExpc3QgPSB7CiAgICBVbml0VGVzdDEgPT4gewogICAgICAgIE1vZHVsZSA9PiAnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6Rm9ybWF0QmFja2VuZDo6VW5pdFRlc3QxJywKICAgICAgICBOYW1lICAgPT4gJ1VuaXQgVGVzdCAxJywKICAgIH0sCiAgICBVbml0VGVzdDIgPT4gewogICAgICAgIE1vZHVsZSA9PiAnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6Rm9ybWF0QmFja2VuZDo6VW5pdFRlc3QyJywKICAgICAgICBOYW1lICAgPT4gJ1VuaXQgVGVzdCAyJywKICAgIH0sCn07CgojIGdldCBvcmlnaW5hbCBmb3JtYXQgbGlzdApteSAkRm9ybWF0TGlzdE9yZyA9CiAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ltcG9ydEV4cG9ydDo6Rm9ybWF0QmFja2VuZFJlZ2lzdHJhdGlvbicpOwoKIyBzZXQgdGVzdCBsaXN0CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdJbXBvcnRFeHBvcnQ6OkZvcm1hdEJhY2tlbmRSZWdpc3RyYXRpb24nLAogICAgVmFsdWUgPT4gJEZvcm1hdExpc3QxVGVzdExpc3QsCik7CgojIGdldCBmb3JtYXQgbGlzdApteSAkRm9ybWF0TGlzdDEgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRMaXN0KCk7CgojIGxpc3QgbXVzdCBiZSBhIGhhc2ggcmVmZXJlbmNlCiRTZWxmLT5UcnVlKAogICAgcmVmICRGb3JtYXRMaXN0MSBlcSAnSEFTSCcsCiAgICAiVGVzdCAkVGVzdENvdW50OiBGb3JtYXRMaXN0KCkgLSBoYXNoIHJlZmVyZW5jZSIsCik7CgojIGNoZWNrIHRoZSBsaXN0CktFWToKZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXskRm9ybWF0TGlzdDF9ICkgewoKICAgIGlmICggISRGb3JtYXRMaXN0MVRlc3RMaXN0LT57JEtleX0gKSB7CiAgICAgICAgJEZvcm1hdExpc3QxVGVzdExpc3QtPntEdW1teX0gPSAxOwogICAgfQoKICAgIG5leHQgS0VZIGlmICRGb3JtYXRMaXN0MS0+eyRLZXl9IG5lICRGb3JtYXRMaXN0MVRlc3RMaXN0LT57JEtleX0tPntOYW1lfTsKCiAgICBkZWxldGUgJEZvcm1hdExpc3QxVGVzdExpc3QtPnskS2V5fTsKfQoKJFNlbGYtPlRydWUoCiAgICAhJXskRm9ybWF0TGlzdDFUZXN0TGlzdH0sCiAgICAiVGVzdCAkVGVzdENvdW50OiBGb3JtYXRMaXN0KCkgLSBjb250ZW50IGlzIHZhbGlkIiwKKTsKCiMgcmVzdG9yZSBvcmlnaW5hbCBmb3JtYXQgbGlzdAokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnSW1wb3J0RXhwb3J0OjpGb3JtYXRCYWNrZW5kUmVnaXN0cmF0aW9uJywKICAgIFZhbHVlID0+ICRGb3JtYXRMaXN0T3JnLAopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyBxdygkU2VsZik7Cgp1c2UgRGF0YTo6RHVtcGVyOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJE1haW5PYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwpteSAkSW1wb3J0RXhwb3J0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKTsKbXkgJEZvcm1hdEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpGb3JtYXRCYWNrZW5kOjpDU1YnKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGdldCBob21lIGRpcmVjdG9yeQokU2VsZi0+e0hvbWV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdIb21lJyk7CgojIGFkZCBzb21lIHRlc3QgdGVtcGxhdGVzIGZvciBsYXRlciBjaGVja3MKbXkgQFRlbXBsYXRlSURzOwpmb3IgKCAxIC4uIDMwICkgewoKICAgIG15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgogICAgIyBhZGQgYSB0ZXN0IHRlbXBsYXRlIGZvciBsYXRlciBjaGVja3MKICAgIG15ICRUZW1wbGF0ZUlEID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVBZGQoCiAgICAgICAgT2JqZWN0ICA9PiAnVW5pdFRlc3QnIC4gJFJhbmRvbUlELAogICAgICAgIEZvcm1hdCAgPT4gJ0NTVicsCiAgICAgICAgTmFtZSAgICA9PiAnVW5pdFRlc3QnIC4gJFJhbmRvbUlELAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgIHB1c2ggQFRlbXBsYXRlSURzLCAkVGVtcGxhdGVJRDsKfQoKbXkgJFRlc3RDb3VudCA9IDE7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgRm9ybWF0TGlzdCB0ZXN0IDEgKGNoZWNrIENTViBpdGVtKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGdldCBmb3JtYXQgbGlzdApteSAkRm9ybWF0TGlzdDEgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXRMaXN0KCk7CgojIGNoZWNrIGZvcm1hdCBsaXN0CiRTZWxmLT5UcnVlKAogICAgJEZvcm1hdExpc3QxICYmIHJlZiAkRm9ybWF0TGlzdDEgZXEgJ0hBU0gnICYmICRGb3JtYXRMaXN0MS0+e0NTVn0sCiAgICAiVGVzdCAkVGVzdENvdW50OiBGb3JtYXRMaXN0KCkgLSBDU1YgZXhpc3RzIiwKKTsKCiRUZXN0Q291bnQrKzsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBGb3JtYXRBdHRyaWJ1dGVzR2V0IHRlc3QgMSAoY2hlY2sgYXR0cmlidXRlIGhhc2gpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IGZvcm1hdCBhdHRyaWJ1dGVzCm15ICRGb3JtYXRBdHRyaWJ1dGVzR2V0MSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdEF0dHJpYnV0ZXNHZXQoCiAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1swXSwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiMgY2hlY2sgZm9ybWF0IGF0dHJpYnV0ZSByZWZlcmVuY2UKJFNlbGYtPlRydWUoCiAgICAkRm9ybWF0QXR0cmlidXRlc0dldDEgJiYgcmVmICRGb3JtYXRBdHRyaWJ1dGVzR2V0MSBlcSAnQVJSQVknLAogICAgIlRlc3QgJFRlc3RDb3VudDogRm9ybWF0QXR0cmlidXRlc0dldCgpIC0gY2hlY2sgYXJyYXkgcmVmZXJlbmNlIiwKKTsKCiMgZGVmaW5lIHRoZSByZWZlcmVuY2UgaGFzaApteSAkRm9ybWF0QXR0cmlidXRlc0dldDFSZWZlcmVuY2UgPSBbCiAgICB7CiAgICAgICAgS2V5ICAgPT4gJ0NvbHVtblNlcGFyYXRvcicsCiAgICAgICAgTmFtZSAgPT4gJ0NvbHVtbiBTZXBhcmF0b3InLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUYWJ1bGF0b3IgPT4gJ1RhYnVsYXRvciAoVEFCKScsCiAgICAgICAgICAgICAgICBTZW1pY29sb24gPT4gJ1NlbWljb2xvbiAoOyknLAogICAgICAgICAgICAgICAgQ29sb24gICAgID0+ICdDb2xvbiAoOiknLAogICAgICAgICAgICAgICAgRG90ICAgICAgID0+ICdEb3QgKC4pJywKICAgICAgICAgICAgICAgIENvbW1hICAgICA9PiAnQ29tbWEgKCwpJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBLZXkgICA9PiAnQ2hhcnNldCcsCiAgICAgICAgTmFtZSAgPT4gJ0NoYXJzZXQnLAogICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgVmFsdWVEZWZhdWx0ID0+ICdVVEYtOCcsCiAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAxLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgU2l6ZSAgICAgICAgID0+IDIwLAogICAgICAgICAgICBNYXhMZW5ndGggICAgPT4gMjAsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgS2V5ICAgPT4gJ0luY2x1ZGVDb2x1bW5IZWFkZXJzJywKICAgICAgICBOYW1lICA9PiAnSW5jbHVkZSBDb2x1bW4gSGVhZGVycycsCiAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICBUeXBlID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDAgPT4gJ05vJywKICAgICAgICAgICAgICAgIDEgPT4gJ1llcycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMCwKICAgICAgICB9LAogICAgfSwKXTsKCiRTZWxmLT5Jc0RlZXBseSgKICAgICRGb3JtYXRBdHRyaWJ1dGVzR2V0MSwKICAgICRGb3JtYXRBdHRyaWJ1dGVzR2V0MVJlZmVyZW5jZSwKICAgICJUZXN0ICRUZXN0Q291bnQ6IEZvcm1hdEF0dHJpYnV0ZXNHZXQoKSAtIGF0dHJpYnV0ZXMgb2YgdGhlIHJvdyBhcmUgaWRlbnRpY2FsIiwKKTsKCiRUZXN0Q291bnQrKzsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBGb3JtYXRBdHRyaWJ1dGVzR2V0IHRlc3QgMiAoY2hlY2sgd2l0aCBub24gZXhpc3RpbmcgdGVtcGxhdGUpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IGZvcm1hdCBhdHRyaWJ1dGVzCm15ICRGb3JtYXRBdHRyaWJ1dGVzR2V0MiA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdEF0dHJpYnV0ZXNHZXQoCiAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1stMV0gKyAxLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKIyBjaGVjayBmYWxzZSByZXR1cm4KJFNlbGYtPkZhbHNlKAogICAgJEZvcm1hdEF0dHJpYnV0ZXNHZXQyLAogICAgIlRlc3QgJFRlc3RDb3VudDogRm9ybWF0QXR0cmlidXRlc0dldCgpIC0gY2hlY2sgZmFsc2UgcmV0dXJuIiwKKTsKCiRUZXN0Q291bnQrKzsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBNYXBwaW5nRm9ybWF0QXR0cmlidXRlc0dldCB0ZXN0IDEgKGNoZWNrIGF0dHJpYnV0ZSBoYXNoKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGdldCBtYXBwaW5nIGZvcm1hdCBhdHRyaWJ1dGVzCm15ICRNYXBwaW5nRm9ybWF0QXR0cmlidXRlc0dldDEgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nRm9ybWF0QXR0cmlidXRlc0dldCgKICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWzBdLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKIyBjaGVjayBtYXBwaW5nIGZvcm1hdCBhdHRyaWJ1dGUgcmVmZXJlbmNlCiRTZWxmLT5UcnVlKAogICAgJE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0MSAmJiByZWYgJE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0MSBlcSAnQVJSQVknLAogICAgIlRlc3QgJFRlc3RDb3VudDogTWFwcGluZ0Zvcm1hdEF0dHJpYnV0ZXNHZXQoKSAtIGNoZWNrIGFycmF5IHJlZmVyZW5jZSIsCik7CgojIGRlZmluZSB0aGUgcmVmZXJlbmNlIGhhc2gKbXkgJE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0MVJlZmVyZW5jZSA9IFsKICAgIHsKICAgICAgICBLZXkgICA9PiAnQ29sdW1uJywKICAgICAgICBOYW1lICA9PiAnQ29sdW1uJywKICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgIFR5cGUgICAgID0+ICdUVCcsCiAgICAgICAgICAgIERhdGEgICAgID0+ICcnLAogICAgICAgICAgICBSZXF1aXJlZCA9PiAwLAogICAgICAgIH0sCiAgICB9LApdOwoKJFNlbGYtPklzRGVlcGx5KAogICAgJE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0MSwKICAgICRNYXBwaW5nRm9ybWF0QXR0cmlidXRlc0dldDFSZWZlcmVuY2UsCiAgICAiVGVzdCAkVGVzdENvdW50OiBNYXBwaW5nRm9ybWF0QXR0cmlidXRlc0dldCgpIC0gYXR0cmlidXRlcyBvZiB0aGUgcm93IGFyZSBpZGVudGljYWwiLAopOwoKJFRlc3RDb3VudCsrOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0IHRlc3QgMiAoY2hlY2sgd2l0aCBub24gZXhpc3RpbmcgdGVtcGxhdGUpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IG1hcHBpbmcgZm9ybWF0IGF0dHJpYnV0ZXMKbXkgJE1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0MiA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdGb3JtYXRBdHRyaWJ1dGVzR2V0KAogICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbLTFdICsgMSwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiMgY2hlY2sgZmFsc2UgcmV0dXJuCiRTZWxmLT5GYWxzZSgKICAgICRNYXBwaW5nRm9ybWF0QXR0cmlidXRlc0dldDIsCiAgICAiVGVzdCAkVGVzdENvdW50OiBNYXBwaW5nRm9ybWF0QXR0cmlidXRlc0dldCgpIC0gY2hlY2sgZmFsc2UgcmV0dXJuIiwKKTsKCiRUZXN0Q291bnQrKzsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBkZWZpbmUgZ2VuZXJhbCBJbXBvcnREYXRhR2V0IHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRJbXBvcnREYXRhVGVzdHMgPSBbCgogICAgIyBJbXBvcnREYXRhR2V0IGRvZXNuJ3QgY29udGFpbnMgYWxsIGRhdGEgKGNoZWNrIHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBJbXBvcnREYXRhR2V0IGRvZXNuJ3QgY29udGFpbnMgYWxsIGRhdGEgKGNoZWNrIHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBubyBzb3VyY2UgY29udGVudCBhcmUgZ2l2ZW4gKGVtcHR5IGFycmF5IHJlZmVyZW5jZSBtdXN0IGJlIHJldHVybmVkKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSURzWzFdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbXSwKICAgIH0sCgogICAgIyBzb3VyY2UgY29udGVudCBtdXN0IGJlIGEgc2NhbGFyIHJlZmVyZW5jZSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzFdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiBbXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHNvdXJjZSBjb250ZW50IG11c3QgYmUgYSBzY2FsYXIgcmVmZXJlbmNlIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMV0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+IHt9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgc291cmNlIGNvbnRlbnQgbXVzdCBiZSBhIHNjYWxhciByZWZlcmVuY2UgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1sxXSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJycsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBubyBleGlzdGluZyB0ZW1wbGF0ZSBpZCBpcyBnaXZlbiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWy0xXSArIDEsCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+IFxkbyB7J0R1bW15J30sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBubyBjb2x1bW4gU2VwYXJhdG9yIGFuZCBjaGFyc2V0IGFyZSBnaXZlbiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzJdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiBcZG8geydEdW1teSd9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgbm8gY29sdW1uIFNlcGFyYXRvciBpcyBnaXZlbiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENoYXJzZXQgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syXSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gXGRvIHsnRHVtbXknfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG5vIGNoYXJzZXQgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0R1bW15JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syXSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gXGRvIHsnRHVtbXknfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGludmFsaWQgY29sdW1uIFNlcGFyYXRvciBpcyBnaXZlbiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnRHVtbXknLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMl0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+IFxkbyB7J0R1bW15J30sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIGJ1dCBzb3VyY2UgY29udGVudCBpcyBlbXB0eSAoZW1wdHkgYXJyYXkgcmVmZXJlbmNlIG11c3QgYmUgcmV0dXJuZWQpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbM10sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+IFxkbyB7Jyd9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbXSwKICAgIH0sCgogICAgIyBzb3VyY2UgY29udGVudCBpcyBvbmx5IGEgc3RyaW5nIHdpdGggc3BhY2VzIChvbmUgY2VsbCBhcnJheSB3aXRoIHRoZSBzcGFjZXMgbXVzdCBiZSByZXR1cm5lZCkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1s0XSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gXGRvIHsnICAnfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbJyAgJ10sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoY2hlY2sgdGhlIHBhcnNlZCBjb250ZW50KQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnU2VtaWNvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwMS1NU0V4Y2VsLVNlbWljb2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzVdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnUm93MS1Db2wxJywgJ1JvdzEtQ29sMicsICdSb3cxLUNvbDMnIF0sCiAgICAgICAgICAgIFsgJ1JvdzItQ29sMScsICdSb3cyLUNvbDInLCAnUm93Mi1Db2wzJyBdLAogICAgICAgICAgICBbICdSb3czLUNvbDEnLCAnUm93My1Db2wyJywgJ1JvdzMtQ29sMycgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuLCBidXQgVGFidWxhdG9yIGlzIHVzZWQgYXMgU2VwYXJhdG9yIChjaGVjayB0aGUgcGFyc2VkIGNvbnRlbnQpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdUYWJ1bGF0b3InLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAxLU1TRXhjZWwtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbNV0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbJ1JvdzEtQ29sMTtSb3cxLUNvbDI7Um93MS1Db2wzJ10sCiAgICAgICAgICAgIFsnUm93Mi1Db2wxO1JvdzItQ29sMjtSb3cyLUNvbDMnXSwKICAgICAgICAgICAgWydSb3czLUNvbDE7Um93My1Db2wyO1JvdzMtQ29sMyddLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGNoZWNrIHRoZSBwYXJzZWQgY29udGVudCkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1RhYnVsYXRvcicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ0lTTy04ODU5LTEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3VyY2VGaWxlICAgID0+ICdJbXBvcnRFeHBvcnRGb3JtYXRDU1YwMDEtTVNFeGNlbC1UYWJ1bGF0b3IuY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1s1XSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJ1JvdzEtQ29sMScsICdSb3cxLUNvbDInLCAnUm93MS1Db2wzJyBdLAogICAgICAgICAgICBbICdSb3cyLUNvbDEnLCAnUm93Mi1Db2wyJywgJ1JvdzItQ29sMycgXSwKICAgICAgICAgICAgWyAnUm93My1Db2wxJywgJ1JvdzMtQ29sMicsICdSb3czLUNvbDMnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiwgYnV0IFNlbWljb2xvbiBpcyB1c2VkIGFzIFNlcGFyYXRvciAoY2hlY2sgdGhlIHBhcnNlZCBjb250ZW50KQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnU2VtaWNvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwMS1NU0V4Y2VsLVRhYnVsYXRvci5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzVdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyJSb3cxLUNvbDFcdFJvdzEtQ29sMlx0Um93MS1Db2wzIl0sCiAgICAgICAgICAgIFsiUm93Mi1Db2wxXHRSb3cyLUNvbDJcdFJvdzItQ29sMyJdLAogICAgICAgICAgICBbIlJvdzMtQ29sMVx0Um93My1Db2wyXHRSb3czLUNvbDMiXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayB0aGUgcGFyc2VkIGNvbnRlbnQpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAxLU9wZW5PZmZpY2UtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbNV0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICdSb3cxLUNvbDEnLCAnUm93MS1Db2wyJywgJ1JvdzEtQ29sMycgXSwKICAgICAgICAgICAgWyAnUm93Mi1Db2wxJywgJ1JvdzItQ29sMicsICdSb3cyLUNvbDMnIF0sCiAgICAgICAgICAgIFsgJ1JvdzMtQ29sMScsICdSb3czLUNvbDInLCAnUm93My1Db2wzJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGNoZWNrIHRoZSBwYXJzZWQgY29udGVudCkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1RhYnVsYXRvcicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ0lTTy04ODU5LTEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3VyY2VGaWxlICAgID0+ICdJbXBvcnRFeHBvcnRGb3JtYXRDU1YwMDEtT3Blbk9mZmljZS1UYWJ1bGF0b3IuY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1s1XSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJ1JvdzEtQ29sMScsICdSb3cxLUNvbDInLCAnUm93MS1Db2wzJyBdLAogICAgICAgICAgICBbICdSb3cyLUNvbDEnLCAnUm93Mi1Db2wyJywgJ1JvdzItQ29sMycgXSwKICAgICAgICAgICAgWyAnUm93My1Db2wxJywgJ1JvdzMtQ29sMicsICdSb3czLUNvbDMnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoY2hlY2sgdGhlIHBhcnNlZCBjb250ZW50KQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnQ29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAxLU9wZW5PZmZpY2UtQ29sb24uY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1s1XSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJ1JvdzEtQ29sMScsICdSb3cxLUNvbDInLCAnUm93MS1Db2wzJyBdLAogICAgICAgICAgICBbICdSb3cyLUNvbDEnLCAnUm93Mi1Db2wyJywgJ1JvdzItQ29sMycgXSwKICAgICAgICAgICAgWyAnUm93My1Db2wxJywgJ1JvdzMtQ29sMicsICdSb3czLUNvbDMnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAobmV3bGluZSBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAyLU1TRXhjZWwtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbNl0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICJcblRlc3QgMSAtIDEiLCAiVGVzdCAxIC0gMiIsICAgIlRlc3QgMVxuLSAzIiwgICdUZXN0IFxuXHRcclxzJyBdLAogICAgICAgICAgICBbICJUZXN0IDIgXG4tIDEiLCAiVGVcbnN0IDIgLSAyIiwgIlRlc3QgMiAtIDNcbiIsICcnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAobmV3bGluZSBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdUYWJ1bGF0b3InLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAyLU1TRXhjZWwtVGFidWxhdG9yLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbNl0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICJcblRlc3QgMSAtIDEiLCAnVGVzdCAxIC0gMicsICAgIlRlc3QgMVxuLSAzIiwgICdUZXN0IFxuXHRcclxzJyBdLAogICAgICAgICAgICBbICJUZXN0IDIgXG4tIDEiLCAiVGVcbnN0IDIgLSAyIiwgIlRlc3QgMiAtIDNcbiIsICcnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAobmV3bGluZSBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAyLU9wZW5PZmZpY2UtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbNl0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICJcblRlc3QgMSAtIDEiLCAiVGVzdCAxIC0gMiIsICAgIlRlc3QgMVxuLSAzIiwgICdUZXN0IFxuXHRcclxzJyBdLAogICAgICAgICAgICBbICJUZXN0IDIgXG4tIDEiLCAiVGVcbnN0IDIgLSAyIiwgIlRlc3QgMiAtIDNcbiIsICcnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAobmV3bGluZSBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdUYWJ1bGF0b3InLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAyLU9wZW5PZmZpY2UtVGFidWxhdG9yLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbNl0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICJcblRlc3QgMSAtIDEiLCAiVGVzdCAxIC0gMiIsICAgIlRlc3QgMVxuLSAzIiwgICdUZXN0IFxuXHRcclxzJyBdLAogICAgICAgICAgICBbICJUZXN0IDIgXG4tIDEiLCAiVGVcbnN0IDIgLSAyIiwgIlRlc3QgMiAtIDNcbiIsICcnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAobmV3bGluZSBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdDb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ0lTTy04ODU5LTEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3VyY2VGaWxlICAgID0+ICdJbXBvcnRFeHBvcnRGb3JtYXRDU1YwMDItT3Blbk9mZmljZS1Db2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzZdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAiXG5UZXN0IDEgLSAxIiwgIlRlc3QgMSAtIDIiLCAgICJUZXN0IDFcbi0gMyIsICAnVGVzdCBcblx0XHJccycgXSwKICAgICAgICAgICAgWyAiVGVzdCAyIFxuLSAxIiwgIlRlXG5zdCAyIC0gMiIsICJUZXN0IDIgLSAzXG4iLCAnJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHNwYWNlcyBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAzLU1TRXhjZWwtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbN10sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICcgIFRlc3QgICcsICcgICAgJywgJ1Rlc3QgICcgXSwKICAgICAgICAgICAgWyAnICAgIFRlc3QnLCAnJywgICAgICdUZXN0JyBdLAogICAgICAgICAgICBbICcnLCAgICAgICAgICcnLCAgICAgJyAnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BhY2VzIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1RhYnVsYXRvcicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ0lTTy04ODU5LTEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3VyY2VGaWxlICAgID0+ICdJbXBvcnRFeHBvcnRGb3JtYXRDU1YwMDMtTVNFeGNlbC1UYWJ1bGF0b3IuY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1s3XSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJyAgVGVzdCAgJywgJyAgICAnLCAnVGVzdCAgJyBdLAogICAgICAgICAgICBbICcgICAgVGVzdCcsICcnLCAgICAgJ1Rlc3QnIF0sCiAgICAgICAgICAgIFsgJycsICAgICAgICAgJycsICAgICAnICcgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChzcGFjZXMgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnU2VtaWNvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwMy1PcGVuT2ZmaWNlLVNlbWljb2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzddLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnICBUZXN0ICAnLCAnICAgICcsICdUZXN0ICAnIF0sCiAgICAgICAgICAgIFsgJyAgICBUZXN0JywgJycsICAgICAnVGVzdCcgXSwKICAgICAgICAgICAgWyAnJywgICAgICAgICAnJywgICAgICcgJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHNwYWNlcyBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdUYWJ1bGF0b3InLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDAzLU9wZW5PZmZpY2UtVGFidWxhdG9yLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbN10sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICcgIFRlc3QgICcsICcgICAgJywgJ1Rlc3QgICcgXSwKICAgICAgICAgICAgWyAnICAgIFRlc3QnLCAnJywgICAgICdUZXN0JyBdLAogICAgICAgICAgICBbICcnLCAgICAgICAgICcnLCAgICAgJyAnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BhY2VzIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0NvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwMy1PcGVuT2ZmaWNlLUNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbN10sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICcgIFRlc3QgICcsICcgICAgJywgJ1Rlc3QgICcgXSwKICAgICAgICAgICAgWyAnICAgIFRlc3QnLCAnJywgICAgICdUZXN0JyBdLAogICAgICAgICAgICBbICcnLCAgICAgICAgICcnLCAgICAgJyAnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnU2VtaWNvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwNC1NU0V4Y2VsLVNlbWljb2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzhdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnVGVzdDs6X8KwXiEiwqckJSYvKCk9P8K0YCorVGVzdCcsICc+PEB+XCd9e1tdXFwnIF0sCiAgICAgICAgICAgIFsgJyIiOzs6Oi4uLS1fXyMjJywgICAgICAgICAgICAgICAgICAnJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1RhYnVsYXRvcicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ0lTTy04ODU5LTEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3VyY2VGaWxlICAgID0+ICdJbXBvcnRFeHBvcnRGb3JtYXRDU1YwMDQtTVNFeGNlbC1UYWJ1bGF0b3IuY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1s4XSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJ1Rlc3Q7Ol/CsF4hIsKnJCUmLygpPT/CtGAqK1Rlc3QnLCAnPjxAflwnfXtbXVxcJyBdLAogICAgICAgICAgICBbICciIjs7OjouLi0tX18jIycsICAgICAgICAgICAgICAgICAgJycgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChzcGVjaWFsIGNoYXJhY3RlciBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDA0LU9wZW5PZmZpY2UtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbOF0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICdUZXN0OzpfwrBeISLCpyQlJi8oKT0/wrRgKitUZXN0JywgJz48QH5cJ317W11cXCcgXSwKICAgICAgICAgICAgWyAnIiI7Ozo6Li4tLV9fIyMnLCAgICAgICAgICAgICAgICAgICcnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwNC1PcGVuT2ZmaWNlLVRhYnVsYXRvci5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzhdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnVGVzdDs6X8KwXiEiwqckJSYvKCk9P8K0YCorVGVzdCcsICc+PEB+XCd9e1tdXFwnIF0sCiAgICAgICAgICAgIFsgJyIiOzs6Oi4uLS1fXyMjJywgICAgICAgICAgICAgICAgICAnJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0NvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwNC1PcGVuT2ZmaWNlLUNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbOF0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICdUZXN0OzpfwrBeISLCpyQlJi8oKT0/wrRgKitUZXN0JywgJz48QH5cJ317W11cXCcgXSwKICAgICAgICAgICAgWyAnIiI7Ozo6Li4tLV9fIyMnLCAgICAgICAgICAgICAgICAgICcnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoSVNPLTg4NTkgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnU2VtaWNvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwNS1NU0V4Y2VsLVNlbWljb2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzldLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnw7zDtsOkw58nLCAnw5zDlsOEJyBdLAogICAgICAgICAgICBbICfDn8Okw7bDvCcsICfDhMOWw5wnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoSVNPLTg4NTkgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwNS1NU0V4Y2VsLVRhYnVsYXRvci5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzldLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnw7zDtsOkw58nLCAnw5zDlsOEJyBdLAogICAgICAgICAgICBbICfDn8Okw7bDvCcsICfDhMOWw5wnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoSVNPLTg4NTkgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnU2VtaWNvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwNS1PcGVuT2ZmaWNlLVNlbWljb2xvbi5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzldLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnw7zDtsOkw58nLCAnw5zDlsOEJyBdLAogICAgICAgICAgICBbICfDn8Okw7bDvCcsICfDhMOWw5wnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoSVNPLTg4NTkgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwNS1PcGVuT2ZmaWNlLVRhYnVsYXRvci5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzldLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnw7zDtsOkw58nLCAnw5zDlsOEJyBdLAogICAgICAgICAgICBbICfDn8Okw7bDvCcsICfDhMOWw5wnIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoSVNPLTg4NTkgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnQ29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDA1LU9wZW5PZmZpY2UtQ29sb24uY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1s5XSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJ8O8w7bDpMOfJywgJ8Ocw5bDhCcgXSwKICAgICAgICAgICAgWyAnw5/DpMO2w7wnLCAnw4TDlsOcJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKFVURi04IGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDA2LU9wZW5PZmZpY2UtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMTBdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnyqkgyqwgyq4nLCAgICAgJyDKoSDLpCDOjCAnIF0sCiAgICAgICAgICAgIFsgJyAgzpcgz5cgz6AgICcsICfOhiDOmyDOnicgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChVVEYtOCBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdUYWJ1bGF0b3InLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwNi1PcGVuT2ZmaWNlLVRhYnVsYXRvci5jc3YnLAogICAgICAgICAgICBJbXBvcnREYXRhR2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzEwXSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJ8qpIMqsIMquJywgICAgICcgyqEgy6QgzowgJyBdLAogICAgICAgICAgICBbICcgIM6XIM+XIM+gICAnLCAnzoYgzpsgzp4nIF0sCiAgICAgICAgXSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoVVRGLTggY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUltcG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnQ29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvdXJjZUZpbGUgICAgPT4gJ0ltcG9ydEV4cG9ydEZvcm1hdENTVjAwNi1PcGVuT2ZmaWNlLUNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMTBdLAogICAgICAgICAgICAgICAgU291cmNlQ29udGVudCA9PiAnU291cmNlRmlsZScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VJbXBvcnREYXRhID0+IFsKICAgICAgICAgICAgWyAnyqkgyqwgyq4nLCAgICAgJyDKoSDLpCDOjCAnIF0sCiAgICAgICAgICAgIFsgJyAgzpcgz5cgz6AgICcsICfOhiDOmyDOnicgXSwKICAgICAgICBdLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayB0aGUgcGFyc2VkIGNvbnRlbnQpCiAgICB7CiAgICAgICAgU291cmNlSW1wb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU291cmNlRmlsZSAgICA9PiAnSW1wb3J0RXhwb3J0Rm9ybWF0Q1NWMDA3LU9wZW5PZmZpY2UtU2VtaWNvbG9uLmNzdicsCiAgICAgICAgICAgIEltcG9ydERhdGFHZXQgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbNV0sCiAgICAgICAgICAgICAgICBTb3VyY2VDb250ZW50ID0+ICdTb3VyY2VGaWxlJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZUltcG9ydERhdGEgPT4gWwogICAgICAgICAgICBbICdSb3cxLUNvbDEnLCAnUm93MS1Db2wyJywgICdSb3cxLUNvbDMnIF0sCiAgICAgICAgICAgIFsgJ1JvdzItQ29sMScsICdSb3cyLUNvbDInLCAgJ1JvdzItQ29sMycgXSwKICAgICAgICAgICAgWyAnUm93My1Db2wxJywgJzBSb3czLUNvbDInLCAnUm93My1Db2wzJyBdLAogICAgICAgIF0sCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGNoZWNrIHRoZSBwYXJzZWQgY29udGVudCkKICAgIHsKICAgICAgICBTb3VyY2VJbXBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ0lTTy04ODU5LTEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3VyY2VGaWxlICAgID0+ICdJbXBvcnRFeHBvcnRGb3JtYXRDU1YwMDgtT3Blbk9mZmljZS1TZW1pY29sb24uY3N2JywKICAgICAgICAgICAgSW1wb3J0RGF0YUdldCA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1s1XSwKICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRlbnQgPT4gJ1NvdXJjZUZpbGUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlSW1wb3J0RGF0YSA9PiBbCiAgICAgICAgICAgIFsgJ1JvdzEtQ29sMScsICdSb3cxLUNvbDInLCAgJ1JvdzEtQ29sMycgXSwKICAgICAgICAgICAgWyAnUm93Mi1Db2wxJywgJzBSb3cyLUNvbDInLCAnUm93Mi1Db2wzJyBdLAogICAgICAgICAgICBbICdSb3czLUNvbDEnLCAnUm93My1Db2wyJywgICdSb3czLUNvbDMnIF0sCiAgICAgICAgXSwKICAgIH0sCgpdOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHJ1biBnZW5lcmFsIEltcG9ydERhdGFHZXQgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKVEVTVDoKZm9yIG15ICRUZXN0ICggQHskSW1wb3J0RGF0YVRlc3RzfSApIHsKCiAgICAjIGNoZWNrIFNvdXJjZUltcG9ydERhdGEgYXR0cmlidXRlCiAgICBpZiAoICEkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9IHx8IHJlZiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9IG5lICdIQVNIJyApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IE5vIFNvdXJjZUltcG9ydERhdGEgZm91bmQgZm9yIHRoaXMgdGVzdC4iCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBURVNUOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgSW1wb3J0RGF0YUdldAogICAgaWYgKCAhJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e0ltcG9ydERhdGFHZXR9ICkgewogICAgICAgICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntJbXBvcnREYXRhR2V0fSA9IHt9OwogICAgfQoKICAgICMgc2V0IHNvdXJjZSBjb250ZW50CiAgICBpZiAoCiAgICAgICAgJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e1NvdXJjZUZpbGV9CiAgICAgICAgJiYgJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e0ltcG9ydERhdGFHZXR9LT57U291cmNlQ29udGVudH0KICAgICAgICAmJiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57SW1wb3J0RGF0YUdldH0tPntTb3VyY2VDb250ZW50fSBlcSAnU291cmNlRmlsZScKICAgICAgICApCiAgICB7CgogICAgICAgIG15ICRTb3VyY2VGaWxlID0gJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e1NvdXJjZUZpbGV9OwoKICAgICAgICAjIHJlYWQgc291cmNlIGZpbGUKICAgICAgICBteSAkU291cmNlQ29udGVudCA9ICRNYWluT2JqZWN0LT5GaWxlUmVhZCgKICAgICAgICAgICAgTG9jYXRpb24gPT4gJFNlbGYtPntIb21lfSAuICcvc2NyaXB0cy90ZXN0L3NhbXBsZS9JbXBvcnRFeHBvcnQvJyAuICRTb3VyY2VGaWxlLAogICAgICAgICAgICBSZXN1bHQgICA9PiAnU0NBTEFSJywKICAgICAgICAgICAgTW9kZSAgICAgPT4gJ2Jpbm1vZGUnLAogICAgICAgICk7CgogICAgICAgICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntJbXBvcnREYXRhR2V0fS0+e1NvdXJjZUNvbnRlbnR9ID0gJFNvdXJjZUNvbnRlbnQ7CiAgICB9CgogICAgIyBzZXQgdGhlIGZvcm1hdCBkYXRhCiAgICBpZiAoCiAgICAgICAgJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e0Zvcm1hdERhdGF9CiAgICAgICAgJiYgcmVmICRUZXN0LT57U291cmNlSW1wb3J0RGF0YX0tPntGb3JtYXREYXRhfSBlcSAnSEFTSCcKICAgICAgICAmJiAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57SW1wb3J0RGF0YUdldH0tPntUZW1wbGF0ZUlEfQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBzYXZlIGZvcm1hdCBkYXRhCiAgICAgICAgJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0RGF0YVNhdmUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e0ltcG9ydERhdGFHZXR9LT57VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gJFRlc3QtPntTb3VyY2VJbXBvcnREYXRhfS0+e0Zvcm1hdERhdGF9LAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBpbXBvcnQgZGF0YQogICAgbXkgJEltcG9ydERhdGEgPSAkRm9ybWF0QmFja2VuZE9iamVjdC0+SW1wb3J0RGF0YUdldCgKICAgICAgICAleyAkVGVzdC0+e1NvdXJjZUltcG9ydERhdGF9LT57SW1wb3J0RGF0YUdldH0gfSwKICAgICk7CgogICAgaWYgKCAhJFRlc3QtPntSZWZlcmVuY2VJbXBvcnREYXRhfSApIHsKCiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkSW1wb3J0RGF0YSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSW1wb3J0RGF0YUdldCgpIC0gcmV0dXJuIGZhbHNlIgogICAgICAgICk7CgogICAgICAgIG5leHQgVEVTVDsKICAgIH0KCiAgICBpZiAoIHJlZiAkSW1wb3J0RGF0YSBuZSAnQVJSQVknICkgewoKICAgICAgICAjIGNoZWNrIGFycmF5IHJlZmVyZW5jZQogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJbXBvcnREYXRhR2V0KCkgLSByZXR1cm4gdmFsdWUgaXMgYW4gYXJyYXkgcmVmZXJlbmNlIiwKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgIyBjaGVjayBudW1iZXIgb2Ygcm93cwogICAgJFNlbGYtPklzKAogICAgICAgIHNjYWxhciBAeyRJbXBvcnREYXRhfSwKICAgICAgICBzY2FsYXIgQHsgJFRlc3QtPntSZWZlcmVuY2VJbXBvcnREYXRhfSB9LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEltcG9ydERhdGFHZXQoKSAtIHNhbWUgbnVtYmVyIG9mIHJvd3MiLAogICAgKTsKCiAgICAjIGNoZWNrIGNvbnRlbnQgb2YgaW1wb3J0IGRhdGEKICAgIG15ICRDb3VudGVyUm93ID0gMDsKICAgIFJPVzoKICAgIGZvciBteSAkSW1wb3J0Um93ICggQHskSW1wb3J0RGF0YX0gKSB7CgogICAgICAgICMgZXh0cmFjdCByZWZlcmVuY2Ugcm93CiAgICAgICAgbXkgJFJlZmVyZW5jZVJvdyA9ICRUZXN0LT57UmVmZXJlbmNlSW1wb3J0RGF0YX0tPlskQ291bnRlclJvd107CgogICAgICAgIGlmICggcmVmICRJbXBvcnRSb3cgbmUgJ0FSUkFZJyB8fCByZWYgJFJlZmVyZW5jZVJvdyBuZSAnQVJSQVknICkgewoKICAgICAgICAgICAgIyBjaGVjayBhcnJheSByZWZlcmVuY2UKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSW1wb3J0RGF0YUdldCgpIC0gaW1wb3J0IHJvdyBhbmQgcmVmZXJlbmNlIHJvdyBtYXRjaGVkIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgVEVTVDsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgbnVtYmVyIG9mIGNvbHVtbnMKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHNjYWxhciBAeyRJbXBvcnRSb3d9LAogICAgICAgICAgICBzY2FsYXIgQHskUmVmZXJlbmNlUm93fSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSW1wb3J0RGF0YUdldCgpIC0gc2FtZSBudW1iZXIgb2YgY29sdW1ucyIsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJENvdW50ZXJDb2x1bW4gPSAwOwogICAgICAgIGZvciBteSAkQ2VsbCAoIEB7JEltcG9ydFJvd30gKSB7CgogICAgICAgICAgICAjIHNldCBjb250ZW50IGlmIHZhbHVlcyBhcmUgdW5kZWYKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkQ2VsbCApIHsKICAgICAgICAgICAgICAgICRDZWxsID0gJ1VOREVGLXVuaXR0ZXN0JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICFkZWZpbmVkICRSZWZlcmVuY2VSb3ctPlskQ291bnRlckNvbHVtbl0gKSB7CiAgICAgICAgICAgICAgICAkUmVmZXJlbmNlUm93LT5bJENvdW50ZXJDb2x1bW5dID0gJ1VOREVGLXVuaXR0ZXN0JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBjZWxsIGRhdGEKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJENlbGwsCiAgICAgICAgICAgICAgICAkUmVmZXJlbmNlUm93LT5bJENvdW50ZXJDb2x1bW5dLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSW1wb3J0RGF0YUdldCgpICIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQ291bnRlckNvbHVtbisrOwogICAgICAgIH0KCiAgICAgICAgJENvdW50ZXJSb3crKzsKICAgIH0KfQpjb250aW51ZSB7CiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBkZWZpbmUgZ2VuZXJhbCBFeHBvcnREYXRhU2F2ZSB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkRXhwb3J0RGF0YVRlc3RzID0gWwoKICAgICMgRXhwb3J0RGF0YVNhdmUgZG9lc24ndCBjb250YWlucyBhbGwgZGF0YSAoY2hlY2sgcmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbJ0R1bW15J10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBFeHBvcnREYXRhU2F2ZSBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlEc1syMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBFeHBvcnREYXRhU2F2ZSBkb2Vzbid0IGNvbnRhaW5zIGFsbCBkYXRhIChjaGVjayByZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMF0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsnRHVtbXknXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGV4cG9ydCBkYXRhIHJvdyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMF0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+ICcnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgZXhwb3J0IGRhdGEgcm93IG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIwXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4ge30sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBubyBleGlzdGluZyB0ZW1wbGF0ZSBpZCBpcyBnaXZlbiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1stMV0gKyAxLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbJ0R1bW15J10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBubyBjb2x1bW4gU2VwYXJhdG9yIGFuZCBjaGFyc2V0IGFyZSBnaXZlbiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMV0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsnRHVtbXknXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIG5vIGNvbHVtbiBTZXBhcmF0b3IgaXMgZ2l2ZW4gKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDaGFyc2V0ID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIxXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWydEdW1teSddLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgbm8gY2hhcnNldCBpcyBnaXZlbiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnRHVtbXknLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMV0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsnRHVtbXknXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGludmFsaWQgY29sdW1uIFNlcGFyYXRvciBpcyBnaXZlbiAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnRHVtbXknLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIxXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWydEdW1teSddLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgZXhwb3J0IGRhdGEgYXJlIG9uZSBjZWxscyB3aXRoIGVtcHR5IHN0cmluZ3MgKG9uZSBlbXB0eSBjZWxsIG11c3QgYmUgcmV0dXJuZWQpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIyXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWycnXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiAnIiInLAogICAgfSwKCiAgICAjIGV4cG9ydCBkYXRhIGFyZSBvbmUgY2VsbHMgd2l0aCBlbXB0eSBzdHJpbmdzIChvbmUgZW1wdHkgY2VsbCBtdXN0IGJlIHJldHVybmVkKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMl0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsnJ10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyIiJywKICAgIH0sCgogICAgIyBleHBvcnQgZGF0YSBhcmUgb25lIGNlbGxzIHdpdGggZW1wdHkgc3RyaW5ncyAob25lIGVtcHR5IGNlbGwgbXVzdCBiZSByZXR1cm5lZCkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0NvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMl0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsnJ10sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyIiJywKICAgIH0sCgogICAgIyBleHBvcnQgZGF0YSBhcmUgb25lIGNlbGxzIHdpdGggZW1wdHkgc3RyaW5ncyAob25lIGVtcHR5IGNlbGwgbXVzdCBiZSByZXR1cm5lZCkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0RvdCcsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjJdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbJyddLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICciIicsCiAgICB9LAoKICAgICMgZXhwb3J0IGRhdGEgYXJlIHRocmVlIGNlbGxzIHdpdGggZW1wdHkgc3RyaW5ncyAodGhyZWUgZW1wdHkgY2VsbHMgbXVzdCBiZSByZXR1cm5lZCkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjJdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbICcnLCAnJywgJycgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiAnIiI7IiI7IiInLAogICAgfSwKCiAgICAjIGV4cG9ydCBkYXRhIGFyZSB0aHJlZSBjZWxscyB3aXRoIGVtcHR5IHN0cmluZ3MgKHRocmVlIGVtcHR5IGNlbGxzIG11c3QgYmUgcmV0dXJuZWQpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdUYWJ1bGF0b3InLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIyXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnJywgJycsICcnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gIlwiXCJcdFwiXCJcdFwiXCIiLAogICAgfSwKCiAgICAjIGV4cG9ydCBkYXRhIGFyZSB0aHJlZSBjZWxscyB3aXRoIGVtcHR5IHN0cmluZ3MgKHRocmVlIGVtcHR5IGNlbGxzIG11c3QgYmUgcmV0dXJuZWQpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdDb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjJdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbICcnLCAnJywgJycgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiAnIiI6IiI6IiInLAogICAgfSwKCiAgICAjIGV4cG9ydCBkYXRhIGFyZSB0aHJlZSBjZWxscyB3aXRoIGVtcHR5IHN0cmluZ3MgKHRocmVlIGVtcHR5IGNlbGxzIG11c3QgYmUgcmV0dXJuZWQpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdEb3QnLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIyXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnJywgJycsICcnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyIiLiIiLiIiJywKICAgIH0sCgogICAgIyBleHBvcnQgZGF0YSBhcmUgdGhyZWUgY2VsbHMgd2l0aCBlbXB0eSBhbmQgdW5kZWYgY29udGVudCAodGhyZWUgZW1wdHkgY2VsbHMgbXVzdCBiZSByZXR1cm5lZCkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjJdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbIHVuZGVmLCAnJywgdW5kZWYgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiAnOyIiOycsCiAgICB9LAoKICAgICMgZXhwb3J0IGRhdGEgYXJlIHRocmVlIGNlbGxzIHdpdGggZW1wdHkgYW5kIHVuZGVmIGNvbnRlbnQgKHRocmVlIGVtcHR5IGNlbGxzIG11c3QgYmUgcmV0dXJuZWQpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdUYWJ1bGF0b3InLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIyXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyB1bmRlZiwgJycsIHVuZGVmIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gIlx0XCJcIlx0IiwKICAgIH0sCgogICAgIyBleHBvcnQgZGF0YSBhcmUgdGhyZWUgY2VsbHMgd2l0aCBlbXB0eSBhbmQgdW5kZWYgY29udGVudCAodGhyZWUgZW1wdHkgY2VsbHMgbXVzdCBiZSByZXR1cm5lZCkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0NvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syMl0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgdW5kZWYsICcnLCB1bmRlZiBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICc6IiI6JywKICAgIH0sCgogICAgIyBleHBvcnQgZGF0YSBhcmUgdGhyZWUgY2VsbHMgd2l0aCBlbXB0eSBhbmQgdW5kZWYgY29udGVudCAodGhyZWUgZW1wdHkgY2VsbHMgbXVzdCBiZSByZXR1cm5lZCkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0RvdCcsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjJdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbIHVuZGVmLCAnJywgdW5kZWYgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiAnLiIiLicsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGNoZWNrIHRoZSBwYXJzZWQgY29udGVudCkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ0lTTy04ODU5LTEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syM10sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgJ1JvdzEtQ29sMScsICdSb3cxLUNvbDInLCAnUm93MS1Db2wzJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICciUm93MS1Db2wxIjsiUm93MS1Db2wyIjsiUm93MS1Db2wzIicsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGNoZWNrIHRoZSBwYXJzZWQgY29udGVudCkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0NvbW1hJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnUm93MS1Db2wxJywgJ1JvdzEtQ29sMicsICdSb3cxLUNvbDMnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyJSb3cxLUNvbDEiLCJSb3cxLUNvbDIiLCJSb3cxLUNvbDMiJywKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoY2hlY2sgdGhlIHBhcnNlZCBjb250ZW50KQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzIzXSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnUm93MS1Db2wxJywgJ1JvdzEtQ29sMicsICdSb3cxLUNvbDMnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gIlwiUm93MS1Db2wxXCJcdFwiUm93MS1Db2wyXCJcdFwiUm93MS1Db2wzXCIiLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChjaGVjayB0aGUgcGFyc2VkIGNvbnRlbnQpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdDb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ0lTTy04ODU5LTEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syM10sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgJ1JvdzEtQ29sMScsICdSb3cxLUNvbDInLCAnUm93MS1Db2wzJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICciUm93MS1Db2wxIjoiUm93MS1Db2wyIjoiUm93MS1Db2wzIicsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKGNoZWNrIHRoZSBwYXJzZWQgY29udGVudCkKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0RvdCcsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ0lTTy04ODU5LTEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syM10sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgJ1JvdzEtQ29sMScsICdSb3cxLUNvbDInLCAnUm93MS1Db2wzJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICciUm93MS1Db2wxIi4iUm93MS1Db2wyIi4iUm93MS1Db2wzIicsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKG5ld2xpbmUgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnU2VtaWNvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI0XSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAiXG5UZXN0IDEiLCAiVGVzdCBcbiAyIiwgJ1Rlc3QgMyBcblx0XHJccycsICJUZXN0IDRcbiIgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiBxcXsiXG5UZXN0IDEiOyJUZXN0IFxuIDIiOyJUZXN0IDMgXFxuXFx0XFxyXFxzIjsiVGVzdCA0XG4ifSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAobmV3bGluZSBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdUYWJ1bGF0b3InLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjRdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbICJcblRlc3QgMSIsICJUZXN0IFxuIDIiLCAnVGVzdCAzIFxuXHRcclxzJywgIlRlc3QgNFxuIiBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+CiAgICAgICAgICAgIHFxeyJcblRlc3QgMSJcdCJUZXN0IFxuIDIiXHQiVGVzdCAzIFxcblxcdFxcclxccyJcdCJUZXN0IDRcbiJ9LAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChuZXdsaW5lIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0NvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI0XSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAiXG5UZXN0IDEiLCAiVGVzdCBcbiAyIiwgJ1Rlc3QgMyBcblx0XHJccycsICJUZXN0IDRcbiIgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiBxcXsiXG5UZXN0IDEiOiJUZXN0IFxuIDIiOiJUZXN0IDMgXFxuXFx0XFxyXFxzIjoiVGVzdCA0XG4ifSwKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAobmV3bGluZSBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdEb3QnLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjRdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbICJcblRlc3QgMSIsICJUZXN0IFxuIDIiLCAnVGVzdCAzIFxuXHRcclxzJywgIlRlc3QgNFxuIiBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+IHFxeyJcblRlc3QgMSIuIlRlc3QgXG4gMiIuIlRlc3QgMyBcXG5cXHRcXHJcXHMiLiJUZXN0IDRcbiJ9LAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChzcGFjZXMgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnU2VtaWNvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI0XSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnICBUZXN0ICAnLCAnICAgICcsICdUZXN0ICAnLCAnICAgIFRlc3QnLCAnJywgJ1Rlc3QnLCAnJywgJyAnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyIgIFRlc3QgICI7IiAgICAiOyJUZXN0ICAiOyIgICAgVGVzdCI7IiI7IlRlc3QiOyIiOyIgIicsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHNwYWNlcyBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdUYWJ1bGF0b3InLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjRdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbICcgIFRlc3QgICcsICcgICAgJywgJ1Rlc3QgICcsICcgICAgVGVzdCcsICcnLCAnVGVzdCcsICcnLCAnICcgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PgogICAgICAgICAgICAiXCIgIFRlc3QgIFwiXHRcIiAgICBcIlx0XCJUZXN0ICBcIlx0XCIgICAgVGVzdFwiXHRcIlwiXHRcIlRlc3RcIlx0XCJcIlx0XCIgXCIiLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChzcGFjZXMgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnQ29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjRdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbICcgIFRlc3QgICcsICcgICAgJywgJ1Rlc3QgICcsICcgICAgVGVzdCcsICcnLCAnVGVzdCcsICcnLCAnICcgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiAnIiAgVGVzdCAgIjoiICAgICI6IlRlc3QgICI6IiAgICBUZXN0IjoiIjoiVGVzdCI6IiI6IiAiJywKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BhY2VzIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0RvdCcsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ0lTTy04ODU5LTEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNF0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgJyAgVGVzdCAgJywgJyAgICAnLCAnVGVzdCAgJywgJyAgICBUZXN0JywgJycsICdUZXN0JywgJycsICcgJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICciICBUZXN0ICAiLiIgICAgIi4iVGVzdCAgIi4iICAgIFRlc3QiLiIiLiJUZXN0Ii4iIi4iICInLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChzcGVjaWFsIGNoYXJhY3RlciBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdTZW1pY29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3Q7Ol9eISIkJSYvKCk9P2AqK1Rlc3QnLAogICAgICAgICAgICAgICAgICAgICc+PEB+XCd9e1tdXFwnLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgICAgICciIjs7OjouLi0tX18jIycKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PgogICAgICAgICAgICAnIlRlc3Q7Ol9eISIiJCUmLygpPT9gKitUZXN0IjsiPjxAflwnfXtbXVwiOyIiOyIiIiIiOzs6Oi4uLS1fXyMjIicKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnSVNPLTg4NTktMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI1XSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWwogICAgICAgICAgICAgICAgICAgICdUZXN0OzpfXiEiJCUmLygpPT9gKitUZXN0JywKICAgICAgICAgICAgICAgICAgICAnPjxAflwnfXtbXVxcJywKICAgICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICAgICAnIiI7Ozo6Li4tLV9fIyMnCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4KICAgICAgICAgICAgJyJUZXN0OzpfXiEiIiQlJi8oKT0/YCorVGVzdCInCiAgICAgICAgICAgIC4gIlx0IgogICAgICAgICAgICAuICciPjxAflwnfXtbXVxcIicKICAgICAgICAgICAgLiAiXHQiCiAgICAgICAgICAgIC4gJyIiJwogICAgICAgICAgICAuICJcdCIKICAgICAgICAgICAgLiAnIiIiIiI7Ozo6Li4tLV9fIyMiJywKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnQ29sb24nLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdJU08tODg1OS0xJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjVdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3Q7Ol9eISIkJSYvKCk9P2AqK1Rlc3QnLAogICAgICAgICAgICAgICAgICAgICc+PEB+XCd9e1tdXFwnLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgICAgICciIjs7OjouLi0tX18jIycKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PgogICAgICAgICAgICAnIlRlc3Q7Ol9eISIiJCUmLygpPT9gKitUZXN0IjoiPjxAflwnfXtbXVwiOiIiOiIiIiIiOzs6Oi4uLS1fXyMjIicsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0RvdCcsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ0lTTy04ODU5LTEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNV0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsKICAgICAgICAgICAgICAgICAgICAnVGVzdDs6X14hIiQlJi8oKT0/YCorVGVzdCcsCiAgICAgICAgICAgICAgICAgICAgJz48QH5cJ317W11cXCcsCiAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgICAgJyIiOzs6Oi4uLS1fXyMjJwogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+CiAgICAgICAgICAgICciVGVzdDs6X14hIiIkJSYvKCk9P2AqK1Rlc3QiLiI+PEB+XCd9e1tdXFwiLiIiLiIiIiIiOzs6Oi4uLS1fXyMjIicsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKFVURi04IGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ1NlbWljb2xvbicsCiAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgPT4gJ1VURi04JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwb3J0RGF0YVNhdmUgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAkVGVtcGxhdGVJRHNbMjZdLAogICAgICAgICAgICAgICAgRXhwb3J0RGF0YVJvdyA9PiBbICcg0aog0awg0bInLCAn0a8g0bQg0b8nLCAn0oIg0oog0pYgJyBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGVzdGluYXRpb25Db250ZW50ID0+ICciINGqINGsINGyIjsi0a8g0bQg0b8iOyLSgiDSiiDSliAiJywKICAgIH0sCgogICAgIyBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBnaXZlbiAoVVRGLTggY2hlY2tzKQogICAgewogICAgICAgIFNvdXJjZUV4cG9ydERhdGEgPT4gewogICAgICAgICAgICBGb3JtYXREYXRhID0+IHsKICAgICAgICAgICAgICAgIENvbHVtblNlcGFyYXRvciA9PiAnVGFidWxhdG9yJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNl0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgJyDRqiDRrCDRsicsICfRryDRtCDRvycsICfSgiDSiiDSliAnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gIlwiINGqINGsINGyXCJcdFwi0a8g0bQg0b9cIlx0XCLSgiDSiiDSliBcIiIsCiAgICB9LAoKICAgICMgYWxsIHJlcXVpcmVkIHZhbHVlcyBhcmUgZ2l2ZW4gKFVURi04IGNoZWNrcykKICAgIHsKICAgICAgICBTb3VyY2VFeHBvcnREYXRhID0+IHsKICAgICAgICAgICAgRm9ybWF0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb2x1bW5TZXBhcmF0b3IgPT4gJ0NvbG9uJywKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICA9PiAnVVRGLTgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHBvcnREYXRhU2F2ZSA9PiB7CiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgID0+ICRUZW1wbGF0ZUlEc1syNl0sCiAgICAgICAgICAgICAgICBFeHBvcnREYXRhUm93ID0+IFsgJyDRqiDRrCDRsicsICfRryDRtCDRvycsICfSgiDSiiDSliAnIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnQgPT4gJyIg0aog0awg0bIiOiLRryDRtCDRvyI6ItKCINKKINKWICInLAogICAgfSwKCiAgICAjIGFsbCByZXF1aXJlZCB2YWx1ZXMgYXJlIGdpdmVuIChVVEYtOCBjaGVja3MpCiAgICB7CiAgICAgICAgU291cmNlRXhwb3J0RGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1hdERhdGEgPT4gewogICAgICAgICAgICAgICAgQ29sdW1uU2VwYXJhdG9yID0+ICdEb3QnLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgID0+ICdVVEYtOCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cG9ydERhdGFTYXZlID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgPT4gJFRlbXBsYXRlSURzWzI2XSwKICAgICAgICAgICAgICAgIEV4cG9ydERhdGFSb3cgPT4gWyAnINGqINGsINGyJywgJ9GvING0ING/JywgJ9KCINKKINKWICcgXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudCA9PiAnIiDRqiDRrCDRsiIuItGvING0ING/Ii4i0oIg0oog0pYgIicsCiAgICB9LApdOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHJ1biBnZW5lcmFsIEV4cG9ydERhdGFTYXZlIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKClRFU1Q6CmZvciBteSAkVGVzdCAoIEB7JEV4cG9ydERhdGFUZXN0c30gKSB7CgogICAgIyBjaGVjayBTb3VyY2VFeHBvcnREYXRhIGF0dHJpYnV0ZQogICAgaWYgKCAhJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfSB8fCByZWYgJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfSBuZSAnSEFTSCcgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBObyBTb3VyY2VFeHBvcnREYXRhIGZvdW5kIGZvciB0aGlzIHRlc3QuIgogICAgICAgICk7CgogICAgICAgIG5leHQgVEVTVDsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IEV4cG9ydERhdGFTYXZlCiAgICBpZiAoICEkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57RXhwb3J0RGF0YVNhdmV9ICkgewogICAgICAgICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntFeHBvcnREYXRhU2F2ZX0gPSB7fTsKICAgIH0KCiAgICAjIHNldCB0aGUgZm9ybWF0IGRhdGEKICAgIGlmICgKICAgICAgICAkVGVzdC0+e1NvdXJjZUV4cG9ydERhdGF9LT57Rm9ybWF0RGF0YX0KICAgICAgICAmJiByZWYgJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e0Zvcm1hdERhdGF9IGVxICdIQVNIJwogICAgICAgICYmICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntFeHBvcnREYXRhU2F2ZX0tPntUZW1wbGF0ZUlEfQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBzYXZlIGZvcm1hdCBkYXRhCiAgICAgICAgJEltcG9ydEV4cG9ydE9iamVjdC0+Rm9ybWF0RGF0YVNhdmUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlc3QtPntTb3VyY2VFeHBvcnREYXRhfS0+e0V4cG9ydERhdGFTYXZlfS0+e1RlbXBsYXRlSUR9LAogICAgICAgICAgICBGb3JtYXREYXRhID0+ICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntGb3JtYXREYXRhfSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZXhwb3J0IGRhdGEgcm93CiAgICBteSAkRXhwb3J0U3RyaW5nID0gJEZvcm1hdEJhY2tlbmRPYmplY3QtPkV4cG9ydERhdGFTYXZlKAogICAgICAgICV7ICRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntFeHBvcnREYXRhU2F2ZX0gfSwKICAgICk7CgogICAgaWYgKCAhZGVmaW5lZCAkVGVzdC0+e1JlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudH0gKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAhZGVmaW5lZCAkRXhwb3J0U3RyaW5nLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBFeHBvcnREYXRhU2F2ZSgpIC0gcmV0dXJuIGZhbHNlIgogICAgICAgICk7CgogICAgICAgIG5leHQgVEVTVDsKICAgIH0KCiAgICBpZiAoICFkZWZpbmVkICRFeHBvcnRTdHJpbmcgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAhZGVmaW5lZCAkVGVzdC0+e1JlZmVyZW5jZURlc3RpbmF0aW9uQ29udGVudH0sCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEV4cG9ydERhdGFTYXZlKCkgLSByZXR1cm4gZmFsc2UiCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBURVNUOwogICAgfQoKICAgIGlmICggISRUZXN0LT57U291cmNlRXhwb3J0RGF0YX0tPntFeHBvcnREYXRhU2F2ZX0tPntFeHBvcnREYXRhUm93fSApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGRlZmluZWQgJEV4cG9ydFN0cmluZywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogRXhwb3J0RGF0YVNhdmUoKSAtIHJldHVybiBmYWxzZSIKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgIyBjaGVjayB0aGUgZXhwb3J0IHN0cmluZwogICAgJFNlbGYtPklzKAogICAgICAgICRFeHBvcnRTdHJpbmcsCiAgICAgICAgJFRlc3QtPntSZWZlcmVuY2VEZXN0aW5hdGlvbkNvbnRlbnR9LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEV4cG9ydERhdGFTYXZlKCkiLAogICAgKTsKfQpjb250aW51ZSB7CiAgICAkVGVzdENvdW50Kys7Cn0KCiMgY2xlYW51cCBpcyBkb25lIGJ5IFJlc3RvcmVEYXRhYmFzZS4KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwp1c2UgRmlsZTo6UGF0aCBxdyhybXRyZWUpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbW1hbmRPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpBZG1pbjo6SVRTTTo6SW1wb3J0RXhwb3J0OjpJbXBvcnQnKTsKbXkgJEltcG9ydEV4cG9ydE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgdGVzdCBjb21tYW5kIHdpdGhvdXQgLS10ZW1wbGF0ZS1udW1iZXIgb3B0aW9uCm15ICRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAxLAogICAgIk5vIC0tdGVtcGxhdGUtbnVtYmVyICAtIGV4aXQgY29kZSIsCik7CgojIGFkZCB0ZXN0IHRlbXBsYXRlCm15ICRUZW1wbGF0ZUlEID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVBZGQoCiAgICBPYmplY3QgID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICBGb3JtYXQgID0+ICdDU1YnLAogICAgTmFtZSAgICA9PiAnVGVtcGxhdGUnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIENvbW1lbnQgPT4gJ0NvbW1lbnQnLAogICAgVXNlcklEICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGVtcGxhdGVJRCwKICAgICJJbXBvcnQvRXhwb3J0IHRlbXBsYXRlIGlzIGNyZWF0ZWQgLSAkVGVtcGxhdGVJRCIsCik7CgojIGdldCAnSGFyZHdhcmUnIGNhdGFsb2cgY2xhc3MgSUQKbXkgJENvbmZpZ0l0ZW1EYXRhUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgTmFtZSAgPT4gJ0hhcmR3YXJlJywKKTsKbXkgJEhhcmR3YXJlQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1EYXRhUmVmLT57SXRlbUlEfTsKCiMgZ2V0IG9iamVjdCBkYXRhIGZvciB0ZXN0IHRlbXBsYXRlCm15ICVUZW1wbGF0ZVJlZiA9ICgKICAgICdDbGFzc0lEJyAgPT4gJEhhcmR3YXJlQ29uZmlnSXRlbUlELAogICAgJ0NvdW50TWF4JyA9PiAxMCwKKTsKbXkgJFN1Y2Nlc3MgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3REYXRhU2F2ZSgKICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICBPYmplY3REYXRhID0+IFwlVGVtcGxhdGVSZWYsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIk9iamVjdERhdGEgZm9yIHRlc3QgdGVtcGxhdGUgaXMgYWRkZWQiLAopOwoKIyBhZGQgdGhlIGZvcm1hdCBkYXRhIG9mIHRoZSB0ZXN0IHRlbXBsYXRlCm15ICVGb3JtYXREYXRhID0gKAogICAgQ2hhcnNldCAgICAgICAgICAgICAgPT4gJ1VURi04JywKICAgIENvbHVtblNlcGFyYXRvciAgICAgID0+ICdDb21tYScsCiAgICBJbmNsdWRlQ29sdW1uSGVhZGVycyA9PiAxLAopOwokU3VjY2VzcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPkZvcm1hdERhdGFTYXZlKAogICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgIEZvcm1hdERhdGEgPT4gXCVGb3JtYXREYXRhLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJGb3JtYXREYXRhIGZvciB0ZXN0IHRlbXBsYXRlIGlzIGFkZGVkIiwKKTsKCiMgc2F2ZSB0aGUgc2VhcmNoIGRhdGEgb2YgYSB0ZW1wbGF0ZQpteSAlU2VhcmNoRGF0YSA9ICgKICAgIE5hbWUgPT4gJ1Rlc3RDb25maWdJdGVtKicsCik7CiRTdWNjZXNzID0gJEltcG9ydEV4cG9ydE9iamVjdC0+U2VhcmNoRGF0YVNhdmUoCiAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgU2VhcmNoRGF0YSA9PiBcJVNlYXJjaERhdGEsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgojIGFkZCBtYXBwaW5nIGRhdGEgZm9yIHRlc3QgdGVtcGxhdGUKZm9yIG15ICRPYmplY3REYXRhVmFsdWUgKHF3KCBOYW1lIERlcGxTdGF0ZSBJbmNpU3RhdGUgKSkgewoKICAgIG15ICRNYXBwaW5nSUQgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nQWRkKAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICBteSAlTWFwcGluZ09iamVjdERhdGEgPSAoIEtleSA9PiAkT2JqZWN0RGF0YVZhbHVlICk7CiAgICBteSAkU3VjY2VzcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdPYmplY3REYXRhU2F2ZSgKICAgICAgICBNYXBwaW5nSUQgICAgICAgICA9PiAkTWFwcGluZ0lELAogICAgICAgIE1hcHBpbmdPYmplY3REYXRhID0+IFwlTWFwcGluZ09iamVjdERhdGEsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIk9iamVjdERhdGEgZm9yIHRlc3QgdGVtcGxhdGUgaXMgbWFwcGVkIC0gJE9iamVjdERhdGFWYWx1ZSIsCiAgICApOwp9CgojIG1ha2UgZGlyZWN0b3J5IGZvciBleHBvcnQgZmlsZQpteSAkU291cmNlUGF0aAogICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0hvbWUnKSAuICIvc2NyaXB0cy90ZXN0L3NhbXBsZS9JbXBvcnRFeHBvcnQvVGVtcGxhdGVFeHBvcnQuY3N2IjsKCiMgdGVzdCBjb21tYW5kIHdpdGggd3JvbmcgdGVtcGxhdGUgbnVtYmVyCiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS10ZW1wbGF0ZS1udW1iZXInLCAkSGVscGVyLT5HZXRSYW5kb21JRCgpLCAkU291cmNlUGF0aCAuICdUZW1wbGF0ZUV4cG9ydC5jc3YnICk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAxLAogICAgIkNvbW1hbmQgd2l0aCB3cm9uZyB0ZW1wbGF0ZSBudW1iZXIgLSBleGl0IGNvZGUiLAopOwoKIyB0ZXN0IGNvbW1hbmQgd2l0aG91dCBTb3VyY2UgYXJndW1lbnQKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLXRlbXBsYXRlLW51bWJlcicsICRUZW1wbGF0ZUlEICk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAxLAogICAgIk5vIFNvdXJjZSBhcmd1bWVudCAtIGV4aXQgY29kZSIsCik7CgojIHRlc3QgY29tbWFuZCB3aXRoIC0tdGVtcGxhdGUtbnVtYmVyIG9wdGlvbiBhbmQgU291cmNlIGFyZ3VtZW50CiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS10ZW1wbGF0ZS1udW1iZXInLCAkVGVtcGxhdGVJRCwgJFNvdXJjZVBhdGggKTsKCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDAsCiAgICAiT3B0aW9uIC0gLS10ZW1wbGF0ZS1udW1iZXIgb3B0aW9uIGFuZCBTb3VyY2UgYXJndW1lbnQiLAopOwoKIyBnZXQgY29uZmlnIGl0ZW0gSURzCm15ICRDb25maWdJdGVtSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01Db25maWdJdGVtJyktPkNvbmZpZ0l0ZW1TZWFyY2hFeHRlbmRlZCgKICAgIE5hbWUgPT4gJ1Rlc3RDb25maWdJdGVtKicKKTsKbXkgJE51bUNvbmZpZ0l0ZW1JbXBvcnRlZCA9IHNjYWxhciBAeyRDb25maWdJdGVtSURzfTsKCiMgY2hlY2sgaWYgdGhlIGNvbmZpZyBpdGVtcyBhcmUgaW1wb3J0ZWQKJFNlbGYtPlRydWUoCiAgICAkTnVtQ29uZmlnSXRlbUltcG9ydGVkLAogICAgIlRoZXJlIGFyZSAkTnVtQ29uZmlnSXRlbUltcG9ydGVkIGltcG9ydGVkIGNvbmZpZyBpdGVtcyIsCik7CgojIGNsZWFudXAgaXMgZG9uZSBieSBSZXN0b3JlRGF0YWJhc2UuCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwp1c2UgRmlsZTo6UGF0aCBxdyhta3BhdGggcm10cmVlKTsKCiMgZ2V0IG5lZWRlZCBvYmplY3RzCm15ICRDb21tYW5kT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpBZG1pbjo6SVRTTTo6SW1wb3J0RXhwb3J0OjpFeHBvcnQnKTsKbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7Cm15ICRDb25maWdJdGVtT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKIyB0ZXN0IGNvbW1hbmQgd2l0aG91dCAtLXRlbXBsYXRlLW51bWJlciBvcHRpb24KbXkgJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoKTsKCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDEsCiAgICAiTm8gLS10ZW1wbGF0ZS1udW1iZXIgIC0gZXhpdCBjb2RlIiwKKTsKCiMgZ2V0ICdIYXJkd2FyZScgY2F0YWxvZyBjbGFzcyBJRApteSAkQ29uZmlnSXRlbURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgTmFtZSAgPT4gJ0hhcmR3YXJlJywKKTsKbXkgJEhhcmR3YXJlQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1EYXRhUmVmLT57SXRlbUlEfTsKCiMgZ2V0ICdQcm9kdWN0aW9uJyBkZXBsb3ltZW50IHN0YXRlIElEcwpteSAkUHJvZHVjdGlvbkRlcGxTdGF0ZURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgIE5hbWUgID0+ICdQcm9kdWN0aW9uJywKKTsKbXkgJFByb2R1Y3Rpb25EZXBsU3RhdGVJRCA9ICRQcm9kdWN0aW9uRGVwbFN0YXRlRGF0YVJlZi0+e0l0ZW1JRH07CgpteSBAQ29uZmlnSXRlbUlEczsKCiMgYWRkIHRlc3QgY29uZmlnIGl0ZW1zCmZvciAoIDEgLi4gMTAgKSB7CgogICAgIyBjcmVhdGUgQ29uZmlnSXRlbSBudW1iZXIKICAgIG15ICRDb25maWdJdGVtTnVtYmVyID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1OdW1iZXJDcmVhdGUoCiAgICAgICAgVHlwZSAgICA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0lUU01Db25maWdJdGVtOjpOdW1iZXJHZW5lcmF0b3InKSwKICAgICAgICBDbGFzc0lEID0+ICRIYXJkd2FyZUNvbmZpZ0l0ZW1JRCwKICAgICk7CgogICAgIyBhZGQgdGVzdCBDb25maWdJdGVtCiAgICBteSAkQ29uZmlnSXRlbUlEID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1BZGQoCiAgICAgICAgTnVtYmVyICA9PiAkQ29uZmlnSXRlbU51bWJlciwKICAgICAgICBDbGFzc0lEID0+ICRIYXJkd2FyZUNvbmZpZ0l0ZW1JRCwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRDb25maWdJdGVtSUQsCiAgICAgICAgIkNvbmZpZyBpdGVtIGlzIGNyZWF0ZWQgLSAkQ29uZmlnSXRlbUlEIiwKICAgICk7CgogICAgbXkgJENvbmZpZ0l0ZW1OYW1lID0gJ1Rlc3RDb25maWdJdGVtJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICBteSAkVmVyc2lvbklEICAgICAgPSAkQ29uZmlnSXRlbU9iamVjdC0+VmVyc2lvbkFkZCgKICAgICAgICBOYW1lICAgICAgICAgPT4gJENvbmZpZ0l0ZW1OYW1lLAogICAgICAgIERlZmluaXRpb25JRCA9PiAxLAogICAgICAgIERlcGxTdGF0ZUlEICA9PiAkUHJvZHVjdGlvbkRlcGxTdGF0ZUlELAogICAgICAgIEluY2lTdGF0ZUlEICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVmVyc2lvbklELAogICAgICAgICJWZXJzaW9uIGZvciBjb25maWcgaXRlbSAkQ29uZmlnSXRlbUlEIGlzIGNyZWF0ZWQgLSAkQ29uZmlnSXRlbU5hbWUiLAogICAgKTsKCiAgICBwdXNoIEBDb25maWdJdGVtSURzLCAkQ29uZmlnSXRlbUlEOwp9CgojIGdldCBJbXBvcnRFeHBvcnQgb2JqZWN0Cm15ICRJbXBvcnRFeHBvcnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0Jyk7CgojIGFkZCB0ZXN0IHRlbXBsYXRlCm15ICRUZW1wbGF0ZUlEID0gJEltcG9ydEV4cG9ydE9iamVjdC0+VGVtcGxhdGVBZGQoCiAgICBPYmplY3QgID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICBGb3JtYXQgID0+ICdDU1YnLAogICAgTmFtZSAgICA9PiAnVGVtcGxhdGUnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIENvbW1lbnQgPT4gJ0NvbW1lbnQnLAogICAgVXNlcklEICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGVtcGxhdGVJRCwKICAgICJJbXBvcnQvRXhwb3J0IHRlbXBsYXRlIGlzIGNyZWF0ZWQgLSAkVGVtcGxhdGVJRCIsCik7CgojIGdldCBvYmplY3QgZGF0YSBmb3IgdGVzdCB0ZW1wbGF0ZQpteSAlVGVtcGxhdGVSZWYgPSAoCiAgICAnQ2xhc3NJRCcgID0+ICRIYXJkd2FyZUNvbmZpZ0l0ZW1JRCwKICAgICdDb3VudE1heCcgPT4gMTAsCik7Cm15ICRTdWNjZXNzID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0RGF0YVNhdmUoCiAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgT2JqZWN0RGF0YSA9PiBcJVRlbXBsYXRlUmVmLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJPYmplY3REYXRhIGZvciB0ZXN0IHRlbXBsYXRlIGlzIGFkZGVkIiwKKTsKCiMgYWRkIHRoZSBmb3JtYXQgZGF0YSBvZiB0aGUgdGVzdCB0ZW1wbGF0ZQpteSAlRm9ybWF0RGF0YSA9ICgKICAgIENoYXJzZXQgICAgICAgICAgICAgID0+ICdVVEYtOCcsCiAgICBDb2x1bW5TZXBhcmF0b3IgICAgICA9PiAnQ29tbWEnLAogICAgSW5jbHVkZUNvbHVtbkhlYWRlcnMgPT4gMSwKKTsKJFN1Y2Nlc3MgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5Gb3JtYXREYXRhU2F2ZSgKICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICBGb3JtYXREYXRhID0+IFwlRm9ybWF0RGF0YSwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiRm9ybWF0RGF0YSBmb3IgdGVzdCB0ZW1wbGF0ZSBpcyBhZGRlZCIsCik7CgojIHNhdmUgdGhlIHNlYXJjaCBkYXRhIG9mIGEgdGVtcGxhdGUKbXkgJVNlYXJjaERhdGEgPSAoCiAgICBOYW1lID0+ICdUZXN0Q29uZmlnSXRlbSonLAopOwokU3VjY2VzcyA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlNlYXJjaERhdGFTYXZlKAogICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgIFNlYXJjaERhdGEgPT4gXCVTZWFyY2hEYXRhLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKIyBhZGQgbWFwcGluZyBkYXRhIGZvciB0ZXN0IHRlbXBsYXRlCmZvciBteSAkT2JqZWN0RGF0YVZhbHVlIChxdyggTmFtZSBEZXBsU3RhdGUgSW5jaVN0YXRlICkpIHsKCiAgICBteSAkTWFwcGluZ0lEID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ0FkZCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgbXkgJU1hcHBpbmdPYmplY3REYXRhID0gKCBLZXkgPT4gJE9iamVjdERhdGFWYWx1ZSApOwogICAgbXkgJFN1Y2Nlc3MgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nT2JqZWN0RGF0YVNhdmUoCiAgICAgICAgTWFwcGluZ0lEICAgICAgICAgPT4gJE1hcHBpbmdJRCwKICAgICAgICBNYXBwaW5nT2JqZWN0RGF0YSA9PiBcJU1hcHBpbmdPYmplY3REYXRhLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJPYmplY3REYXRhIGZvciB0ZXN0IHRlbXBsYXRlIGlzIG1hcHBlZCAtICRPYmplY3REYXRhVmFsdWUiLAogICAgKTsKfQoKIyBtYWtlIGRpcmVjdG9yeSBmb3IgZXhwb3J0IGZpbGUKbXkgJERlc3RpbmF0aW9uUGF0aCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSG9tZScpIC4gIi92YXIvdG1wL0ltcG9ydEV4cG9ydC8iOwpta3BhdGgoIFskRGVzdGluYXRpb25QYXRoXSwgMCwgMDc3MCApOyAgICAjIyBubyBjcml0aWMKCiMgdGVzdCBjb21tYW5kIHdpdGggd3JvbmcgdGVtcGxhdGUgbnVtYmVyCiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKAogICAgJy0tdGVtcGxhdGUtbnVtYmVyJywKICAgICRIZWxwZXItPkdldFJhbmRvbU51bWJlcigpLAogICAgJERlc3RpbmF0aW9uUGF0aCAuICdUZW1wbGF0ZUV4cG9ydC5jc3YnCik7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAxLAogICAgIkNvbW1hbmQgd2l0aCB3cm9uZyB0ZW1wbGF0ZSBudW1iZXIgLSBleGl0IGNvZGUiLAopOwoKIyB0ZXN0IGNvbW1hbmQgd2l0aG91dCBkZXN0aW5hdGlvbiBhcmd1bWVudAokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tdGVtcGxhdGUtbnVtYmVyJywgJFRlbXBsYXRlSUQgKTsKCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDEsCiAgICAiTm8gZGVzdGluYXRpb24gYXJndW1lbnQgLSBleGl0IGNvZGUiLAopOwoKIyB0ZXN0IGNvbW1hbmQgd2l0aCAtLXRlbXBsYXRlLW51bWJlciBvcHRpb24gYW5kIGRlc3RpbmF0aW9uIGFyZ3VtZW50CiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS10ZW1wbGF0ZS1udW1iZXInLCAkVGVtcGxhdGVJRCwgJERlc3RpbmF0aW9uUGF0aCAuICdUZW1wbGF0ZUV4cG9ydC5jc3YnICk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIk9wdGlvbiAtIC0tdGVtcGxhdGUtbnVtYmVyIG9wdGlvbiBhbmQgZGVzdGluYXRpb24gYXJndW1lbnQiLAopOwoKIyByZW1vdmUgdGVzdCBkZXN0aW5hdGlvbiBwYXRoCiRTdWNjZXNzID0gcm10cmVlKCBbJERlc3RpbmF0aW9uUGF0aF0gKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJUZXN0IGRpcmVjdG9yeSBkZWxldGVkIC0gJERlc3RpbmF0aW9uUGF0aCIsCik7CgojIGNsZWFudXAgaXMgZG9uZSBieSBSZXN0b3JlRGF0YWJhc2UuCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgICAgIG15ICRIZWxwZXIgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CiAgICAgICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CgogICAgICAgICMgZ2V0ICdMb2NhdGlvbicgY2F0YWxvZyBjbGFzcyBJRHMKICAgICAgICBteSAkQ29uZmlnSXRlbURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdMb2NhdGlvbicsCiAgICAgICAgKTsKICAgICAgICBteSAkTG9jYXRpb25Db25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbURhdGFSZWYtPntJdGVtSUR9OwoKICAgICAgICAjIGdldCAnUHJvZHVjdGlvbicgZGVwbG95bWVudCBzdGF0ZSBJRAogICAgICAgIG15ICREZXBsU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1Byb2R1Y3Rpb24nLAogICAgICAgICk7CiAgICAgICAgbXkgJFByb2R1Y3Rpb25EZXBsU3RhdGVJRCA9ICREZXBsU3RhdGVEYXRhUmVmLT57SXRlbUlEfTsKCiAgICAgICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgICAgICBteSAkQ29uZmlnSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ29uZmlnSXRlbScpOwogICAgICAgIG15ICRDb25maWdPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAgICAgIyBjcmVhdGUgQ29uZmlnSXRlbSBudW1iZXIKICAgICAgICBteSAkQ29uZmlnSXRlbU51bWJlciA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtTnVtYmVyQ3JlYXRlKAogICAgICAgICAgICBUeXBlICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNvbmZpZ0l0ZW06Ok51bWJlckdlbmVyYXRvcicpLAogICAgICAgICAgICBDbGFzc0lEID0+ICRMb2NhdGlvbkNvbmZpZ0l0ZW1JRCwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENvbmZpZ0l0ZW1OdW1iZXIsCiAgICAgICAgICAgICJDb25maWdJdGVtIG51bWJlciBpcyBjcmVhdGVkIC0gJENvbmZpZ0l0ZW1OdW1iZXIiLAogICAgICAgICk7CgogICAgICAgICMgYWRkICdMb2NhdGlvbicgdGVzdCBDb25maWdJdGVtCiAgICAgICAgbXkgJENvbmZpZ0l0ZW1JRCA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtQWRkKAogICAgICAgICAgICBOdW1iZXIgID0+ICRDb25maWdJdGVtTnVtYmVyLAogICAgICAgICAgICBDbGFzc0lEID0+ICRMb2NhdGlvbkNvbmZpZ0l0ZW1JRCwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICAiQ29uZmlnSXRlbSAnTG9jYXRpb24nIGlzIGNyZWF0ZWQgLSBJRCAkQ29uZmlnSXRlbUlEIiwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBhIG5ldyB2ZXJzaW9uCiAgICAgICAgbXkgJFZlcnNpb25OYW1lID0gIlNlbGVuaXVtIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFZlcnNpb25JRCAgID0gJENvbmZpZ0l0ZW1PYmplY3QtPlZlcnNpb25BZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkVmVyc2lvbk5hbWUsCiAgICAgICAgICAgIERlZmluaXRpb25JRCA9PiAxLAogICAgICAgICAgICBEZXBsU3RhdGVJRCAgPT4gJFByb2R1Y3Rpb25EZXBsU3RhdGVJRCwKICAgICAgICAgICAgSW5jaVN0YXRlSUQgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJENvbmZpZ0l0ZW1JRCwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFZlcnNpb25JRCwKICAgICAgICAgICAgIlRlc3QgdmVyc2lvbiBvZiB0aGUgQ29uZmlnSXRlbSBpcyBjcmVhdGVkIC0gSUQgJFZlcnNpb25JRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNvbmZpZ2l0ZW0nIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFkbWluSW1wb3J0RXhwb3J0IHNjcmVlbgogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRDb25maWdPYmplY3QtPkdldCgnU2NyaXB0QWxpYXMnKTsKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZG1pbkltcG9ydEV4cG9ydCIpOwoKICAgICAgICAjIGNoZWNrIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGNsaWNrIG9uICdBZGQgdGVtcGxhdGUnCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFkbWluSW1wb3J0RXhwb3J0O1N1YmFjdGlvbj1UZW1wbGF0ZUVkaXQnICldIikKICAgICAgICAgICAgLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgY2hlY2sgYW5kIGlucHV0IHN0ZXAgMSBvZiA1IHNjcmVlbgogICAgICAgIGZvciBteSAkU3RlcE9uZUlEICgKICAgICAgICAgICAgcXcoTmFtZSBPYmplY3QgRm9ybWF0IFZhbGlkSUQgQ29tbWVudCkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkU3RlcE9uZUlEIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KICAgICAgICBteSAkSW1wb3J0RXhwb3J0TmFtZSA9ICJJbXBvcnRFeHBvcnQiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRJbXBvcnRFeHBvcnROYW1lKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNPYmplY3QnKS52YWwoJ0lUU01Db25maWdJdGVtJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI0Zvcm1hdCcpLnZhbCgnQ1NWJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDb21tZW50IiwgJ2NzcycgKS0+c2VuZF9rZXlzKCdTZWxlbml1bVRlc3QnKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU3VibWl0TmV4dCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIGFuZCBpbnB1dCBzdGVwIDIgb2YgNSBzY3JlZW4KICAgICAgICBmb3IgbXkgJFN0ZXBUd29JRCAoCiAgICAgICAgICAgIHF3KENsYXNzSUQgQ291bnRNYXggRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcykKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkU3RlcFR3b0lEIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNDbGFzc0lEJykudmFsKCckTG9jYXRpb25Db25maWdJdGVtSUQnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTdWJtaXROZXh0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgY2hlY2sgYW5kIGlucHV0IHN0ZXAgMyBvZiA1IHNjcmVlbgogICAgICAgIGZvciBteSAkU3RlcFRocmVlSUQgKAogICAgICAgICAgICBxdyhDb2x1bW5TZXBhcmF0b3IgQ2hhcnNldCBJbmNsdWRlQ29sdW1uSGVhZGVycykKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkU3RlcFRocmVlSUQiLCAnY3NzJyApOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgfQogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0NvbHVtblNlcGFyYXRvcicpLnZhbCgnQ29tbWEnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTdWJtaXROZXh0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgY2hlY2sgYW5kIGlucHV0IHN0ZXAgNCBvZiA1IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI01hcHBpbmdBZGQiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgZm9yIG15ICRTdGVwRm91cklEICgKICAgICAgICAgICAgcXcoS2V5IElkZW50aWZpZXIpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi4vLypbXEBpZD0nT2JqZWN0OjowOjokU3RlcEZvdXJJRCddIik7CgogICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJFN0ZXBGb3VyQ2xhc3MgKAogICAgICAgICAgICBxdyhBcnJvd1VwIEFycm93RG93biBEZWxldGVDb2xvbW4pCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIuJFN0ZXBGb3VyQ2xhc3MiLCAnY3NzJyApOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgfQogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIHNlbGVjdCAnTnVtYmVyJyBtYXBwaW5nIGVsZW1lbnQKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLi8vKltcQGlkPSdPYmplY3Q6OjA6OktleSddL29wdGlvblsyXSIpLT5jbGljaygpOwoKICAgICAgICAjIGFkZCBhbmQgc2VsZWN0ICdOYW1lJyBtYXBwaW5nIGVsZW1lbnQKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNNYXBwaW5nQWRkIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIuLy8qW1xAaWQ9J09iamVjdDo6MTo6S2V5J10vb3B0aW9uWzNdIiktPmNsaWNrKCk7CgogICAgICAgICMgYWRkIGFuZCBzZWxlY3QgJ0RlcGxveW1lbnQgU3RhdGUnIG1hcHBpbmcgZWxlbWVudAogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI01hcHBpbmdBZGQiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi4vLypbXEBpZD0nT2JqZWN0OjoyOjpLZXknXS9vcHRpb25bNF0iKS0+Y2xpY2soKTsKCiAgICAgICAgIyBhZGQgYW5kIHNlbGVjdCAnSW5jaWRlbnQgU3RhdGUnIG1hcHBpbmcgZWxlbWVudAogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI01hcHBpbmdBZGQiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi4vLypbXEBpZD0nT2JqZWN0OjozOjpLZXknXS9vcHRpb25bNV0iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU3VibWl0TmV4dCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIHN0ZXAgNSBvZiA1IHNjcmVlbgogICAgICAgIGZvciBteSAkU3RlcEZvdXJJRCAoCiAgICAgICAgICAgIHF3KFJlc3RyaWN0RXhwb3J0IE51bWJlciBOYW1lIERlcGxTdGF0ZUlEcyBJbmNpU3RhdGVJRHMgVHlwZSBQaG9uZTEgUGhvbmUyCiAgICAgICAgICAgIEZheCBFLU1haWwgQWRkcmVzcyBOb3RlKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiIyRTdGVwRm91cklEIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KCiAgICAgICAgIyBzZWFyY2ggQ29uZmlnSXRlbSBieSBudW1iZXIgYW5kIGRlcGxveW1lbnQgc3RhdGUKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNSZXN0cmljdEV4cG9ydCIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTnVtYmVyIiwgICAgICAgICAnY3NzJyApLT5zZW5kX2tleXMoJENvbmZpZ0l0ZW1OdW1iZXIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAgICAgICAgICAgJ2NzcycgKS0+c2VuZF9rZXlzKCRWZXJzaW9uTmFtZSk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjRGVwbFN0YXRlSURzJykudmFsKCckUHJvZHVjdGlvbkRlcGxTdGF0ZUlEJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI0luY2lTdGF0ZUlEcycpLnZhbCgnMScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7Iik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1N1Ym1pdE5leHQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgICAgICBteSAkSW1wb3J0RXhwb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydCcpOwogICAgICAgIG15ICREQk9iamVjdCAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBnZXQgVGVtcGxhdGVJRCBvZiBjcmVhdGVkIHRlc3QgdGVtcGxhdGUKICAgICAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBpbWV4cG9ydF90ZW1wbGF0ZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRJbXBvcnRFeHBvcnROYW1lIF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICAgICAgbXkgJFRlbXBsYXRlSUQ7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRUZW1wbGF0ZUlEID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgICMgbmF2aWdhdGUgdG8gdGVzdCBjcmVhdGVkIENvbmZpZ0l0ZW0gYW5kIHZlcmlmeSBpdAogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNvbmZpZ0l0ZW1ab29tO0NvbmZpZ0l0ZW1JRD0kQ29uZmlnSXRlbUlEIik7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVmVyc2lvbk5hbWUgKSA+IC0xLAogICAgICAgICAgICAiVGVzdCBDb25maWdJdGVtIG5hbWUgJFZlcnNpb25OYW1lIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZXhwb3J0IGNyZWF0ZWQgdGVzdCB0ZW1wbGF0ZQogICAgICAgIG15ICRFeHBvcnRSZXN1bHRSZWYgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5FeHBvcnQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgQ29uZmlnSXRlbSwgc28gaXQgY2FuIGJlIGltcG9ydGVkIGJhY2sKICAgICAgICAkQ29uZmlnSXRlbU9iamVjdC0+Q29uZmlnSXRlbURlbGV0ZSgKICAgICAgICAgICAgQ29uZmlnSXRlbUlEID0+ICRDb25maWdJdGVtSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRDb25maWdJdGVtID0gJENvbmZpZ0l0ZW1PYmplY3QtPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIENvbmZpZ0l0ZW1JRCA9PiAkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBDYWNoZSAgICAgICAgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIENvbmZpZ0l0ZW0gaXMgZGVsZXRlZAogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJENvbmZpZ0l0ZW0sCiAgICAgICAgICAgICJDb25maWdJdGVtIGlzIGRlbGV0ZWQgLSBJRCAkQ29uZmlnSXRlbUlEIiwKICAgICAgICApOwoKICAgICAgICAjIHJlZnJlc2ggc2NyZWVuIGFuZCB2ZXJpZnkgdGhhdCB0ZXN0IENvbmZpZ0l0ZW0gZG9lcyBub3QgZXhpc3QgYW55bW9yZQogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRSZWZyZXNoKCk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiQ2FuXCd0IHNob3cgaXRlbSwgbm8gYWNjZXNzIHJpZ2h0cyBmb3IgQ29uZmlnSXRlbSBhcmUgZ2l2ZW4hIiApID4gLTEsCiAgICAgICAgICAgICJUZXN0IENvbmZpZ0l0ZW0gbmFtZSAkVmVyc2lvbk5hbWUgaXMgbm90IGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBtYWluIG9iamVjdAogICAgICAgIG15ICRNYWluT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBFeHBvcnRlZCBmaWxlIHRvIGEgc3lzdGVtCiAgICAgICAgbXkgJEV4cG9ydEZpbGVOYW1lID0gIklUU01FeHBvcnQiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSAuICIuY3N2IjsKICAgICAgICBteSAkRXhwb3J0TG9jYXRpb24gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0hvbWUnKSAuICIvdmFyL3RtcC8iIC4gJEV4cG9ydEZpbGVOYW1lOwogICAgICAgIG15ICRTdWNjZXNzICAgICAgICA9ICRNYWluT2JqZWN0LT5GaWxlV3JpdGUoCiAgICAgICAgICAgIExvY2F0aW9uICAgPT4gJEV4cG9ydExvY2F0aW9uLAogICAgICAgICAgICBDb250ZW50ICAgID0+IFwkRXhwb3J0UmVzdWx0UmVmLT57RGVzdGluYXRpb25Db250ZW50fS0+WzBdLAogICAgICAgICAgICBNb2RlICAgICAgID0+ICd1dGY4JywKICAgICAgICAgICAgVHlwZSAgICAgICA9PiAnQXR0YWNobWVudCcsCiAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gJzY2NCcsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJFeHBvcnQgZmlsZSAkRXhwb3J0RmlsZU5hbWUgaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZG1pbkltcG9ydEV4cG9ydCBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZG1pbkltcG9ydEV4cG9ydCIpOwoKICAgICAgICAjIGNsaWNrIG9uICdJbXBvcnQnCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnU3ViYWN0aW9uPUltcG9ydEluZm9ybWF0aW9uO1RlbXBsYXRlSUQ9JFRlbXBsYXRlSUQnICldIikKICAgICAgICAgICAgLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgc2VsZWN0IEV4cG9ydGVkIGZpbGUgYW5kIHN0YXJ0IGltcG9ydGluZwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W2NvbnRhaW5zKFxAbmFtZSwgXCdTb3VyY2VGaWxlJyApXSIpLT5zZW5kX2tleXMoJEV4cG9ydExvY2F0aW9uKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU3RhcnQgSW1wb3J0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgY2hlY2sgZm9yIGV4cGVjdGVkIG91dGNvbWUKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICcoQ3JlYXRlZDogMSknICkgPiAtMSwKICAgICAgICAgICAgIkltcG9ydCB0ZXN0IENvbmZpZ0l0ZW0gLSBzdWNjZXNzIiwKICAgICAgICApOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIGltcG9ydGVkIHRlc3QgY3JlYXRlZCBDb25maWdJdGVtIGFuZCB2ZXJpZnkgaXQKICAgICAgICBteSAkSW1wb3J0ZWRDb25maWdJdGVtSUQgPSAkQ29uZmlnSXRlbUlEICsgMTsKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ29uZmlnSXRlbVpvb207Q29uZmlnSXRlbUlEPSRJbXBvcnRlZENvbmZpZ0l0ZW1JRCIKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFZlcnNpb25OYW1lICkgPiAtMSwKICAgICAgICAgICAgIlRlc3QgQ29uZmlnSXRlbSBuYW1lICRWZXJzaW9uTmFtZSBpcyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZG1pbkltcG9ydEV4cG9ydCBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZG1pbkltcG9ydEV4cG9ydCIpOwoKICAgICAgICAjIGNsaWNrIHRvIGRlbGV0ZSB0ZXN0IHRlbXBsYXRlCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRGVsZXRlVGVtcGxhdGVJRCRUZW1wbGF0ZUlEIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGltcG9ydGVkIENvbmZpZ0l0ZW0KICAgICAgICAkU3VjY2VzcyA9ICRDb25maWdJdGVtT2JqZWN0LT5Db25maWdJdGVtRGVsZXRlKAogICAgICAgICAgICBDb25maWdJdGVtSUQgPT4gJEltcG9ydGVkQ29uZmlnSXRlbUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkNvbmZpZ0l0ZW0gaXMgZGVsZXRlZCAtIElEICRJbXBvcnRlZENvbmZpZ0l0ZW1JRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBFeHBvcnRlZCBmaWxlIGZyb20gc3lzdGVtCiAgICAgICAgJFN1Y2Nlc3MgPSAkTWFpbk9iamVjdC0+RmlsZURlbGV0ZSgKICAgICAgICAgICAgTG9jYXRpb24gPT4gJEV4cG9ydExvY2F0aW9uLAogICAgICAgICAgICBUeXBlICAgICA9PiAnQXR0YWNobWVudCcsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJFeHBvcnQgZmlsZSAkRXhwb3J0RmlsZU5hbWUgaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgfQopOwoKMTsK
Um93MS1Db2wxO1JvdzEtQ29sMjtSb3cxLUNvbDMNClJvdzItQ29sMTtSb3cyLUNvbDI7Um93Mi1Db2wzDQpSb3czLUNvbDE7Um93My1Db2wyO1JvdzMtQ29sMw0K
Um93MS1Db2wxCVJvdzEtQ29sMglSb3cxLUNvbDMNClJvdzItQ29sMQlSb3cyLUNvbDIJUm93Mi1Db2wzDQpSb3czLUNvbDEJUm93My1Db2wyCVJvdzMtQ29sMw0K
IlJvdzEtQ29sMSI6IlJvdzEtQ29sMiI6IlJvdzEtQ29sMyINCiJSb3cyLUNvbDEiOiJSb3cyLUNvbDIiOiJSb3cyLUNvbDMiDQoiUm93My1Db2wxIjoiUm93My1Db2wyIjoiUm93My1Db2wzIg0K
IlJvdzEtQ29sMSI7IlJvdzEtQ29sMiI7IlJvdzEtQ29sMyINCiJSb3cyLUNvbDEiOyJSb3cyLUNvbDIiOyJSb3cyLUNvbDMiDQoiUm93My1Db2wxIjsiUm93My1Db2wyIjsiUm93My1Db2wzIg0K
IlJvdzEtQ29sMSIJIlJvdzEtQ29sMiIJIlJvdzEtQ29sMyINCiJSb3cyLUNvbDEiCSJSb3cyLUNvbDIiCSJSb3cyLUNvbDMiDQoiUm93My1Db2wxIgkiUm93My1Db2wyIgkiUm93My1Db2wzIg0K
IgpUZXN0IDEgLSAxIjtUZXN0IDEgLSAyOyJUZXN0IDEKLSAzIjtUZXN0IFxuXHRcclxzDQoiVGVzdCAyIAotIDEiOyJUZQpzdCAyIC0gMiI7IlRlc3QgMiAtIDMKIjsNCg==
IgpUZXN0IDEgLSAxIglUZXN0IDEgLSAyCSJUZXN0IDEKLSAzIglUZXN0IFxuXHRcclxzDQoiVGVzdCAyIAotIDEiCSJUZQpzdCAyIC0gMiIJIlRlc3QgMiAtIDMKIgkNCg==
IgpUZXN0IDEgLSAxIjoiVGVzdCAxIC0gMiI6IlRlc3QgMQotIDMiOiJUZXN0IFxuXHRcclxzIg0KIlRlc3QgMiAKLSAxIjoiVGUKc3QgMiAtIDIiOiJUZXN0IDIgLSAzCiI6DQo=
IgpUZXN0IDEgLSAxIjsiVGVzdCAxIC0gMiI7IlRlc3QgMQotIDMiOyJUZXN0IFxuXHRcclxzIg0KIlRlc3QgMiAKLSAxIjsiVGUKc3QgMiAtIDIiOyJUZXN0IDIgLSAzCiI7DQo=
IgpUZXN0IDEgLSAxIgkiVGVzdCAxIC0gMiIJIlRlc3QgMQotIDMiCSJUZXN0IFxuXHRcclxzIg0KIlRlc3QgMiAKLSAxIgkiVGUKc3QgMiAtIDIiCSJUZXN0IDIgLSAzCiIJDQo=
ICBUZXN0ICA7ICAgIDtUZXN0ICANCiAgICBUZXN0OztUZXN0DQo7OyANCg==
ICBUZXN0ICAJICAgIAlUZXN0ICANCiAgICBUZXN0CQlUZXN0DQoJCSANCg==
IiAgVGVzdCAgIjoiICAgICI6IlRlc3QgICINCiIgICAgVGVzdCI6OiJUZXN0Ig0KOjoiICINCg==
IiAgVGVzdCAgIjsiICAgICI7IlRlc3QgICINCiIgICAgVGVzdCI7OyJUZXN0Ig0KOzsiICINCg==
IiAgVGVzdCAgIgkiICAgICIJIlRlc3QgICINCiIgICAgVGVzdCIJCSJUZXN0Ig0KCQkiICINCg==
IlRlc3Q7Ol+wXiEiIqckJSYvKCk9P7RgKitUZXN0Ijs+PEB+J317W11cDQoiIiIiIjs7OjouLi0tX18jIyI7DQo=
IlRlc3Q7Ol+wXiEiIqckJSYvKCk9P7RgKitUZXN0Igk+PEB+J317W11cDQoiIiIiIjs7OjouLi0tX18jIyIJDQo=
IlRlc3Q7Ol+wXiEiIqckJSYvKCk9P7RgKitUZXN0IjoiPjxAfid9e1tdXCINCiIiIiIiOzs6Oi4uLS1fXyMjIjoNCg==
IlRlc3Q7Ol+wXiEiIqckJSYvKCk9P7RgKitUZXN0IjsiPjxAfid9e1tdXCINCiIiIiIiOzs6Oi4uLS1fXyMjIjsNCg==
IlRlc3Q7Ol+wXiEiIqckJSYvKCk9P7RgKitUZXN0IgkiPjxAfid9e1tdXCINCiIiIiIiOzs6Oi4uLS1fXyMjIgkNCg==
/Pbk3zvc1sQNCt/k9vw7xNbcDQo=
/Pbk3wnc1sQNCt/k9vwJxNbcDQo=
Ivz25N8iOiLc1sQiDQoi3+T2/CI6IsTW3CINCg==
Ivz25N8iOyLc1sQiDQoi3+T2/CI7IsTW3CINCg==
Ivz25N8iCSLc1sQiDQoi3+T2/CIJIsTW3CINCg==
IsqpIMqsIMquIjsiIMqhIMukIM6MICINCiIgIM6XIM+XIM+gICAiOyLOhiDOmyDOniINCg==
IsqpIMqsIMquIjoiIMqhIMukIM6MICINCiIgIM6XIM+XIM+gICAiOiLOhiDOmyDOniINCg==
IsqpIMqsIMquIgkiIMqhIMukIM6MICINCiIgIM6XIM+XIM+gICAiCSLOhiDOmyDOniINCg==
IlJvdzEtQ29sMSI7IlJvdzEtQ29sMiI7IlJvdzEtQ29sMyINCiJSb3cyLUNvbDEiOyJSb3cyLUNvbDIiOyJSb3cyLUNvbDMiDQoiUm93My1Db2wxIjsiMFJvdzMtQ29sMiI7IlJvdzMtQ29sMyINCg==
IlJvdzEtQ29sMSI7IlJvdzEtQ29sMiI7IlJvdzEtQ29sMyINCiJSb3cyLUNvbDEiOyIwUm93Mi1Db2wyIjsiUm93Mi1Db2wzIg0KIlJvdzMtQ29sMSI7IlJvdzMtQ29sMiI7IlJvdzMtQ29sMyINCg==
Ik5hbWUiLCJEZXBsb3ltZW50IFN0YXRlIiwiSW5jaWRlbnQgU3RhdGUiCiJUZXN0Q29uZmlnSXRlbXRlc3QxNDM1ODU2ODk1MTQ3OTYyMzc2IiwiUHJvZHVjdGlvbiIsIk9wZXJhdGlvbmFsIgoiVGVzdENvbmZpZ0l0ZW10ZXN0MTQzNTg1Njg5NTE0MTgwMjc3IiwiUHJvZHVjdGlvbiIsIk9wZXJhdGlvbmFsIgoiVGVzdENvbmZpZ0l0ZW10ZXN0MTQzNTg1Njg5NTE4MDg3MzMxMCIsIlByb2R1Y3Rpb24iLCJPcGVyYXRpb25hbCIKIlRlc3RDb25maWdJdGVtdGVzdDE0MzU4NTY4OTU1MTM5MjQ0MzkiLCJQcm9kdWN0aW9uIiwiT3BlcmF0aW9uYWwiCiJUZXN0Q29uZmlnSXRlbXRlc3QxNDM1ODU2ODk1MzAwNzMwMzMiLCJQcm9kdWN0aW9uIiwiT3BlcmF0aW9uYWwiCiJUZXN0Q29uZmlnSXRlbXRlc3QxNDM1ODU2ODk1NDkzMjczNjg4IiwiUHJvZHVjdGlvbiIsIk9wZXJhdGlvbmFsIgoiVGVzdENvbmZpZ0l0ZW10ZXN0MTQzNTg1Njg5NTE4ODIxNjA2NSIsIlByb2R1Y3Rpb24iLCJPcGVyYXRpb25hbCIKIlRlc3RDb25maWdJdGVtdGVzdDE0MzU4NTY4OTU5ODY2OTMzOSIsIlByb2R1Y3Rpb24iLCJPcGVyYXRpb25hbCIKIlRlc3RDb25maWdJdGVtdGVzdDE0MzU4NTY4OTU2MjE5MTAwODYiLCJQcm9kdWN0aW9uIiwiT3BlcmF0aW9uYWwiCiJUZXN0Q29uZmlnSXRlbXRlc3QxNDM1ODU2ODk1NTQ0MTk2NzI0IiwiUHJvZHVjdGlvbiIsIk9wZXJhdGlvbmFsIg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgdmFyOjpwYWNrYWdlc2V0dXA6OkltcG9ydEV4cG9ydDsgICAgIyMgbm8gY3JpdGljCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJywKKTsKCj1oZWFkMSBOQU1FCgpJbXBvcnRFeHBvcnQucG0gLSBjb2RlIHRvIGV4Y2VjdXRlIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgZnVuY3Rpb25zCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRDb2RlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgndmFyOjpwYWNrYWdlc2V0dXA6OkltcG9ydEV4cG9ydCcpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGFsd2F5cyBkaXNjYXJkIHRoZSBjb25maWcgb2JqZWN0IGJlZm9yZSBwYWNrYWdlIGNvZGUgaXMgZXhlY3V0ZWQsCiAgICAjIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb25maWcgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCBuZXdseSwgc28gdGhhdCBpdAogICAgIyB3aWxsIHVzZSB0aGUgcmVjZW50bHkgd3JpdHRlbiBuZXcgY29uZmlnIGZyb20gdGhlIHBhY2thZ2UKICAgICRLZXJuZWw6Ok9NLT5PYmplY3RzRGlzY2FyZCgKICAgICAgICBPYmplY3RzID0+IFsnS2VybmVsOjpDb25maWcnXSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBDb2RlSW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlSW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVJbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVSZWluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIHJlaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlUmVpbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZVJlaW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVXBncmFkZSgpCgpydW4gdGhlIGNvZGUgdXBncmFkZSBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZSgpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVVcGdyYWRlRnJvbUJlZm9yZV8yXzBfMygpCgpUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXhlY3V0ZWQgaWYgdGhlIGluc3RhbGxlZCBtb2R1bGUgdmVyc2lvbiBpcyBzbWFsbGVyIHRoYW4gMi4wLjMuCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZUZyb21CZWZvcmVfMl8wXzMoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21CZWZvcmVfMl8wXzMgeyAgICAjIyBubyBjcml0aWMKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBmaXggYSB0eXBvIGluIHRoZSBkYXRhYmFzZQogICAgJFNlbGYtPl9GaXhEYXRhYmFzZVR5cG8oKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzRfMF85MSgpCgpUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXhlY3V0ZWQgaWYgdGhlIGluc3RhbGxlZCBtb2R1bGUgdmVyc2lvbiBpcyBzbWFsbGVyIHRoYW4gNC4wLjkxLgoKbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzRfMF85MSB7ICAgICMjIG5vIGNyaXRpYwogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoYW5nZSBjb25maWd1cmF0aW9ucyB0byBtYXRjaCB0aGUgbmV3IG1vZHVsZSBsb2NhdGlvbi4KICAgICRTZWxmLT5fTWlncmF0ZUNvbmZpZ3MoKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVVuaW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgdW5pbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVbmluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlVW5pbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCj1iZWdpbiBJbnRlcm5hbDoKCj1pdGVtIF9GaXhEYXRhYmFzZVR5cG8oKQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0ZpeERhdGFiYXNlVHlwbygpOwoKPWN1dAoKc3ViIF9GaXhEYXRhYmFzZVR5cG8gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGZpeCB0aGUgQ29sdW1uU2VwZXJhdG9yIHR5cG8gKGNvcnJlY3QgaXMgQ29sdW1uU2VwYXJhdG9yKQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgaW1leHBvcnRfZm9ybWF0ICIKICAgICAgICAgICAgLiAiU0VUIGRhdGFfa2V5ID0gJ0NvbHVtblNlcGFyYXRvcicgIgogICAgICAgICAgICAuICJXSEVSRSBkYXRhX2tleSA9ICdDb2x1bW5TZXBlcmF0b3InIiwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9NaWdyYXRlQ29uZmlncygpCgpjaGFuZ2UgY29uZmlndXJhdGlvbnMgdG8gbWF0Y2ggdGhlIG5ldyBtb2R1bGUgbG9jYXRpb24uCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fTWlncmF0ZUNvbmZpZ3MoKTsKCj1jdXQKCnN1YiBfTWlncmF0ZUNvbmZpZ3MgewoKICAgICMgY3JlYXRlIG5lZWRlZCBvYmplY3RzCiAgICBteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBtaWdyYXRlIEltcG9ydEV4cG9ydCBjb25maWcKICAgICMgZ2V0IHNldHRpbmcgY29udGVudCBmb3IgSW1wb3J0RXhwb3J0IGNvbmZpZwogICAgbXkgJFNldHRpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKTsKCiAgICAjIHVwZGF0ZSBtb2R1bGUgbG9jYXRpb24KICAgICRTZXR0aW5nLT57J0FkbWluSW1wb3J0RXhwb3J0J30tPntOYXZCYXJNb2R1bGV9LT57TW9kdWxlfSA9ICJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyOjpNb2R1bGVBZG1pbiI7CgogICAgIyBzZXQgbmV3IHNldHRpbmcsCiAgICBteSAkU3VjY2VzcyA9ICRTeXNDb25maWdPYmplY3QtPkNvbmZpZ0l0ZW1VcGRhdGUoCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICBLZXkgICA9PiAnRnJvbnRlbmQ6Ok1vZHVsZSMjI0FkbWluSW1wb3J0RXhwb3J0JywKICAgICAgICBWYWx1ZSA9PiAkU2V0dGluZy0+eydBZG1pbkltcG9ydEV4cG9ydCd9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKMTsKCj1lbmQgSW50ZXJuYWw6Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIFNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCgo9Y3V0Cg==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgSW1wb3J0IEV4cG9ydCBTY3JlZW4KICovCgpAbWVkaWEgc2NyZWVuLHByb2plY3Rpb24sdHYsaGFuZGhlbGQgewoKLyoqCiAqIEBzdWJzZWN0aW9uCiAqLwoKCi5NYXBIZWFkZXJSb3cgbGFiZWwgewogICAgY29sb3I6ICM5MjkyOTI7Cn0KCi5NYXBIZWFkZXJSb3cgLkhlYWRlciwKLk1hcEhlYWRlclJvdyAuRmllbGQgewogICAgZGlzcGxheTogaW5saW5lOwogICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgcGFkZGluZy1sZWZ0OiAycHg7Cn0KCmJ1dHRvbi5BcnJvd1VwLApidXR0b24uQXJyb3dEb3duIHsKICAgIGhlaWdodDogMTZweDsKICAgIHdpZHRoOiAxNnB4OwogICAgcGFkZGluZzogMXB4OwogICAgbWFyZ2luLXRvcDogMDsKICAgIG1hcmdpbi1ib3R0b206IDFweDsKICAgIGJvcmRlci1zdHlsZTogbm9uZTsKICAgIHRleHQtaW5kZW50OiAtOTk5OXB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKYnV0dG9uLkFycm93VXA6YWN0aXZlLApidXR0b24uQXJyb3dEb3duOmFjdGl2ZSB7CiAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgpidXR0b24uQXJyb3dVcFtkaXNhYmxlZD0iZGlzYWJsZWQiXTphY3RpdmUsCmJ1dHRvbi5BcnJvd0Rvd25bZGlzYWJsZWQ9ImRpc2FibGVkIl06YWN0aXZlIHsKICAgIG1hcmdpbi10b3A6IDBweDsKICAgIG1hcmdpbi1ib3R0b206IDFweDsKfQoKYnV0dG9uLkFycm93VXAgewogICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9pY29ucy9pbXBvcnRleHBvcnRfYXJyb3dfdXAucG5nKTsKfQoKYnV0dG9uLkFycm93VXBbZGlzYWJsZWQ9ImRpc2FibGVkIl0gewogICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9pY29ucy9pbXBvcnRleHBvcnRfYXJyb3dfdXBfZGlzYWJsZWQucG5nKTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKYnV0dG9uLkFycm93RG93biB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ljb25zL2ltcG9ydGV4cG9ydF9hcnJvd19kb3duLnBuZyk7Cn0KCmJ1dHRvbi5BcnJvd0Rvd25bZGlzYWJsZWQ9ImRpc2FibGVkIl17CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ljb25zL2ltcG9ydGV4cG9ydF9hcnJvd19kb3duX2Rpc2FibGVkLnBuZyk7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCn0gLyogZW5kIEBtZWRpYSAqLwo=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZlJREFUeNqkUztLA0EQnr3bvEhhI9FC09gJInJiZbAQREHUWhTtbK8ULEWwFVLZaJE/YKWFgn2SQgxBgjYSIoYkEsxxuec6c/FxCXmAGZjbmdmZ7+a1TAgBw5AEQxL3K7OnjxAMhyEQCkEgGARJllfJ7jrOjWWaYBkGmM0mPBzOdAdoIyF2MFD9lkfxmxqYgT/Ysix1fzOukHp59apCq1epgT0QFGya6u56XMnnG0C8vTahkI3u+gJ4wYah7m1NKcWiBrregFqtArlcCTaWxhW66wRpKwEdEjTW5EUmS/riXEzhXMB9upSFdMnzYYwl/KXwjgwOsHEgXBds285oQgYHAQ1dB875PJMkmkz/Jjq2DbqmeXJFDoHDwAMwUI9Eo/0BtHod9EbjVy/zKDgugIkARHSy52uUFroDFM9WgI9NQ2T5qJUBj2AJfwD63QnY73mUznuPkRy022MwcfNsJnlMMtlawYMXadItP8Wst1yhmmz9SVQLBbTRUn0iv1CrfpyZ/zXiiOgYQY72WHDq5QfGuF0B/kNfAgwAlIbWNoRkTzIAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAXNSR0IArs4c6QAAAAJiS0dEAP+Hj8y/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2goUEigB30KkogAAAMpJREFUKM+lkT0OAWEQhp/9ESJKF5FPK1oSCQfYXvvVDuAcCola5w5sKdkL6EQhYv+NYpddSyi8xUwxT2bemTGE7zJ/1LGzNKNBnRrWANJNTEjAvAzkclINtFm+dQAQJ9ZjBWstFIhZlCM9Uh4eQxVpcSqAOKGeqAM+J/b0VfhE8hFRT1i40FEWWxfA6GVjckCmKTeSXcoNH7trYlVNJlwBQQiAZhU4c8k6IfiAT+sVOD52AQJ4xsJk6VrRp1PHWXJXgOGWAePvb94BXKRFykgCmkUAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZBJREFUeNrEU79Lw0AUfpemhZI4CIpCJ92cHE4HJ0HEQcFRQdShIJ0E/5SCOBSkgxZE7CS4iIt06NIMnVxUcKhWCJb+iPl1l/gu1ppKKkIHH1zu3r33ffnu3Tvi+z4MYxIMaXLYWcy/9taEkBxOtOtqqDTzFbtNT0QTeIyFXbq5kgoIzq9rf1PgOk5fsNVyQZTo5/5AgqauQ1JVe75puuB5AI5lfe91OvidiiYwms0gOakogd9ovYPjuuCY5ifYMMC17cEKhDEEGO02yLIMNYsB9wjYSMCwPh7nvx8BK51DzZSjbo5E9biCBBAQoFW6ORpOmegi2nYJEyhNr9EHPOo9qvXAB3V1iY4mAF7OrjS83tLARkJwwbWsbPmoqCkJCXQmwRuPQVyW4Clf1ERM5IQxJNzK6vwWSmcQm1nfxv2Dsb0dyjHcOD4Vf87yu8uCVb2AMKaPAJPEJK5gRF7Y3yCTs7uBsnr1hJUPi7gUd9j2Q6AognEcKRwxMr08FxA83lS6KaLXnxHjRRL8y2v8EGAAqEvNnH+aSSAAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAXNSR0IArs4c6QAAAAJiS0dEAP+Hj8y/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2goUEig6bklNhgAAAMlJREFUKM+lkT0KAjEQhb9IFEE9TToP4BU8gq2exG23FAKCYCmIra25iYL4w/6asVhddlW0cJo3yXy8CS9K+F6NH3N0IVMAVIgBnIwAJlXgVogZGNh8ckgfxzNS9jXgQAeACE8MwLUOnIjpACcyYuBa+uinVc4ZzQVPRI5/XSGhN54cQYhhB+IYVYBkK2ZojkR4+qbNyqltLSixSTBzLRIyNEuXBGJfkhSbBtb16LJwaTmuPBLEZszHoIKmfcvhieR70Ovqnfr7N++lLlCSshf+TwAAAABJRU5ErkJggg==