ITSMCore
5.0.16
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Build for OTRS::ITSM 5 patch level 16.
Build for OTRS::ITSM 5 patch level 15.
Build for OTRS::ITSM 5 patch level 14.
Build for OTRS::ITSM 5 patch level 13.
Build for OTRS::ITSM 5 patch level 12.
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 OTRS::ITSM Core package.
Das OTRS::ITSM Core Paket.
Az OTRS::ITSM alapcsomag.
5.0.x
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to install the OTRS package ITSMCore.<br/>
<br/>
<br/>
<strong>REQUIRED OTRS PACKAGES</strong>
<ul>
<li>GeneralCatalog 5.0.16</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket ITSMCore zu installieren.<br/>
<br/>
<br/>
<strong>BENÖTIGTE OTRS-PAKETE</strong>
<ul>
<li>GeneralCatalog 5.0.16</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está apunto de instalar el modulo ITSMCore de OTRS.<br/>
<br/>
<br/>
<strong>PAQUETES REQUERIDOS</strong>
<ul>
<li>GeneralCatalog 5.0.16</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ÜDVÖZÖLJÜK</strong>
<br/>
<br/>
Ön az ITSMCore OTRS csomag telepítésére készül.<br/>
<br/>
<br/>
<strong>SZÜKSÉGES OTRS CSOMAGOK</strong>
<ul>
<li>GeneralCatalog 5.0.16</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>NOTICE</strong>
<br/>
<br/>
In order to grant users access to the service menu, you need to add them as member to the group 'itsm-service'.
<br/>
<br/>
The menu items that were added by this package will be visible after you log-in to the system again.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>HINWEIS</strong>
<br/>
<br/>
Um Benutzern Zugriff auf das Service-Menü zu gewähren, müssen diese Mitglied der neuen Gruppe 'itsm-service' sein.
<br/>
<br/>
Die von diesem Paket hinzugefügten Menü-Punkte sind erst nach einem erneuten Anmeldevorgang im System sichtbar.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>AVISO</strong>
<br/>
<br/>
Para poder permitir el acceso a los usuarios al menu de servicios, usted necesita agregarlos como miembros del grupo 'itsm-service'.<br/>
<br/>
Los elementos del menu que fueron agregados por este packete serán visibles despues de que cierre y abra su sesion de nuevo.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>FIGYELMEZTETÉS</strong>
<br/>
<br/>
Annak érdekében, hogy hozzáférést adjon a felhasználók számára a szolgáltatás menühöz, hozzá kell adnia őket az „itsm-service” csoporthoz tagként.
<br/>
<br/>
Azok a menüpontok, amelyeket ez a csomag adott hozzá, azután lesznek láthatóak, miután ismét bejelentkezik a rendszerbe.
<br/>
<br/>
((enjoy))<br/>
<br/>
<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/>
The group 'itsm-service' that was created during package installation will be deactivated.
You can activate this group again in the admin area.
<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/>
Die von diesem Paket angelegte Gruppe 'itsm-service' wird deaktiviert.
Sie kann jederzeit im Admin-Bereich wieder aktiviert werden.
<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 creadas durante la instalación serán borradas.
¡Todos los datos de esas tablas serán irrevocablemente perdidos!.
<br/>
<br/>
El grupo 'itsm-service' que fue creado durante la instalación será desactivado.
Usted puede activar este grupo de nuevo en el area de admin.
<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/>
A csomagtelepítés során létrehozott „itsm-service” csoport ki lesz kapcsolva.
Ezt a csoportot az adminisztrációs területen tudja ismét bekapcsolni.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to upgrade the OTRS package ITSMCore.<br/>
<br/>
<br/>
<strong>REQUIRED OTRS PACKAGES</strong>
<ul>
<li>GeneralCatalog 5.0.16</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket ITSMCore zu aktualisieren.<br/>
<br/>
<br/>
<strong>BENÖTIGTE OTRS-PAKETE</strong>
<ul>
<li>GeneralCatalog 5.0.16</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está apunto de instalar el modulo ITSMCore de OTRS.<br/>
<br/>
<br/>
<strong>PAQUETES REQUERIDOS</strong>
<ul>
<li>GeneralCatalog 5.0.16</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ÜDVÖZÖLJÜK</strong>
<br/>
<br/>
Ön az ITSMCore OTRS csomag frissítésére készül.<br/>
<br/>
<br/>
<strong>SZÜKSÉGES OTRS CSOMAGOK</strong>
<ul>
<li>GeneralCatalog 5.0.16</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
GeneralCatalog
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeInstall();
# 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)->CodeUpgradeFromLowerThan_3_2_91();
# 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)->CodeUpgradeFromLowerThan_4_0_2();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_91();
# 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)->CodeUpgrade();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUninstall();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeReinstall();
2017-01-17 22:00:04
opms.otrs.com
H4sIAAAAAAACA+1dXZPaOBZ9z6+gyMtMFVHr05bDdKZ2UjW7WzVT2ZpkXuaFEqCmvTE2ZZvuMA/721eyoRuMjcG2nCYRqWQGuOhK4p6jqyMh/fTzl2UweJBx4kfh7RABOBzIcBbN/XBxO/zz069v+PDnd69+mvvirfq7iMVyoD4RJvrZ7fA+TVdvb24eHx9BsElEGsUg8NcgkTf/E0EgbpTRzfDdq8Fgv4C5SIV+bfuqSNPYn65TOQjFUt4Op2L2eRFH63A+zK22drMoiOLBgwhuh6/vssfwZlvMzUE5J8peiYWcxlJ8ri4aqofnNSl6JeNisctVlPjKJN2sjkwqytH/7tlsrRJlFC7evf4Hep1XafvCc1llFa10ki5FvPDDYz+qb4K8IzDgGGPVGczjHnSpi3Z9crm7ab/ugn7dxf2685PJKorTWPjpsctpFAVShLnXOxEksrmjZCYCFWOn2gUBw4QjBgnjunkuwc393flpGnXUpPzlJwBeCuZF7M9PY/nAoqKUR3+e3k++1HRg8w7Ly98YK//BT/xpIMta4Idp7gC1L37TTfHFbygj9eePt4yIvLTKUWPOJZPs8lFjsfbnMqkJtUObipLut2Y3db1etDu3Y/KXCmN45iIQGxlvi//lefQebL9gNdzEazkciFnqP+ye7fVJNP2vnKXbxn5MRTgX8XzwZvBJfkmHe7nJcODPb4cf4GFvFdunSlP8eNRdq+g5phDg1GMjRIDrIlrsiWMuqXIznRa9xKohIlwEsuAJAZdDb0zUf4mrnlNAOG7oOdXdUhP7BZsqgs9yiAO7Qrrx4dMfHwd08Kv6xuVjFH+uSD5OQLOK66MwLXOsXx/ciaUfbFT9RJgMB0m60TGkEtP8o/+SwYNM/ZnYD/XLa3Av/cV9aR32h20HHjxQO5+HcXlRbDZxd8hZFczl3uk/7RypPGERLmX5VyrD9XI7GJ3ppZSRLgPJQ1alIkyeq0JqsJe/mDPTGVT1i/zbl/Fvfij3CAtuCQu1JSwIMGZo5BDAISMG+QoChBziOKM3EEDmQozI2GWAEhdr715TspzKvydZe5q08tjSxQBqU+YCXGdKAc1McX2pDBDC2Eg1nVKHe6hZW2dRHMp4okMkqY4/eFST0vcucaxydTkpQv44URH6TwsPWdJ5HEfPCSeGlZx5sbOM+6t7ETcrei6S+0CGi1PtwN0SxF/+4i+xKBDELqPBbQlCAQJB1xthFcJu0w4/iyEKnsbdeI7VNKaWHypdfXXTi9saxf7hYFmIa3QeO5z63CV1Eus0Uil7epgM1k6+u8BFRY5P2iLCodvvippGxJMnnbExNN7zzHBTz33m+N9ZTg9VInD4oKaT+spgNJbU5w2zSb0JbqKtuYmpaWU/3LTztOOmZ8+Wmyw3nQxGy00vjpv+/P03RUvvA5EkJTIDa8tLmI2wY5CNVIh5TGfPHhtTxUjeiGCAWTOPMpDLST7XNtOkzEHNZBdx4NJ9uOIWvo4IouDMKcysUUP+LiwwH/BtIuMHfyYHPyj+lqGOrx9LKfgSf0kqYxnpCK7y2tqFQu6yZELVWfliqj4rZmnr2VFVF61Xq1gmyeTpjcS4q2glY5Gqb9iYq9363pmNypaFWjk6s0ntHW3jzVjPPcZi1cMXlLkRdwqfk9m9OOLRJxalsKkUmnXTJJPyygW3znykYrHoQr9oJX2iDqXPWiW3mEdd4uHOD4J6D4e7rC6fJZhtQxjFSxFMCpn9cVY/i9axr9en5eNxcv8+f7OhbrYdFurrEPrL6ToZLKMwGgQd12IVBZtlFK/u/Vl9RXQNkpWYyY4rMdNJqf7fF/F9vIja7JiptgpnTzsboqM2s0QnlrnbROIZjol3+OgAiGd45V0Eea0f3GkUm3K3H6bGmlSZARaFo/UyeDKuF5CO9soWEn9d5sSfd6YiFSYxR/5UNtOZL9Xfa9mLNnY8ezLnK8ug/cBPN90oN+dP2M7cT9qg+zRMJ8ksKo+Nxu4qRKlegDOLfT306O/J4sfi51vCz0Wy5vMU/KZmtrNcKfxJU9PPXfnJ4Q7jNnKx04FcTKhxuZiQTC52AaQjCs3LxU2bdI5cjBHwvG9KLg6ElYqtVGylYisVW6nYSsVWKu5AKjZXBysUW6HYCsVWKLZCsRWKrdBlheIugLP0w0nqK+aZynTihzN/ric7FkcWR1Yw/sYEY7f1uQvQGWFu8rgFyLIdxq6WjJFWW0eUAG5UMm7TqLO2GLN2DajNcRlwu8isT8nEM381EUEQzVRAWo3YasRWI7YasdWIrUZsNWKrEVuN2GrEViO2GvHL14h7lIen/sIqW1bZsluJrTJs8fOd48dfrvT4baFjoWOhcxl0VrEfxXbcseCx4GmSt0mRymxxvzfwzKsWiCx6LHquET3TjR14LHQsdC6Czr0IF3bgseix6GmOHjvwWOjYPZhXuAez/vxp3nofJqEjhE3uw9QOIIDuGOn9lwgrd4B6L/+46X9/+vj7+yiW9por09dcFULQ2GHT9nYr07dbee1vt0LZvU8MYOpgo7dbwex2q+wuK8gQH3MOPKp8I4gB49zo5VbljSy5ZQYBL7uxigOnxpTr61d1qQ5w60w54HjbUupwe7WVvdqqK3aoSFNQ63s6PeBiwkcuBcTxmEFi2DlS0CAeG+sT6iHPHHPW1HGfacs/pYKlCN6LVATRwiYvhpOXqri0Scz1XtHZ+o5ORD01sKIRd4HjNN16et4VfA6AarTP7uj0OOGuN9bOmcNGapSHLvcM5jGVzTw2ZQwgB/KRhwCvMXU5oIi6+pZO1yGnTT1AdCKjGg8JwZjaXMbmMp2RxMlrOlHrezoVapHJ+3sdpH//inD2+1eoeIKNiAMQM3ktZ6FNJcOl5il4rpWu7yk7/XvbQ5vOb98884bNrgihy9s3n5gkDFVkaA30iGN27wzuVdTrpE2Fdxplv+8ePL+rmb7o66jUTsHV+spPNX64Js8jpU52HilWk4IduFQKCI2Cq9CmEtjgegNVZa8WUgc2FlJmIAX7hRS9EkhRQK8NUhSwWkgd2FhImYEU7hdSrIsUkJtPAd39FFBNmYyngPyk+uzVG+ha1kLqwMZCygykeL+Qcq4QUhQD9vIhpWtZB6lDGwspI5DCnY9S/4mCTZWW2fqgLocYBhQEnHOsIeUQjsfZcqxyCYjT1K8+LeAMVJEa0DiocctlOJ+IOI4eT+hguGXRkzo5DDYF87OLWuGQdSu5nYpk3kUkkz4iGR9EMuklkkldJBMbyX1GctVCeOsdMowAR9Ojyal47sMFGGE2Zp4KZzejZBfiK1gBXyeq1wc/+PMfv7PVb9T76ndJMBpb+C6e52UXvrujJdx6fw5VQZANdib35mydYEC2xMRJ5pNfBS8pEvgs08nuh+iWofpgqLK4tBR1jRTVelcOQUDL/UYzp9wHyTMnSgFD2uN15E2LfOfgZJZvHbT81Ac/lQSlpaeXTE8nJAqM22dRhtdYWS5RKIbKJAo1OubLrKYlikLDSgycxi23EoWB/W34Krbg0BFxgRppc6nt628XcEi9gaoxOY0E4HkFK7sU081SjHO4FOP1uriJX/4WHDUseCPsXRukcM12AdUulxasLKS6gRT7qpBi1wEpAvVG0asapeDpfaI5pA6tLKSMQAqhrjFVJbG03n2DOHDYCCFgcp116wQCF7Lxk0d6BQrLd6amKNIr/K6IGj9LoiQArZ5yjXKv28HJNgBRZ+S5gCPX7Ak3O0cY4/HeU89xLSlZUqqKREtM10hMHRy5pbIVqMKBAYyIY5SZtp4IIJjoE7ioikCiPbseuYKE6cOnPz6+fatP4hrQ7+4oC+p4lFJCPQo5op5rnqYq4tLy1DXylNcJT7Fs2NJHZZnmKZZFHmfEUSkUBwgh7Zl6DrJnBb7Y5XLXIVyvKCIImfoX98JRZTFpOeoKOYrALjiK63jgarg0zlE8jzz9m3/CAPOY9usweAWnmWKI6BvovUHMzvf6IKnSoLQk9VVJKn8eiI2M373Kn6i/i1gs3736P4ZwoJn8zAAA
iVBORw0KGgoAAAANSUhEUgAABh4AAAQzCAIAAAATmsFNAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd3xUVf7/8TslIWVID4E0EnoRUFoggAqoNOkqCqvwxR/LCosuuw/WAiKiC2IBxcWvu6BfBAXp0pIVBdRAiIHwgAgJgUASkiEhPUPaZNrvj+uO40wymRSmhNfzDx8z55Zz7kTg5j2fc67EYDAIAAAAAAAAQNPJHT0AAAAA2EStVufl5cnl8s6dOzt6LAAAAL+SOnoAAAAAsInBYNDr9ZScAwAAp0K0BAAA4BrEUEkikTh6IAAAAL8hWgIAAHAN1CsBAAAnxFpLAAAAtjIYDFVVVYIgKBQKh/QuULUEAACcDFVLAAAAttLr9fn5+fn5+Q7pnWgJAAA4IaIlAAAAWzl2ShrREgAAcEJMiAMAAGgaR4U7bm5uvr6+7u7uDukdAACgXkRLAAAAtnJs3ZCHh4eHh4dDugYAAGgIE+IAAABsxTPaAAAAzBAtAQAA2IrVjgAAAMwQLQEAADQN0RIAAIAR0RIAAICtmBAHAABghmgJAADAVkyIAwAAMEO0BAAA0DRESwAAAEZESwAAALaiagkAAMAM0RIAAICtWGsJAADAjNzRAwAAAHAxjqpaKiwsrKioCAwMDAgIcMgAAAAALFG1BAAAYCvHTohjOh4AAHBCVC0BAADYyrET4oKCggICAmQymQPHAAAAYIZoCQAAwFaOrRuSyWTkSgAAwNkwIQ4AAKBpmJIGAABgRLQEAABgK1Y7AgAAMEO0BAAAYCvHrrUEAADghIiWAAAAbEXVEgAAgBmW8QYAALBVu3btfH19PTw8HD0QAAAAZyGhrhsAAAAAAADNw4Q4AAAAAAAANBMT4gAAAFxDeXm5wWDw8fGRyWSOHgsAAMCviJYAAABcQ0lJiV6v9/b2JloCAADOgwlxAAAArkFcIlMq5f4NAAA4EW5NAAAAXIMYLUkkEkcPBAAA4DdESwAAAC5Ar9eLL4iWAACAUyFaAgAAcAFiyZLAhDgAAOBkuDUBAABwAcyGAwAAzoknxAEAANjq9u3blZWVQUFBvr6+du5anBBHtAQAAJwNVUsAAAC20uv1er3eODfNnqhaAgAAzomqJQAAAFt16NAhKChIJpPZv2sxWmKhJQAA4GyIlgAAAGwlk8kckisJTIgDAADOii++AAAAXAAT4gAAgHMiWgIAAHABTIgDAADOibsTAAAAF8CEOAAA4JyIlgAAAFwAE+IAAIBzIloCAABwAUyIAwAAzom7EwAAABfAhDgAAOCciJYAAABcAFVLAADAOckdPQAAAACXcefOHb1er1AoZDKZnbtmrSUAAOCciJYAAABsVVxcrNVq27VrZ/9oiQlxAADAOVFTDQAAYCsHlg5RtQQAAJwTVUsAAABN45B8R6FQuLu7e3p62r9rAAAAK4iWAAAAbCWWDjmEt7e3t7e3o3oHAABoCBPiAAAAbMWsNAAAADNESwAAALYiWgIAADBDtAQAAGAT42w4oiUAAAAjoiUAAACbEC0BAABYIloCAABoGqIlAAAAI6IlAAAAm1C1BAAAYIloCQAAwCas4Q0AAGCJaAkAAMAmjo2WNBqNXq93SNcAAABWEC0BAADYxIHRklarzc7OvnHjhv27BgAAsI5oCQAAwCYOjJbEeiXm4gEAACckd/QAAAAAXIMDoyV3d/fu3bvbv18AAIBGUbUEAABgE5bxBgAAsES0BAAAYBMxWgIAAIApoiUAAACbULUEAABgiWgJAADAJkRLAAAAloiWAAAAbEK0BAAAYIknxAEAANjE3d3d39/fzc3N0QMBAABwIhIWpAQAAAAAAEDzMCEOAAAAAAAAzcSEOAAAAGenUqnUarVCofD09HT0WAAAAH6HqiUAAABnV1VVVV5erlarHT0QAAAAc0RLAAAAzk6v1wuCIJVy5wYAAJwONygAAADOjmgJAAA4LW5QAAAAnJ34SF+iJQAA4IS4QQEAAHB2VC0BAACnxQ0KAACATQwGg16vFwuI7EyMliQSif27BgAAsE7u6AEAAAC4hsLCQpVKFRgYGBAQYOeuqVoCAABOixsUAAAAm4j1SvYvHTIYDKy1BAAAnBZVSwAAADbp0KFDhw4d7B8tiSVLAtESAABwSkRLAAAANnFUsmOcDcdaSwAAwAnx3RcAAIBTY6ElAADgzLhHAQAAcGo6nU4gWgIAAM6KexQAAACnRtUSAABwZtyjAAAAODWiJQAA4My4RwEAAHBqREsAAMCZcY8CAADg1IiWAACAM+MeBQAAwKmJ0ZJMJnP0QAAAAOohd/QAAAAAXENpaaler/fz85PL7XoHRdUSAABwZtyjAAAA2KS8vLysrEyn09m5X6IlAADgzLhHAQAAsInBYBAEQSKR2LlfMcwiWgIAAM6JCXEAAAA2cVS0FBAQ4Ovr6+HhYed+AQAAbEG0BAAAYBNHRUuenp527hEAAMB2VFYDAAA0TsyVBEdESwAAAM6MaAkAAKAJiJYAAABMES0BAAA0jqolAACAehEtAQAANI5oCQAAoF5ESwAAAI1z1BreAAAATo5oCQAAoHFESwAAAPUiWgIAAGicXq8XiJYAAAAsEC0BAAA0zlFVSzqdrqampq6uzs79AgAA2IhoCQAAoHFitCSV2vveqbq6Oi8vr7Cw0M79AgAA2IhoCQAAoHGOqlqSSCTt2rVzd3e3c78AAAA2kjt6AAAAAC7AUWstKRQKhUJh504BAABsR9USAABA43hCHAAAQL2IlgAAABrnqLWWAAAAnBy3RwAAAI1z1IQ4AAAAJ0e0BAAA0DgmxAEAANSLaAkAAKBxTIgDAACoF0+IAwAAaJyXl5dMJnN3d3f0QAAAAJyLRPwKDgAAAAAA4G5YtWqV2X9tPEqv16ekpFy6dKmwsFCtVrdr1y4oKCgqKqpv374dO3a07EIQhJiYmAkTJlieLS4uLjk52WxnI61We/HixatXr+bn51dXV8tksoCAgB49egwdOtTb29vGAd+zqFoCAAAAAABOp66ubvv27bm5ucaWmpqa3Nzc3NzchISEhiKq1NTURx99VC7/Xdyh0WhSU1Mb6igvL2/Pnj0VFRXGFq1Wm5+fn5+ff+bMmYkTJ95///0tvZg2jWgJAADASen1+ry8PJlMFhoaygriAIC2wTISaqia6dixY7m5ud7e3qNHj+7evbtCodBoNMXFxVlZWZcuXar35GFhYUqlMi0trX///qbtaWlptbW14lazQ/Ly8rZu3arVakNDQ2NiYjp37qxQKLRabWlp6dWrV8+ePfvNN98QLVlHtAQAAOCkdDqdWq2WSCTkSgCAe9Dly5cFQZgxY0bXrl3FFplMFh4eHh4ePmrUqHoPGThwoFKpTElJMYuWzp8/LwjCoEGDzKIlnU63d+9erVY7ePDgiRMnGp/XIZfLQ0NDQ0NDY2Nj4+LiWv3S2hiiJQAAACel0+kEQZDJZI4eCAAADnDnzh1BECIiImw/pF+/ft9++21OTk5xcXFQUJDYWFxcnJOT4+7uft999x06dMh0/9TU1PLy8o4dO5rmSqbc3d2nTZtm2pKbm5uYmJibm1tTU+Pp6RkZGRkbGxseHm66j1iB9cYbb6SkpJw/f764uFij0bzxxhvi1rKyssTExOvXr6tUKrlc3qlTp5iYmF69etl+mc6GaAkAAMBJ6fV6QRDqvdMFAKDNa9++fUVFRWZmZp8+fWw8RMyPzp8/f/78+ccee0xsFEuW+vXrZ/mk14yMDEEQhg0bZuO/tmfPno2LizM+D62ysjItLS09Pf3xxx8fNGiQ2c5Hjx49d+6cWeP169d37dpVV1cnvtVqtVlZWVlZWQ8++OCYMWNsvExnQ7QEAADgpMRoiaolAMC9qX///gkJCfv3779+/XrPnj3DwsJseVjboEGDzp8/f/HixbFjx8pkMp1Od+HCBUEQBg4caLlzfn6+IAidO3e2ZTwFBQXx8fEGg+GBBx4YOXKkn59feXl5QkLChQsX4uLiIiIiOnToYLp/SkpKbGzswIEDAwICxOhKpVLt3r27rq6uX79+sbGxgYGBNTU1ly9fPnny5E8//dS1a1cbR+JsiJYAAACclDghjqolAMC96eGHH1apVBcvXkxJSUlJSREEwcfHJyoqasCAAcbVlyyFhYWFhITcvn37ypUrffv2vXLlSnV1dceOHcPCwix3rqqqEgShffv2tozn559/1uv1PXr0mDp1qtgSGBg4bdq0ysrKzMzMpKSkKVOmmO4/ZMgQY+WUKCkpSa1WDxgwYPr06WKLu7t7bGysTCaLj49PTk520WiJOxUAAIDGabVajUZjLIC3D6qWAAD3MplMNn369BdeeGHUqFGRkZHu7u4qlSo1NXX79u27d+8Wv4Cplzg3TZwHJ2ZSlrPVmiEnJ0cQhJEjR5q1i2uKZ2dnm7UPHjzYrCUzM1MQhJiYGLP2vn37CoKQm5vb8kE6BFVLAAAAjcvLy9NoNOHh4Z6ennbrlKolAABCQkJCQkIEQTAYDLdv305LS0tKSkpLSwsKCmpocaL+/ft/9913N27cuHHjRlZWlpubW79+/erd09vbu6Ki4s6dO/7+/o2ORKVSCYIQHBxs1i7OgxMXHTdlec6ysjJBELZs2SJejrFdfC2WULki7lQAAAAaJ5FIpFKpnVMeqpYAADCSSCQdO3YcM2aMOJssNTW1oT09PDz69OljMBj27t1rMBj69u3r4eFR756dOnUS/luO1Orc3NzMWsQISa/X6/V6gwlxq5U6LCdH1RIAAEDjHLL2AVVLAABY6tatm1BflZCpQYMGXbx4sbq6WmhgAW9Rz549r1y5kpSU1L9//0b/wfXx8SktLS0qKoqMjDRtLywsFGxbsMnX17ekpGTJkiWBgYGN7uxCuFMBAABwUlQtAQBgKS8vTxAEhUJhZZ/IyEhx5lpwcLBZEmSqf//+fn5+BQUFcXFx4j+7Zurq6r755hvxtfg90+nTp832OXXqlCAIUVFRjY68R48e9Z7B1VG1BAAA4KSoWgIA3Ms2bdrUq1evzp07BwcHe3t7GwyGO3fuXLlyRYxy+vTpY/3wxYsXN9qFTCZ74okntm7deu7cuVu3bg0bNqxz584KhUKr1ZaWll69ejU5ObmqqmratGmCIMTExFy8eDEjI+Pw4cMjRozw9fWtqKhISEi4du2aTCazXJzbUmxs7MWLF8+fP19VVTV06NAOHTp4e3vX1dWVlpZmZ2f/8ssvCxcutO2zcS5ESwAAAE5K/PqUaAkAcG8qKioqKipKSEiw3BQREfHwww+3Si/h4eHz5s3bs2fPrVu39u/fb7bV3d1dzJUEQejYseOECRPi4uJSUlLEB8+JJBLJxIkTxbXGrWvfvv3s2bN37dqVkZGRkZHRKuN3BkRLAAAATkqsWmJCHADg3rR48eIrV67k5OQUFhaKT0/z8vIKCQnp27fvgAEDWvGrl/Dw8CVLlogVSQUFBdXV1TKZLCAgoEePHkOHDvX29jbuOWTIkJCQkDNnzty8ebOmpsbT0zMyMjI2NjYiIsL2vhYtWnTu3LmMjIzi4uK6ujp3d/fAwMDu3bs3WofltCSmj7sDAACA87h27ZogCNHR0XI5XwcCAAAnRX014PJWrVq1atUqR48CANDKjE8gpmoJAAA4M74Bc7C6urpz585dvXq1qKiotrbWw8MjKCioZ8+egwcPdnd3N+5me3BgmTK4ubn5+fl169ZtxIgRlkvo6/X6lJSUS5cuFRYWqtXqdu3aBQUFRUVF9e3bt2PHjk29lk2bNlVUVNg+YCu7kZUAAO5xxoWWJBKJo8cCAADQIKIlR8rJydmzZ09lZaWxpaqqqqqqKicn5/Tp00899ZT4aMMW0mg04uJnv/zyy/PPP+/v72/cVFdXt3379tzcXGNLTU1Nbm5ubm5uQkJCU8Od77//XqVStXzAAABA4PFwAADARRAtOUxubu62bdt0Ol1oaOiIESM6d+7s6elZU1Nz8+bN06dPK5XKbdu2/c///E94eLhQXwmP2GJL1U9VVVVubu63335bVlZ24sSJmTNnGvf54YcfcnNzvb29R48e3b17d4VCodFoiouLs7KyLl261NTLOXv27KBBg86dO9ekA61fBQAHkkja/np8a9asSUxMPHLkiJV9jJ/DxIkTH3zwwVdeecVeo4MTqaurKykpkcvlwcHBduuUNbwBAIBL4Hswx9DpdPv27dPpdPfff///+3//r2/fvgqFQiaTKRSKPn36PP/88/fff79Op9u7d69xnYVm8/b27tWr1/Tp0wVBuHHjhummy5cvC4IwY8aMwYMH+/r6ymQyDw+P8PDwUaNGvfDCC026nEOHDnl7ez/yyCMtHC0Ae3LOWTZNHVWzr6KqqmrDhg0bNmyw8Tzr169fv359TU1N87qDS9NqtZWVlXb+6YsT4oiWAACAk6NqyTFSU1PLy8uDg4MnT55sWegulUonT56sVCrFWWz3339/y3sUF05Sq9WmjXfu3BEEwfanJDYkISGhqKjoiSee8PDwaOGpLIk1TW+88UZKSsr58+eLi4s1Gs0bb7whCIJSqbxw4UJ2dnZZWZlEIvH19e3Zs+fIkSM9PT0tz7Bq1aoLFy6cPXu2qKhIKpVGRESMHTtW/FguXrwothsMhoiIiEcffdRynamysrLExMTr16+rVCq5XN6pU6eYmJhevXoZd/jwww/Ly8sXLlzYqVMnseXAgQMXL14UBGHAgAFitCcIQn5+/r/+9S9/f/+XXnrJeGxubm5iYmJubq7p0yvFgjVbPgdLarV6//79GRkZUql0woQJQ4YMaeKnjjbLrBCpFYuSWrHEqannMe7f1DHs378/Nja2e/fuNvbbq1evwYMHHzx48Omnn27SCG1x69aturq6qKioVj8zWoWY8tg5jaVqCQAAuASiJcfIyMgQBGHYsGEN3S/KZLKYmJgjR45kZGS0SrSUn58vCIKPj49pY/v27SsqKjIzM/v06dPsMxcVFSUkJHTr1u2+++5r6SgbdvToUcupdps3bzZ9W1xcXFxcnJaWtmDBAi8vL7Od4+Pjf/75Z+Pba9eu5eTkLFiw4OzZs8nJycb269ev5+XlLVy4MCAgwLRx165ddXV14lutVpuVlZWVlfXggw+OGTNGbOzSpcv58+ezsrKM0VJWVpbZC+G/hWPR0dHGlrNnz8bFxRl/p62srExLS0tPT3/88ccHDRpky+dgpqysbOfOnYWFhV5eXk8++aRpXwBMHT58+Mknn2zSIU899dShQ4daN1oqKCh4++234+PjxUpSOCfxb2k7R0s+Pj5eXl6stQQAAJwc0ZJj3Lp1S/h9vmBJ3Cru2RLV1dU5OTnffvutIAj9+vUz3dS/f/+EhIT9+/dfv369Z8+eYWFh3t7eTTq5wWA4dOiQVCqdNGlSC8dpXUpKSmxs7MCBAwMCAow32VFRUYMGDYqMjFQoFHV1dbdu3Tpx4oRSqUxISBg3bpzZGc6ePTtixIiBAwf6+Pjcvn374MGDRUVFX331lUqlsmxPSEiYOnWqeKBKpdq9e3ddXV2/fv1iY2MDAwNramouX7588uTJn376qWvXruJq69HR0WK0FBsbKwhCcXGxSqVSKBQGg0GlUhUXFwcFBQn/jZmMP/qCgoL4+HiDwfDAAw+MHDnSz8+vvLw8ISHhwoULcXFxERERHTp0aPRzMJWdnb179+7q6uoOHTo888wzpqu2A+JvxeJ/jb8niy+0Wu3q1au/+OILlUq1YsWKv/3tb6YHpqSkTJ06ddmyZS+99JJer1+zZs1nn31WUVExbdq0jz/+2Nvb2/LMDQ1g3bp1H3zwgVarfeaZZ9avXy8+ClMikYhzzZRKpV6vN45KrVa//PLLX3/9tSAITz/99Lp169q1a9fQ/mZjePDBBxctWmTMgG7evDls2LD09HRfX1/jeM6dO7d27VrT4Yn91tXVLV269Ouvv3ZzczP7KEaMGPH22283+0dg5tatW6tXr966datard64cePdKPxEaxH/37BzyiOVSk0fFwsAAOCciJYco7q6WrCoITIjbhX3bAbLtbH79ev34IMPmrY8/PDDKpXq4sWLKSkpKSkpYqdRUVEDBgzo2rWrLb0kJyfn5uaOHTu2JRFGQ4uUmxoyZMhjjz1m1jhv3jzja09Pz65duwYFBW3YsOHq1auW0dKIESPGjh0rvg4PD584ceIXX3xRXl4+atQoy3bTOqOkpCS1Wm06qc3d3T02NlYmk8XHxycnJxujJUEQcnJydDqdTCYzRkgGg+HSpUtZWVlBQUE6nS4nJ0cwiZZ+/vlnvV7fo0cPY5IVGBg4bdq0ysrKzMzMpKSkKVOmNPo5GJ07dy4uLk6v1/fs2XPGjBniL+GAkZi/1Bv9rFu3LiEh4cSJEwEBAatXrzbddOTIkfnz52/evFn8v/TDDz/84YcfTpw44efn9+KLL65cufKDDz6wcmYz33333fnz5wVBmDdv3tq1a42TOn/88ceff/45NDTUdOd//OMfly9fFiv1nnvuuTVr1rz55psN7W82huXLly9duvSpp54Ss4DVq1e/9NJLprmSIAgFBQXGMkNTa9asuXr1ampqqsFgeO6550w3hYaGtjzxFwRBqVS+8cYb27dvNxgMGo1GoVAEBgbu2bNH3JqZmVlUVNTQsV5eXgMGDGj5GNAk1dXVFRUVHh4eRPZt0rhx46zflQEAACuIlu4Vvr6+Dz30kNn8O5lMNn369NjY2EuXLuXk5BQUFKhUqtTU1NTU1D59+sycOdP6+g4VFRXHjx8PDg4W63TuqsGDB1s2qlSqxMTEGzdulJeXG2eriQOz3HngwIGmb42/kdbbLq5CJcrMzBQEISYmxuyEffv2jY+Pz83NFd8qFIoOHToUFhYqlcrIyEjTiW+XLl26cePGkCFD8vLyNBpNhw4dFAqFeJSYNI0cOdLs5KNGjcrMzMzOzrblcxAdPXr07Nmz4tnGjh3rnMszw2lt3br1wIEDYqZsXNZaEIRNmzatWbPm6NGjxhW7Nm/e/M0334j/b7///vsxMTEffPCB7R199NFHYWFhgiB8+OGHU6dONUZLH330kVmuJAjCV199dfjwYXHdsY0bN06bNs0YLdW7v6lx48YpFIqvv/569uzZ165d+/bbbzdu3Gi2T0NZ2Jdffnno0CFxnBs3bjSr92w5vV7/6aeffvnll4IgaDQaQRBkMtn//d//GXfIzs4uLS1t6HAPD4+WzGJG82g0Go1GI5fLKSNqe06dOpWSksIfKwAAmo1oyTG8vLxUKpVKpTJd0MeMSqUS92xeF2Lhj1arLSws/O6777Kysr766qtFixa5ubmZ7RkSEhISEiIIgsFguH37dlpaWlJSUlpaWlBQkHEhoXodOXJEo9FMnjy5hSuMWtYoWbL8lrioqOjzzz+v92E9Wq3WstHPz8/0rbGip9520wfzlZWVCYKwZcsW4fe/iIqvq6qqjC3R0dGFhYU3btyIiIgQU6EuXbqIu2VnZxsMBsuFlsSfsuWjrMV5cKYJl8jKt+VirjR69OiHHnqooX2AhuTl5XXr1s2yff369XPnzjVdCT4nJ8d0Afumzg/q0qWL+KJr165KpdLYHhkZabnzrVu3jPt369at0f3NLF++/OWXX541a9Ybb7zx97//3fKv006dOt26dcvywpVKpWm/ZkOqt9CpSaRS6VtvvfXiiy++++67mzZtkkqlKpVq7dq1VrJjOFxpaWlJSYmPj4/4LybaErH6GAAANBsLQzqG+GW76awrS+JW61/LN0oul4eGhs6ePTs4OLisrCwpKcnKzhKJpGPHjmPGjBFnfqWmplo/+bVr1wwGw+eff77KhLjJ9HWrsEzEvv/++5qamrCwsOeee27ZsmUrV65ctWrVihUrGjpDQ1U8jVb3iNmQXq/X6/UGE+JW0xBKzIyysrIKCgpqamoCAgL8/Pz8/f39/f1ramry8/PFn6nxV9ZmsPwcjMQHS/3888+mv34DZhr6Hz4iIkIs0DPz448/7tmz57333jO2REZGZmVlGf8gGP8I2FgoJwas4guxLMjK4aGhocb9MzMzG93frHHKlCnu7u6vvvrqmTNnFi5caLn/4MGDT58+bdkeFhZm7Pf69eumm06fPj106ND6rqzJgoOD33vvvZs3by5atMjd3X3lypWtclrcJQ5ZawkAAMAlcIfkGD179hQEISkpyTSYMKXT6cTHmYl7tpCbm5u49lBSUlK9FT1mxG/pLUtmnIpYFvTEE0906dLF29tbvN0vKSlp9Y7ExVmWLFmyqgHGPaOioqRSaV5envgEQGN1kpglZWRkKJVKqVRq+u2ouLKD5aIqhYWFgiC0b9/e9nHOmTOnS5cu1dXV27Zts5xJB4iCgoLS09Mt2+fNm7dkyZIbN26UlZUtXbrU2B4eHv7jjz9+9tlnxuWuX3jhhQULFqSnp9fV1f3yyy/GdbIbOrOZpUuXKpVKpVK5dOnSOXPmWN/5mWeeeemll/Ly8vLy8l566aVnnnmmSVcnkUiWL1/+3nvvrVixot5JTJMnT967d69l++zZs43j/Mtf/mK6ae/evZMnT7Y+jCYJCgp69913lUrlgAEDrly50opnRutyyBPiAAAAXALRkmP079/fz8+vqKjo8OHDer3ebKterz98+HBRUZGfn19rrfHRrVu30NDQqqqqCxcuNLpzXl6eIAjG9YAaYiVnafWqJUtiKieX/25SZ2JiYqt31KNHD0EQ6i1tMOPh4dGpUyedTidWhxmrk8SMSUwSO3XqZPoQKDFmsjz5qVOnhP8WItnIzc1t9uzZ3bp1U6vVX3755dWrV20/FveOV155JTY21vLX42XLlsXGxj700ENdu3Y1m2sWGhr6ww8/bN++/a233hIEYcmSJVOmTJkxY4aPj8+cOXOMcU9DZzYzduzYgQMH9uvXr2vXrq+99pr1nVesWNG7d+/BgwcPHjy4b9++y5cvb+rVyWSy7t27z18USZEAACAASURBVJ07t979Z86cmZSUZPmHZfny5V26dOnXr9/AgQNNF87PyMhITk42rujfigIDA9euXWs60xDORvzHmmgJAADAEtGSY8hkMnGR7AsXLmzZsuXy5cuVlZU6na6qqiotLe2zzz67cOGCcZ/W6nTEiBGCIJw5c8Y4mWvTpk3Hjx/PzMysqKjQarUajaa0tDQxMVF8SpGTr2cprnZx8ODBoqIijUZTWFh48ODBixcvtnpHsbGxXl5e58+f37lz5/Xr1+/cuaPX62tra2/dupWYmPivf/3LdGcxRaqtrZVIJMZgKDo6WiKRqNVqwWI2XExMjFQqzcjIOHz4cGlpqU6nKy0tPXjw4LVr12QymeXa4dbJ5fKnn366R48eWq3266+//uWXX1py4WiT/vrXv5aVlRn/EjC+cHNz+8c//pGbm1taWmqsWjJu7dixY1pa2uuvvy4IglQqXbJkSXp6em1tbWpqqvHhhmZnbsjf//7327dvl5aWfvLJJ8Ylz8yOMr718PDYuHFjQUFBQUHBxo0bjbFsQ/tbjmHbtm1vvvmmWQZt5OXl9de//tXyetu1a/e///u/paWlt2/fXrZsmen5//rXv3p6elq/RrRJVC0BAAA0hGW8HSYiIuK5557bvXv3rVu3jA+cNvL29n7yyScjIiJascfevXv7+/uXlJRkZGSI340XFRUVFRUlJCTUO7yHH364FXtvdQ8//PCOHTsyMzNNF4gZOnRocnJy63bUvn372bNn79q1KyMjQ5zpZkWXLl3EgqOQkBBvb2+x0dvbu0OHDrdv3xZ+v4a3IAgdO3acMGFCXFxcSkpKSkqKsV0ikUycOLEZi8XK5fJZs2bt2bPnypUr+/fvV6vVLAyMe5Ner9+yZUt2dvasWbOs7Pbqq6/afs6jR4+2eFxwVfZfa0mn06lUKrlc3qTJ0QAAAPZHtORInTt3fumll86dO5eRkVFUVFRbW+vh4REcHNyjR4/Bgwcbv89vLVKpdPjw4XFxcadPnxajpcWLF1+5ciUnJ6ewsFB80pmXl1dISEjfvn0HDBjg5IuVdu/effbs2T/99FN+fr5UKg0ODh40aNDAgQNbPVoSBCE8PHzRokXiT6q4uLiurs7d3T0wMLB79+5mtV0RERFyuVyr1ZpFSF26dLl9+7ZcLrd8rNWQIUNCQkLOnDlz8+bNmpoaT0/PyMjI2NjYZgeLMpnsqaee2rdv3+XLl48cOVJbWzty5MjmnQponnorOxotaGpdMpksKipqz549Tv5XGVyF/SfE1dXVFRcXu7u7Ey0BAAAnJ7HzvT4AAIDLUSqV1dXVHTt2tFvQo1ary8vL5XJ5YGCgfXq8Z3Xu3Dk+Pt7J1wEAAMCZUbUEAADQCPtXLbVr164Z06IBAADsj2kCAAAAjRCjJeZXAgAAWOIOCQAAoBH2X8YbAADAVXCHBAAA0Aj7T4gDAABwFURLAAAAjWBCHAAAQEO4QwIAAGiEOCGOqiUAAABLPCEOAACgEWFhYXq9XiaTOXogAAAATodoCQAAoBFeXl6OHgIAAICTYkIcAAAAAAAAmomqJQAAAOei1Wqzs7NlMll0dLSjxwIAANAIqpYAAACci06nMxgM4trhAAAATo5oCQAAwLnodDpBEFg1HAAAuASiJQAAAOdCtAQAAFwI0RIAAIBzIVoCAAAuhGgJAADAuRAtAQAAF0K0BAAAYI1Wq62urq6rq7Nbj0RLAADAhRAtAQAAWKNSqZRKZXl5ud16JFoCAAAuhGgJAADAGqlU2q5dOzc3N7v1KEZLcrncbj0CAAA0G7csAAAA1vj5+fn5+dmzR6qWAACAC6FqCQAAwLlotVqBaAkAALgIoiUAAAAnYjAY9Hq9QLQEAABcBNESAACAExFnwwlESwAAwEUQLQEAADgRFloCAACuhWgJAADAiRAtAQAA10K0BAAA4ESIlgAAgGshWgIAAHAiREsAAMC1EC0BAAA4EaIlAADgWoiWAAAAGmQwGG7evKlUKvV6vX16JFoCAACuRe7oAQAAADgvvV6vVqsFQZBK7fSFHNESAABwLVQtAQAANEgsVpJIJHbrUSKRSCQSoiUAAOAqqFoCAABokBgt2a1kSRCEjh072q0vAACAlqNqCQAAoEH2j5YAAABcC/dJAAAADSJaAgAAsI77JAAAgAYRLQEAAFjHfRIAAECDiJYAAACs4z4JAACgQURLAAAA1nGfBAAA0CCiJQAAAOu4TwIAQFizZs3jjz9ufR+JRCK+mDhx4jvvvHP3BwWnQLQEAABgHfdJAIB7XVVV1YYNGzZs2CC+NUZIDVm/fv369etramru/tDgeAaDQSBaAgAAaBj3SQCAe93+/ftjY2O7d+8uvhWjBCt69eo1ePDggwcPtu4wNBpN654QrcLOVUvl5eX5+flVVVX26Q4AAKDliJYAAPe6w4cPP/nkk0065Kmnnjp06FBrDSApKWnq1Kk5OTmtdUK0Ip1OJ9gxWqqpqamsrCRnBAAALoRoCQDgRMwmoxnfHj9+fODAgZ6enlFRUVu2bBEb9Xr922+/HR0dHRAQMH/+fGOhh0Qi2bBhQ0REhBgH1HusqXPnzg0fPtyy07q6usWLFwcGBnbs2PG9994zPWTEiBHJycktv96UlJQHH3xw+PDhCoWiW7duLT8hWp2dq5b8/PyCg4O9vLzs0x0AAEDLES0BAFzAs88+u3z58vLy8p9++ikpKUls/PDDD3/44YcTJ05cv35do9GsXLnSuP+PP/74888/i6FAvceaKigo6NSpk2X7mjVrrl69mpqaeu7cufj4eNNNoaGht27daskVXbx48ZFHHhkxYsSpU6dkMtnq1atbcjbcPXaOljw9Pf38/Nzd3e3THQAAQMtJGl1RAgAAu5FIfvcPk/FtZGTksmXLpk2bFhERYdzau3fvb775pmfPnoIg3L59OyYmJjs7WzwqOzu7c+fO4m71HmvK09OzpKTEWCdi7LRbt26HDh3q06ePIAiXLl3q16+fcWxVVVXBwcHV1dXNuEa9Xv/iiy9+8sknEolEjC3c3NwUCoVxB5VKJU7CakijC40DMAoJCcnPz7eyQ+fOnePj48U/6QAAoBmIlgAATqShaOn8+fNvvfVWQkJCQEDARx99NGHCBEEQvLy8TB/TJpVKxURGjGyM+Uu9x5rq0qXLsWPHjPPRjJ16enqWlZV5eHgIglBbW+vp6Wkc27Vr18aPH3/9+vXmXWZNTc2nn3761ltv6XQ6lUrl4eFx6dKlgIAAcWtRUZGV0Eomk5nmULjbsrOzDQZDeHi4m5ubo8eCJvvggw927NhRWlpqZR+iJQAAWkju6AEAAPAbDw+P6upqsYCooKDA2D5w4MADBw4YDIa4uLj58+eLNQiRkZH/+c9/oqKiLM9jWtdT77GmBg8efPr0aculjsLCwm7cuCH+wmmWIp0+fXro0KHNvkxPT8+lS5f+6U9/2rx58+rVq0tKSj799FPjck7+/v7NPjNal8Fg0Gq1giB06dJFJpM5ejhoMj8/P0cPAQCAto+1lgAATmTQoEHvv/9+VVVVVlbWwoULje3PPPNMWlqa+Ngs46o3L7zwwoIFC9LT0+vq6n755Zenn3663nPWe6ypyZMn792717J99uzZS5cuVSqVSqXyL3/5i+mmvXv3Tp48ublX+StPT88XX3wxLy9v48aNR48eLS4ubuEJ0erEGYuCHddaAgAAcDncJwEAnMinn34aHx8fFBQ0evTo8ePHG9unTp06Y8YMX1/f119//csvvxQblyxZMmXKlBkzZvj4+MyZM+eZZ56p95z1Hmtq5syZSUlJV69eNWtfvnx5ly5d+vXrN3DgwMcee8zYnpGRkZycPH369JZerSAIguDh4bFkyZILFy4wRd0JiVMspVIp61sBAAA0hLWWAAAQ1q5de+rUqaNHj9qy86RJk0aNGvXKK6/c7VHB4cQJcXq9vl27do4eC5pjxYoVn3zyCWstAQBwV7HWEgAAwquvvmr7zjYmUGgDJBIJq3cDAABYx4Q4AAAAp6DRaGpra8VZeAAAAK6CaAkAAMAplJWV5ebmlpeXO3ogAAAATUC0BAAA4BTEeiWZTObogQAAADQB0RIAAIBTIFoCAACuiGgJAADAKRAtAQAAV0S0BAAA4BSIlgAAgCsiWgIAAHA8g8EgRktyudzRYwEAAGgC7l0AAADqd+fOHZ1O5+3t7ebmdrf7EnMliURC1RIAAHAtREsAAAD1Ky0traurc3d3t1u0RK4EAABcDtESAABA/RQKhUajsc8MNa1WKxAtAQAAF0S0BAAAUL/AwEC79UXVEgAAcFEs4w0AAOB4YtUSa3gDAACXQ7QEAADgeFQtAQAAF0W0BAAA4HhitETVEgAAcDlESwAAAI7HMt4AAMBFES0BAAA4HhPiAACAiyJaAgAAcDyW8QYAAC6KaAkAAMDBDAaDXq8XqFoCAAAuiGgJAADAwcTZcBKJhGgJAAC4HIquAQAA6lFYWKhSqQIDA/39/e92X6zhDQAAXBdVSwAAAPXQ6XQGg0EikdinL4FoCQAAuCaqlgAAAOphz7hHJpO1b9+eNbwBAIAr4g4GAACgHvZcV9vDw6Njx4526AgAAKDVMSEOAACgHmLVklTKzRIAAIA13C0BAADUg/WPAAAAbEG0BAAAYM5gMBgMBoFoCQAAoDFESwAAAObEkiWJRMKEOAAAAOu4WwIAADDHQksAAAA24oYJAADAnD0fDwcAAODSiJYAAADMUbUEAABgI26YAAAAzPF4OAAAABvJHT0AAAAApyNGS3K5Pe6Uqqqq8vPzvby8QkND7dAdAABA66JqCQAAwJw9q5a0Wq3BYLBDRwAAAHcDVUsAAADmtFqtYK9oycfHx9vbm3QJAAC4KKIlAAAAc/asWpJIJPaZeQcAAHA3MCEOAADAHMt4AwAA2IhoCQAAwBzREgAAgI2IlgAAAMwRLQEAANiIaAkAAOB3xFxJIFoCAACwAWtGAgAA/I5er5fL5QaDQSKROHosAAAAzo5oCQAA4Hfc3Nyio6MdPQoAAADXwIQ4AAAAAAAANBPREgAAgMOo1erS0tKqqipHDwQAAKCZiJYAAAAcpra2tqSkpKKiwtEDAQAAaCaiJQAAAIcRn0Ynl7P8JQAAcFVESwAAAA6j1WoFQZDJZI4eCAAAQDMRLQEAADiMWLVEtAQAAFwX0RIAAIDDiFVLTIgDAACui2gJAADAYahaAgAAro5oCQAA4DcGg+HWrVu3b982GAx26I5lvAEAgKsjWgIAAPiNVqutqqq6c+eORCK5233p9Xq9Xi9QtQQAAFwZX5EBAAD8RiaThYSE2LNkSSKRSKV82wcAAFwV0RIAAMBvpFKpj4+PffpiDW8AANAG8BUZAACAY7CGNwAAaAOIlgAAAByDqiUAANAGEC0BAAA4BlVLAACgDSBaAgAAcAwxWqJqCQAAuDSiJQAAAMcQJ8RRtQQAAFwa0RIAAIBjULUEAADaAKIlAAAAx6BqCQAAtAFESwAAAL8yGAw1NTUajcY+3VG1BAAA2gCiJQAAgF+p1eq8vLy8vDw79KXT6QwGg0DVEgAAcHFESwAAAL+yZxmR2JdUKpVIJHboDgAA4C6hABsAAOBX9lz8SCaThYSEiIVLAAAArotoCQAA4FditGSfqiWZTObj42OHjgAAAO4qJsQBAAD8SpykxuJHAAAAtiNaAgAA+JU9q5YAAADaBqIlAACAXxEtAQAANBXREgAAwK/EaMnNzc3RAwEAAHAZREsAAACCIAh6vV5ca4mqJQAAANsRLQEAAAjCf0uWpFKpVMoNEgAAgK24cwIAABAEFloCAABoFqIlAAAAQbBvtGQwGGpqajQajR36AgAAuKuIlgAAAARBEMSgxz5reKvV6ry8vLy8PDv0BQAAcFdR8g0AACAIdq9acnd3l8lkdugLAADgriJaAgAAEAT7Rkuenp6dO3e2Q0cAAAB3G9ES8BulUqlWqx09CrQRPj4+QUFBjh4FgCZgGW8AAIBm4OYJ+M2MGTPS09P5pQItV1tbO3/+/H/+85+OHgiAJrDnWksAAABtBr9CA7/zzTffjBkzxtGjgMtbt25dbm6uo0cBoAl0Op3BYBCoWgIAAGginhAHAADw62w4mUwmkUgcPRYAAABXQrQEAADAQksAAADNxP0TAACAIJPJfHx8iJYAAACaivsnwKlJJBJx7Q+0EJ8kAOs8PDw8PDwcPQoAAADXw4Q4APUrLy8fPXq0o0fhvIYPH65SqRw9CgAAAABwMKIlwKk5sNDm7bfffvLJJ1vxhKGhoa14tqZq9U9yzpw5a9asad1zArhH1NbW5uXlFRUVOXogAAAArYBoCWgptVrt6CHUo4WjKi0tPXTo0B//+MdWPHN+fr71HZzzk2zIwoUL9+3bV1pa6uiBAHA9Go2mpqbGtf7SAwAAaAjREtCgAwcOuLu7SyQSX1/fGTNmnDx58r777jPdYdeuXWFhYR4eHgqFYty4cSkpKaZbJRKJ+ATrY8eODRgwoEePHkePHjXdZHy+tdlb0bVr1ywbRRkZGTNnzvT39/f09Bw1atTx48d79Ohh46hs9MUXX8yaNctsOVsrZw4LC5NIJF26dBHfdu3aVSKRREREiG+7desmXojEhI1nFneurKycNm2au7u7u7v7gQMHjFsb/RkJVj/J9PT0adOmhYWFhYWFzZgxIyMjw8Z+BUFwc3ObMWPGF1980finCQC/p9PpBEGQyWSOHggAAEArIFoCGjRr1qxdu3YZDIaysrJ//etfSqWysLDQuPXkyZPbtm07cuRIdXV1QUHBa6+9tnjx4nPnzhl3EGdgffTRR8nJyfHx8RkZGVu3bhU33blzJyQkpKqqSnxbWVkZEhJy584d0967d+9e7xyu9PT08ePHjx8//vLlyyqVaufOndeuXTPWzjQ6KhsdOXLk0UcfNW2xfubTp0+PHz/+9OnT4ttTp06NHz/+1KlT4tvMzEzxWgwmbDyzuOeyZcv+9re/qdXqXbt2zZo1y3is9Z9Ro5/k3LlzN2zYoFQqlUrl+vXr582bZ0yXrPcrGjdu3KFDh2z+UAHgV2K0xNPoAABAG2EA8F9Dhw49fvy48W379u3j4+MrKirq3fnBBx/MysoybUlNTX3kkUdMWwRBOHbsmPGtVqs1vp4zZ86XX34pvt6+ffsf/vCHenux/EM6ZcqUL774oqFLsGVUtggKCiouLm7SmXNycsaPH69UKvPy8saPH5+Tk2N2zob+wmn0zIIg7N69u97zWP8ZWe998uTJcXFxpi1xcXFTp061pV9RYWFhYGBgvd298847ixcvbnRUAO5NBQUFV69eLSkpcfRA2r7ly5f7+/tb3ycyMvLy5cv2GQ8AAG0SX5cBDUpKSlqyZMmpU6c6dux43333eXp6fvzxx506dRK3JicnR0dHmx3i5eVl1mJa+2M69+HZZ59dv379nDlzBEHYvn373/72NxtHdfLkyS1btjS01cZRNaqsrMzX17dJZ46MjPz3v//9/PPPGwyGzZs3G2fDNcqWMTe0oLj1n5F1J0+eNNaRiYYOHWpWmmR9IXM/P7+Kigpb+gIAU1qtVqBqCQAAtBXc0wAN6tOnz/Hjx01bJk2aZFwvydPTMz09PSoqqnknf+SRR55//nlxZeu0tLSxY8faeKBOp6t32aBWGZWRr69veXl5UFBQM87c0MJGDWnJmK3/jBplsJgoZ9liRXl5uZ+fn+37A3BaOp1OKpU26e+uFnYnsNYSAABoK1hrCWiCuLg44+tJkyZ99dVXzT6VTCabNWvWjh07vvrqq1mzZtn+C8bw4cOtrO/TwlEZ9evX7/Lly006882bN//4xz9+9tlnW7ZsWbBgwc2bN613YXw0UmuNWWT6M7Ju9OjRSUlJpi1nzpyxPeMTBOHSpUv9+/dvwuAAOKvbt29nZmbarQ6RqiUAANCWEC0BDQoODj548GBZWZn4NjEx0c3Nzbh17dq1mzdvfvvtt7OzszUaTWlp6bfffjtp0iTbz//ss89u27Zt+/btzz77rO1HrVmz5vXXX//+++8NBkNNTU1GRsaWLVvmz5/fWqMSTZky5dixY6Yt1s+ck5OzcOHCzz//PDQ0NCws7LPPPlu4cGFOTo7pGdzc3MSHrOXn53/88cexsbEtH7P1n5F169atW7FiRWJiolar1Wq1iYmJK1euXLdunY2HC4Jw7NixyZMn274/AKdl53W1qVoCAABtCdES0KDo6OjQ0NBFixaFhoYOGjTo6aef3rVrl3FreHj46dOnMzMzhwwZolAoYmNjzdbuESdWSEyYnf/+++/X6/UGg2HAgAFmm0wPMTt86NChBw4cWLdunb+/f2ho6LPPPltbW/vPf/7TxlHZaO7cubt379ZoNDZe77Bhw/7zn/8MGzZMfBsTE/Of//zHGB6JxIesSaXSmJiYzMzMI0eO2HJm44dQ71vrPyPrn2Tv3r137Njxzjvv+Pv7+/v7r1u3bufOnT179rSlX0EQNBrNvn375s6d29TPFoATioiIiI6O9vT0tENfYq4kEC0BAIC2QtKkhUWAti0mJmbt2rVjxoxx9ECcwt///vfIyMg///nPjh6Ik9q0adPNmzcbqnJat25dbm6uMfIDACO1Wn3z5k2ZTNalSxdHj6XtW7FixSeffFJaWmpln86dO8fHx/fp08duowIAoI2haglA/ZYvX/7ll186ehTOa9++fa+99pqjRwHA9dh58h0AAMDdxm0NgPr5+vqarXINUydOnHD0EAC4JHENb2bDAQCANoNoCQAAwH5YwxtwrKqqqitXrjh6FLArd3f3fv36OXoUQFtGtAQAAGA/YtUSE+IAR0lLSxsxYkRERISjBwI70Wg0BoMhNzfX0QMB2jJuawAAAOyHqiXA4bp165aWluboUcBOrly58uijjzp6FEAbxzLeAAAA9kPVEgAAaGOIlgAAAOyHqiUAANDG8I0Z8Jtr166NHTvW0aNAG9G/f39HDwFA4zQaTXFxsYeHh7+/v316JFoCAABtDNES8JuuXbu+/vrro0aNcvRA4PI++uijgoICR48CQOPUanVlZaVWq7VPtGQwGMRoiQlxwD1FIpEYDAZHjwIA7hZua4DfSKVShUJhty+u0YZ5enryeyPgEurq6gRBcHNzs093Yq4kkUioWgJwV6Wmpg4YMEAQhHojLetbAaCpWGsJAADcuzQajSAI7u7u9ulOLpdHR0dHRkbapzsATsL+CU7//v2tdGp9690TGhpq/04B2AHREgAAuHeJVUt2i5YEQZDL5fbsDgCcR35+vvUd1Gq1fUYCoHURLQGuRCKRWNlkZWvLzw8AbZKdJ8QBaGMyMjJmzpzp7+/v6ek5atSo48eP9+jRw3SHa9eu1XuTJjZWVlbOnDnT29u7d+/ee/futb3fd999d8iQIT4+PhEREUuXLi0pKWmFixEEQRDS09OnTZsWFhYWFhY2Y8aMjIwM063Wr9fKqLp16yZ+CBITpmfetWtXWFiYh4eHQqEYN25cSkpKa10RADsgWgKs6dSpk1lL+/btW+vk1dXVTT3ESulyq1Q1236SVvwcAMBRdDqdXq8X7Fu1BKDNSE9PHz9+/Pjx4y9fvqxSqXbu3Hnt2rXS0lLTfbp3717v/ZXY+P777y9YsKCkpOTbb7/9+OOPjx8/bmPXAwYMOHv2rEqlunjxokKhmD59essvRxCE9PT0uXPnbtiwQalUKpXK9evXz5s3z5guNXq9VkaVmZkpXrLBhHHryZMnt23bduTIkerq6oKCgtdee23x4sXnzp1rlYsCYAdES4A1Zg/5CggIqKystPymRXwbFxcnCEJcXJxEIomIiDC2Hz9+vEOHDoMHD87JyRH3LyoqGjJkiLe3d0hIyJ///GdbMibxtGZf71RVVc2bN0+hUDzwwAOXLl0yO2To0KFDhw618UrrPb/Y8vHHH4eHh7u7ux84cMD65wAArkUsWZLL5fxVBqAZXnnllTfffHPBggWhoaFubm7h4eF/+tOfiouLbT/DAw88MH78eA8Pj8jIyPfff3/t2rU2Hjhu3DjxRUBAwKpVq06dOtXk0dfn5ZdffvPNN6Ojo8W3UVFRK1eufPnll8W3jV5vs0e1atWqTZs2PfDAA56engqF4qGHHtq8efOrr77aKhcFwA6IloAmEL+Wsfym5cyZM8OGDZs4caIgCBMmTBg8ePDRo0eF/34fVVJSkpub+/LLLy9dulTcf9myZe+//35dXd3169fHjh27bNmyRrueOHGi5VdeL7/8cqdOnUpLS7/77rvDhw+bbTUbZDPOL7bcunUrLS1t165ds2bNsv45AIBrsfMa3gDamJMnT06YMKElZxg1apTxdf/+/ZOTk205Sq1Wr1mzplevXl5eXkFBQePGjWut+7GTJ0/GxMSYtgwdOvTEiRPGrVautyWjSk5Ojo6ONp0r179//8TExGZfCAA749nYQD3CwsJu3bolvha/yg4NDVUqlQ3tP2zYsE6dOu3fv3/GjBn79u3r1q1b//79jVsfe+yxdu3aTZgw4fnnnxdbDh8+/MUXXxh3CA4O3rRpUzPGuWPHjszMTHd396CgoD/+8Y+vvfaa6dazZ88245yWxC/Qpk+fLv4OBhudOnVq4cKFjh4F2qb58+eb3fqjeey/hjeAtkSn07VuzaONfx395S9/CQ4OPnXqlJ+fn0ajycnJ6d27d2uNoaHvGoXGrrclo/L09ExPT4+KimrWkAE4HtESUA9jiiSRSKx831JXV2e8A1izZs0TTzwxadKk1atX79u3r9795fJf/8QNGjTo2LFjrTrkX39BcgjTzwFG7du379Kli6NHgTZo27Zto0aNIlpqFazhDaAlhg8ffujQofnz5zf7DImJiY8//rj4OjU1ddCgQbYc9fXXX2dlZfn5+QmCIJfLAwMDmz0AM6NHj05KmZ7dRwAAIABJREFUSpo0aZKx5cyZM2PHjhVfW7/eZoxKrVa3a9dOEIRJkyZ99dVXy5cvb4VrAOAIREtA07i5uR04cODxxx///vvv165d+9NPP4ntvXr1Gj58+OTJk2NiYrp37256yKlTpx577LH4+PhHH31UbJkwYcKWLVvGjx8fGhoqlTZ/XurTTz/9wQcfrFq1qqio6N133zXbKi60ZGNldVM19DnAaMCAAca1CYBWlJSU5OghtB1MiAPQEmvWrJk+fXpkZOTYsWNra2tv3ryZkJCQmJj4+eef23iGGzduHDt27KGHHiosLFy2bNmaNWtsOap79+7//ve/Fy9erFarDx8+vGPHjhZcxO+sW7du9uzZ/v7+xtvIlStX7ty5U9xq/XptGZV4Azl9+vT8/Py9e/du3bpVfBLc2rVrR44caTAY/vCHP4SFhd25c+fs2bMbN24Ul5gA4PxYawmwpkOHDmYt4pJD/v7+W7Zs+eyzz0w3vfrqqz/99NPKlSvNDgkNDe3ateuGDRvWr18vtrz44otFRUWjRo0KCAgYN27cO++80+hIjAtmm66c/d577+Xl5fn7+0+YMEH8Bsm0Slmn09k+xb3e8xtbzP5r/XMAAJdgMBjsHC0ZDIaSkpLy8nJWqQPahqFDhx44cGDdunX+/v6hoaHPPvtsbW3tP//5T+MOps88qff5J4sWLdq3b19QUNDo0aMXLVoUGxtrS7/bt2+Pj4/v0KFD//79L1++vHfvXuH3N4HW+7WytXfv3jt27HjnnXf8/f39/f3XrVu3c+fOnj172nK9jY5K+O8NpFQqjYmJyczMPHLkiNgeHh5++vTpzMzMIUOGKBSK2NjYkydPbt261ZZPA4AzsDbZB7jXxMTErF27dsyYMc07/OOPP75x48aGDRtMG61PqUNbtW7dutzcXNObS6C1TJ8+febMmX/4wx8cPRCXp9FosrOzJRJJt27d7NOjVqvNysqyZ49YsWLFJ598YvYweDOdO3eOj4/v06eP3UYFxzp79uzcuXPT0tIcPRDuEu3kypUrjz76aG5urqMHArRlTIgDWofxO5n/z969Bzd1nokff+WLjC35Jmwpsk1ISLgE2rSAMSQbfp0lccAmUOylmJ2lwECbTpoQNrSES5hMmikYYhM2YUOXYi/QpElIMF5uJjfCDBBIYNPdtsaBcmnAlvEFywLL2JYs6ffH2SiKbMuykHV0+X7+YKT3nPO8zzktQXr0nue4lpacPwfxuQEAgo0sPbxTUlL4FwEAAIQZSkuAf/T6VYHvDwAQtALfwzsmJiY9PT1g0wEIZvwACSCc0GsJCBY6nU7Rg06nkzsvAAhPUmlJejgRAASY4xtyJwIAfkBpCQgWjY2Njh4aGxvlzgsAwlNXV5fg8XAAgs/w4cN7/twoGT58uNzZAUAvuCEOAABEIll6LQFAv65evSp3CgAwMKxaAgAAEcdisTgcDoVCQWkJAADgDrFqCQAARByr1SpYsgREJJvNZrFY/v73v8udCALEYDDY7Xa5swDCHKUlAAAQcVQq1YgRI2w2m9yJAAi0CxcuXL58ecSIEXIngsDhiQ3AYKO0BATCQJ8s65cn0UoPte01zmA/6dZDfA9Z+SU+AHgpOjo6Ojpa7iwABNrYsWMfeOCBmpoauRNBgJw/fz43N1fuLIAwR68lwBO9Xu+XOD3rIImJiQPa3y+T+pzPoE7t3/hu/HteAHAnuCMDAACEJUpLgCcNDQ2ubzs7O5cvX67T6fR6/a5du0aNGiWNS4+DNZlMS5cuTUxMXLlypfOQqqoqaatrHI1GYzabnc+Rdd3U6/59zSuEWLZs2ejRo1UqVW5u7rFjx/o9owHlI72tqqpyHjhs2DAf4re3ty9evFitVo8fP766utrtkJycnJycnH4z9xBfGtm6dWtWVpZSqaysrPR8XgAQeN3d3ZcvX758+bLciQAAAPgZpSVgANauXWuxWKqrq69cuaJSqYxGozQuLaIpLCycOnWqwWCYMWOG85D8/PyeS2ykAx3fcN3U6/59zSuEKC4uvnDhgslkWr169ezZs/s9hQHlc/r06SlTpuTn5wsh8vLysrOzDx8+7EP8VatW6fV6o9H48ccfHzx40G1rz4sw0PjSSH19fU1NzZ49e4qKijyfFwAEXnd3txAiKoqPXgAAINzQawnoRWZmZn19vfRaWu2SkZFhMBjeeeedc+fOaTQaIcRPfvKTn/zkJ65HHThwQK1WCyEeffRR/+bT17wXL15csWLFqVOnurq6JkyYYDab/TvvlClT9Hr9vn37CgsLKyoq7r///gcffNCHOG+//falS5eUSmVaWtqTTz65du1a161nz571S7bFxcVCiIKCAunBT7L7r//6r88//1zuLBCGLl++fP/99y9YsEDuRDAwUsvwmBg+egGhZDDaR3pzoCxtOgHAZ3y+AXphMBikF27/Tku/OfdFqiv5wGKxeH4Adl/zzps3b/78+eXl5RqN5saNG/7qDOWaz4YNG+bOnTtz5syXX365oqLCL8HvPIjPUwfyQeOTJk16+umnAzYdIkdRUZHf68gIAOm/5DQOB4KTXq+/fv16z3HP7SN9u93emwMHWicaUBvKtra2AQUHgH5RWgIGYO7cuaWlpRs2bGhubj558mRFRcVbb73lW6jY2NjKysonnnjik08+KS4uPn78uA/zGgyG7OzspKSkmpqad99917dMPOczZsyYhx56aNasWZMnTx45cqRvwefPn7958+aXXnqpubn5lVdecdsqNVo6c+bMneTflwFdZ//KzMx87LHHAjYdIgdPUA5R0qolSktAcHJrrymEqKqqmjlzpvhu1aa9vf3pp5/eu3fvyJEj33zzTbdDBvSR5tq1a/Pmzbtw4UJBQcHWrVtVKpWHeW/fvr18+fK9e/fee++977zzzpgxY5w79Lq/VLp6/fXXN23a1NTUtGfPnoKCAuHShlLajYVOAPyFG/4BT7Rarevb0tJSk8mk1WrHjRu3f//+kpISaVz6F7rXdtHOEbdNUkug1NTUsrKy8vJyz/v3Ne/27duXLl2q0WhWr169cOFCZyYe5h1oPkKINWvWHD9+/MUXX/TmivUav6SkpK6uLjU1NS8vb8mSJa55CiFsNpv3n2x6je8ccfvT83kBQCBJq5a4IQ4IFYPdPnLXrl179+69fPmyWq1+/vnn+51Xo9E0NDScOHHigw8+EC5VIdpQAggG3JQLfGvy5MnFxcXTpk2TO5HgsnXr1itXrmzZskXuRELJpk2bamtr//3f/13uRBCGMjIyfvzjH//ud7+TO5FQZbfbGxsblUrl0KFDAznv9evXzWZzenp6SkpKIOeNcOvWrdu2bZvr4y96Gj58+JEjR8aOHRuwrCCvs2fPLlq0qKamRny3vaZEaq/pfOvWG0Gj0Vy6dElqf9nS0pKWlubblymFQlFXV5eZmSmEMBqNY8aMaWpqctvBNbJWqz1//rw0b3Nzs1ardZu3Z68l15G+XkeI8+fP5+bm1tbWyp0IEM746QyAJ87lP5SWAISHrq4us9kcExMT4NISbbyBINRXe01v+Kt9pN1u7/fZka7Lvf1YGApwG0oAYYwb4gB4wpJpAGEmNjZWq9WmpqYGeF7aeANhQGofabVa6+vrN23a5LY1JydHarfkjR07dtTV1bW2tq5fv37evHmedy4qKtqyZYvdbjebzWVlZb6k/g2pDaXVaj1y5AhNIQH4C6UlAAOj0+kUPeh0OrnzAgCvxMTEJCcnB/6uNNp4A8HMrb2mGMz2kdIhixcvLiwsHDFihNls3rhxo+d5N27c2NDQkJaW9sgjj8yaNavfPGlDCSDAWJUNYGAaGxvlTgEAQozdbrfb7YIb4oBg1fPjTa9FIpVKtXv37t27d/e6z5dffunNXM6jen2WXK/zJiQk7NixY8eOHVar9dChQ66twXrd33XQbYeCggJ/3coHAE58vgG+1draWlxcvHPnTrkTQcg7d+7cvffeK3cWAIKFtGRJoVD021EFAHr1wgsvbNiwQalU5ufnf/rpp3KnAwDfQWkJ+JbVajWbza2trXIngpDX0dFx69YtubMAECy4Gw7AHVq/fv369evlzgIAekdpCfiWVqtdv379tGnT5E4EIW/Tpk084xaAk9TDm7vhAABAWGJVNgAAwOBi1RIAAAhj/HoGfMff/va35ORkubNAyDMYDHKnACCISKUlVi0BAICwxEcc4FuZmZklJSVyZ4EwsWDBArlTABAspBviWLUEAADCEqUl4Fv79u2TOwUAwGCxWq2dnZ1xcXFKpTLAU3NDHAAACGP0WgIAABGhvb29oaHhxo0bgZ+a0hIAAAhjlJYAAEBE6OrqEkLExcUFfmp6LQERQqFQDOr+fQXpK45f4nue2sOmO599sPMH4C+UlgAAQETo7OwUQgwZMiTwU0dHR8fExLBqCQhaer3eL3EcDofbSGJi4oD298ukPuczqFP7N74b/54XgIGitAQAAMKf3W63WCxCplVLWVlZ9957b+B7PAHwUkNDg+vbzs7O5cuX63Q6vV6/a9euUaNGSePSShyTybR06dLExMSVK1c6D6mqquq5Tkej0ZjNZsU3XDf1un9f8wohli1bNnr0aJVKlZube+zYsX7PaED5SG+rqqqcBw4bNsyH+O3t7YsXL1ar1ePHj6+urnY7JCcnJycnp9/MPcSXRrZu3ZqVlaVUKisrKz2fF4CAobQEAADCn1RXklYPyZ0LgGC3du1ai8VSXV195coVlUplNBqlcWkRTWFh4dSpUw0Gw4wZM5yH5Ofn91xiIx3o+Ibrpl7372teIURxcfGFCxdMJtPq1atnz57d7ykMKJ/Tp09PmTIlPz9fCJGXl5ednX348GEf4q9atUqv1xuNxo8//vjgwYNuW3tehIHGl0bq6+tramr27NlTVFTk+bwABIyCv3sAAISQjIyMH//4x7/73e/kTiTEtLa23rhxQ6VSZWRkyJ0LAmfdunXbtm1z/X7e0/Dhw48cOTJ27Fgf4v/oRz+qq6vzNTvIo6urKzo6+urVq0KIzMzM+vp6160ZGRkGg0Gv1587d06j0fQ8XKFQtLW1qdXqXoMrFO5fr3qOeNja17wXL15csWLFqVOnurq6JkyYcOLECS9n8T6fwsLCBQsWFBYW7t27t6Ki4p133ukrZw/RNBrNpUuXpPxbWlrS0tLu8Mum5/z7eu3m/Pnzubm5tbW1d5IJAM/44Q4AAIQ/GRstIYxdu3Zt06ZN9913n9yJYABqamp++9vfSq8NBoP0wq0w0d3d7SFCX3WlflksFs83xvY177x58+bPn19eXq7RaG7cuOGvzlCu+WzYsGHu3LkzZ858+eWXKyoq/BL8zoP4PDU3IAMBRmkJAACEv46ODiFEfHy83Ikg3IwdO/Z73/ue3FlgAOx2e7899efOnVtaWrphw4bm5uaTJ09WVFS89dZbvk0XGxtbWVn5xBNPfPLJJ8XFxcePH/dhXoPBkJ2dnZSUVFNT8+677/qWied8xowZ89BDD82aNWvy5MkjR470Lfj8+fM3b9780ksvNTc3v/LKK25bpUZLZ86cuZP8+zKg6wzA7+i1BAAAwpzVarXZbAqFglVLAHql1Wpd35aWlppMJq1WO27cuP3795eUlEjjUovoXttFO0fcNkktgVJTU8vKysrLyz3v39e827dvX7p0qUajWb169cKFC52ZeJh3oPkIIdasWXP8+PEXX3zRmyvWa/ySkpK6urrU1NS8vLwlS5a45imEsNls3t8f12t854jbn57PC0AAsGoJAACEOeluuLi4OJ4cBKBXjY2Nrm9VKtW2bdu2bdvmtpuHykhfmwoKCnq9NazX/fuat6CgoKCgoNdj+5p3oPkIIQ4fPvzUU0/1+2w4D/FVKtXu3bt3797d6z5ffvmlN5E9xPdw4h7OC0AAUFoCAABhTrobjiVLANAXZ+V9y5Yt8mYCIBRRWgIAAGGOHt4A4BnPDQdwJ+i1BAAAwpndbu/q6hLy9fBuamqqr6+XylsAECp0Op2iB51OJ3deAIIRq5YAAEA4k2o6MTExMTHyfOzp6OiwWCwpKSmyzA4AvnHrPwUAHlBaAgAA4UwqLcm1ZEkIodVqrVZrXFycXAkAAAAMKkpLAAAgnMnewzs+Pl7GwhYAAMBgo7QEfOvo0aNGo1HuLIABGD58eE5OjtxZAEGNHt4AAACDitIS8K21a9d2d3drNBq5EwG8UldXl5OTQ2kJ8KCrq8tut0dFRXE/GgAAwCChtAR8R0lJybRp0+TOAvDKtm3bvvjiC7mzAIKatGQpLi5OoVDInQuA0KNQKBwOh9xZ9M9DntJ//e7wLELlOgCQS5TcCQAAAAyWrq4uwd1wAPqj1+t7HQ98PSUxMdGHozzk6ZdT8D6Ib/kDCHWUlgAAQNhKT08fNmxYcnKy3IkACGoNDQ1uI1VVVQqFwnXBo/R2y5YtiYmJp06dKi8vT0xMrKysdG46evSoVqvNzs6+evWq86hly5aNHj1apVLl5uYeO3ZMGuzs7Fy+fLlOp9Pr9bt27Ro1apQ0rtFozGaz4hveZN4zTyFEe3v74sWL1Wr1+PHjq6ur3Q4Z0N30vcaXRrZu3ZqVlaVUKqWL4Fv+AMIDN8QBAICwpVAoWLKEwWO322/dutXa2ip3IhiAtrY2b9bg5OfnOxwO1/qI9NZms+3cuXPmzJmLFy/euXNnUVGRxWKRNrW0tNTW1h44cOC5557bt2+fdFRxcfHWrVutVuvx48dnz57d1tYmhFi7dq3FYqmurlar1YcOHXI+RsZoNA701rOeeQohVq1apdfrjUbjrVu3duzY4XbInceXRurr62tqao4ePSpdBN/yBxAe+JsPfGvy5MnFxcX0Wgon4f35Ruq1tHv3brkTQUBlZGT8+Mc//t3vfid3IkAIWLdu3bZt2zw//nX48OFHjhwZO3asD/FjY2OHDBkSGxvra4KQQXd3d0pKyrVr14QQmZmZ9fX1rlszMjIMBoPzrdsHCefbXl+0trampKSYzeaMjIxbt24JIS5evLhixYpTp051dXVNmDDhxIkT0s56vf7cuXO9PjrGt48ubkdpNJpLly5J8VtaWtLS0vzea8l1pK/XQeL8+fO5ubm1tbVyJwKEM1YtAaHkL3/5yw9+8AMxmHf+m0ymgoIC54JtuHnooYc+/PDDpKQkuRMBEBo6OzsdDodSqYyOjpY7FwyKN998c86cOXJngQE4e/bsokWLpNfOKpJ/CyIxMf/3JWvevHnz588vLy/XaDQ3btxwdnTq7u72Jo7FYlEqlXeYjLSeSBZ+yR9ASKDXEhBKHnzwwcH+Iei3v/3tT37yEz8GzMjI8GO0gfL75fqXf/mXDRs2+DcmgDDW0tJSV1d3+/ZtuRMBMOhOnjxpsViOHDmSm5srjRgMhuzs7KSkpJqamtdff92559y5c0tLS4UQzc3NlZWVCxYscG6KjY2trKy0Wq1Hjhx57LHHfMtk/vz5mzdvtlqt9fX1mzZtcts6oF5LA+WX/AGEHEpLAL5lNBoPHDjw5JNP9twkPWXJB9evX/e8g8+RZfGLX/yioqLC870VAOBks9mEECxZAoKcVqt1G3E2onZ94fzT9YVTRkbGfffdt2XLlldffVUa2b59+9KlSzUazerVqxcuXOg8qrS01GQyabXacePG7d+/v6SkxBlkz549RUVFqampZWVl5eXl/WbeM08hRElJSV1dXWpqal5e3pIlS9yytdls3v/21mv8nhfEuWmg+QMID5SWgGBRWVmpVCoVCkVycnJhYeGxY8e+973veX/4K6+8MmnSpKSkpGHDhj333HMtLS0+5LB79+6ioiLnKm7Jnj17MjMzhwwZolarp0+f/uWXXzo3ZWZmKhSKESNGSG/vu+8+hUIxbNgw6e3999/v+lmk57NCPESWdjabzXPmzFEqla4PHxHeXauLFy/29XSSr776as6cOZmZmZmZmYWFhRcuXPByXiFEbGxsYWEh7Y0AeEm67YXSEhDkGhsb3UYc3+U64nwtvrs+esKECbW1tadOncrMzJRGCgoKvv7669u3b1dVVY0ZM8Z5lEql2rZtW1NTU1NT065du5w3ykmHWCwWs9lcUVExcuTIfjPvmacUf/fu3Waz+c9//rO05t01zy+//PLs2bNeXple4/d1WXzIH0B4oLQEBIuioqI9e/Y4HI7W1tbt27cbDIampibvD//BD35w9uzZW7du/fnPf1ar1QUFBT7kcOjQIecSbsmxY8f+8Ic/HDp06Pbt2w0NDWvXrn366af/+7//W9r62WefzZgx47PPPpPenjx5csaMGSdPnpTeXrp0ye0zh+vHGs+RpT1Xrlz5q1/9qqurS/oFzHmsN9dq5MiRvf4i99VXXy1atGjLli0Gg8FgMLz66quLFy92Vpc8zyuZPn36gQMHvL6oACKa3W4XlJaAcOe2cgcAIg2lJSBYDBkyJD4+/tatW1FRUenp6QsWLBhQaWn69OnSC41G89JLLznrOwPyl7/8Zdy4ca4jL7300htvvDF+/Pj4+Hi1Wv2jH/1ox44da9askbbec88927dvX7JkSX19vcFgWLJkyfbt24cPH+7NXJ4jS6ZNmzZ16lSFQlFQUGC1Wp3jd3KtVq1a9Zvf/Obee+91nsKLL764atUqb+aVfP/73//rX//q5XQAIpndbpcK1pSWgPDW8yc0AIgoPCEOCBaff/75smXLTp48edddd33ve9+Lj4/funWr6wJpD7q6ujZv3vyHP/zh2rVrCQkJP/zhD337cNPa2pqcnOw6cubMGWcVxikhIcH5+u677/7973+/dOlSh8OxY8cO591w/eo3shCir4bid3Ktjh07tmvXLteRnJwct6VJnhuZp6Sk3Lx505u5AMilq6ursbFRpVINHTpUxjSku+GioqJYywDAZzqdrudPaFqttudNfAAgF0pLQLAYO3bs0aNHXUdmzpx5+PBhb47913/91/T09JMnT6akpFit1qtXrz7wwAM+5JCcnGwymdLS0pwj8fHxX3311T333NPvsX01NuqL95F7upNrJXp7bNyAKnEmkyklJcX7/QEE3u3bt7u6utw6xwUePbwB3DlKSACCHzfEAcGrqqrKyz3ffffdFStWpKWlxcTExMfH+/wr/fe///1z5865jsycOfOPf/yjh0OuXbv25JNPlpeXl5WV/fznP7927ZrnKZzPg+s38oB4f63+8R//8fPPP3cdOX369KOPPur9XNXV1Q8++OAAkgMQcMnJyXq9XvYqMKUlAAAQCSgtAcEiPT19//79ra2t0ttTp07FxsZ6eezIkSN///vft7e3G43G3bt3L1iwwLccZs+e/dFHH7mOFBcX79ix47e//e3XX39ttVqNRuOHH344c+ZMaevVq1d/8Ytf/Od//mdGRkZmZmZ5efkvfvGLq1evukaIjY2VHrJ2/fr1rVu3Pvzww95E9uxOrtWmTZvWrVt36tSp7u7u7u7uU6dOvfjii5s2bfLycCHERx99NGvWLO/3BxB4UVFRarXa7R7bwKO0BAAAIgGlJSBY3HvvvRkZGb/85S8zMjImTpw4f/78PXv2uO6g+IbbayHEm2++eeTIEa1W++CDD547d27v3r3Cp8eULFq06L333nNtXJ2VlfXZZ59dunRp0qRJarX64Ycfdu1VNGXKlA8++GDKlCnS28mTJ3/wwQfO4pFEeshaVFTU5MmTL126dOjQIW8iuz1pxe3tnVyrBx544O233964cWNqampqauqmTZveeeed0aNHezOvEMJqtVZUVCxatGig1xZABKK0BAAAIgG9loBgcebMGSHEO++809cOHvoBjR49+tixY17u7MHQoUMLCgq2b9/+zDPPOAczMzPd+l47Xb9+3fVtbW1tz30KCgosFkuvh3uI7Ja/29s7uVZCiAceeODAgQM+zCuE+P3vf19QUJCamuohPgBIKC0BAIBIwKolAN/xwgsvvPXWW3JnEbwqKirWrl0rdxYAQgOlJSDS+OtxkIP9WEkP8Qf6YJaBxgcQligtAfiO5ORkty7XcPXpp58mJyfLnQWA0EBpCQgVer3eL3F8WzbuTZzExES/RO4rvjeb/BLfjX/PC4BcKC0BAAAMCkpLQKhoaGhwfSut3Dl69KhWq83OznY+okQaN5lMS5cuTUxMXLlypfOQqqqqnut9rFbr6tWrR48ePWrUqOeff97ZImCgcTQajdlsdmsf6YwjPSdXOnDYsGGez7TX+O3t7YsXL1ar1ePHj6+urnY7JCcnJycnx3NYz/Glka1bt2ZlZSmVSukBLx7OC0DIodcSAADAoKC0FCo+/PDDc+fO+XCgw+E4deqU6+MvEPwuX77c3d3teR+Hw6FQKFpaWmpraw8cOPDcc8/t27fPOV5YWLhw4cItW7acPXvWeUh+fr601TXOunXrsrKyLly4IIR47bXX1q1b98orr/gQx2g0KhSKnkuBTp8+/dxzz+Xn5wsh8vLysrOzy8vLPZ9ar/FXrVql1+uNRuOtW7d27NjR82p4jtlvfGmkvr6+pqbm6NGjRUVFUpWtr/MCEHIoLQEAAAwKSksh4ZFHHpEWffjAbrd/+OGH//M//+PflDCobt265awGZmZm1tfXS6+lakhGRobBYJBGHn/88bi4uLy8vKVLl7pGOHDggFqtFkI8+uijnufavXv3+fPnpdcLFy4cO3asVFoaaJy+TJkyRa/X79u3r7CwsKKi4v7773/wwQd9iPP2229funRJqVSmpaU9+eSTbm0lXStfd6K4uFgIUVBQQDUWCD+UlgAAQJjo6OhobW1NTEwMhuYddrtd+ime0lKQ++Mf/+jzsbGxsb/5zW/mzJnjx3ww2M6ePbto0SLptbOK5HntTEzMd740SfUgL3kIO6A4riwWi1KplF5v2LBh7ty5M2fOfPnllysqKnwL6Bb8zoMAyYruAAAgAElEQVT4PLXzvACEFkpLwLc6Ozs/+eQT549XQJA7e/as2WyWOwsgiJjN5vb29ujo6GAoLUlLlhQKRVQUrS2BkHTy5MnHH3/8yJEjubm5vkVYuHDhjh07pFZK27dv/+lPf+pzMrGxsZWVlU888cQnn3xSXFx8/PhxaXzMmDEPPfTQrFmzJk+ePHLkSN+Cz58/f/PmzS+99FJzc7PruiqJ1GjpzJkzPifvQV/nBSC0UFoCvtXY2Pgf//Ef/FqCUNHR0XHPPffInQUQRG7fvi2ESEhIkDsRIbgbDggpWq2252BGRsZ99903bNiw999/XxqRbppzNhJyXZHkHJReSJt++9vfvvDCC1Jr7X/+539ev369b3GEEHv27CkqKlIqldOnT3drqLRmzZqxY8devHjRmzPtNX5JSckvf/nL1NTU++67780333zttddcl3HZbDbvS+S9xneer7MNkzO+h/MCEEIoLQHfGj58eHFx8bRp0+ROBPDKtm3bvvjiC7mzAIKF1Wq1WCwKhUKlUsmdixCUloCQ0tjY2HNwwoQJtbW1riMe7m7rdZNSqSwpKSkpKfFmZ8+bCgoK+rpV7fDhw0899VS/z4bzEF+lUu3evXv37t297vPll196E9lDfNdBtx08nBeAEEJpCQAAhIP29nYhxJAhQ4LkBrTo6OikpKTY2Fi5EwEwYG4ra4KZc5XQli1b5M0EQCSjtAQAAMKBVFoKkiVLQoghQ4YMGTJE7iwA+CL4K0pOIZQqgDAWFD/rAQAA3Am73d7R0SGCptESAMhFp9MpetDpdHLnBSCcsWoJCCUeFma79Xr0e3wACGYdHR0OhyMmJiYuLk7uXABATr32jQKAQcWqJcATvV7vNuLHB1pLTzIaEB+aPvorvptgeLA3ADi1tbUJIdRqtdyJAAAARBxKS4AnDQ0Nrm81Go3ZbHYuLXaOS2+rqqqEEFVVVQqFQnpIhzR+9OhRrVabnZ199epVaf/m5uZJkyapVCqdTvfMM894U2OSwrpOKoRob29fvHixWq0eP358dXW12yE5OTk5OTlenmmv8aWRrVu3ZmVlKZXKyspKz9cBAGThcDikRkuUlgAAAAKP0hIwAEajUQjh+IZz/PTp01OmTMnPzxdC5OXlZWdnHz58WHyzCKilpaW2tnbVqlXPPfectP/KlStLS0stFsvly5cfffTRlStX9jt1fn5+zyVFq1at0uv1RqPx448/PnjwoNtWtyR9iC+N1NfX19TU7Nmzp6ioyPN1AABZ3L592263x8TExMfHy50LAABAxKHXEtCLzMzM+vp66bW0KicjI8NgMPS1/5QpU/R6/b59+woLCysqKu6///4HH3zQufXxxx+Pi4vLy8tbunSpNHLw4MHdu3c7d0hPT3/jjTd8yPPtt9++dOmSUqlMS0t78skn165d67r17NmzPsTsqbi4WAhRUFBgtVr9EhB+dPz48dzcXLmzQEAZjUYP/zmKTGazWQTTs+EAIEjI2EbTL21AAYQKSktAL5xf2zz/e2yxWJRKpfR6w4YNc+fOnTlz5ssvv1xRUdHr/jEx//c3buLEiR999JFfUxYWi8W/AQc0tfM6IMDGjBnzq1/9Su4sEFDHjx+Xbv6CxOFwSKUl7oYD4DO9Xn/9+vU7DHL79m3vH1KZmJgoNYkbvDhigJWdAc3bL4fD4U3bBH9dBwAycwD4Rk5OztGjR11Hev4diY2N3bdvn8Viqaqqmjp1quumn/3sZ7m5uT/72c/cIhw8eLCrq+u9996bN2+eNPjqq6/u2LGjtrbWZrMNKEO3fJ566qm1a9daLBaDwbB8+XK3rZMmTZo0adKdxHcbcX3t4TogYN54442FCxfKnQUCbciQIdOmTZM7iyDS3t7+t7/97fLly3IngmD0wgsvpKamDl78mJiYysrKwYuPwXDmzJkHHnjAbdDtI1BHR8ezzz6r1WrvuuuunTt3jhw50rmbEKK1tXXJkiVqtfrXv/61NN7U1JSdnS2E0Gq1Tz/9dHt7uzPUM888M2rUqISEhMcee+zTTz+VBlNTU3v9RuYhTq/6iuNwOKTmDKJHB4NXX31VrVZ/9tlnZWVlarV63759/c7r/UdKs9m8aNEilUr1wx/+8K9//avr7IN6HTz76quvsrKy7iQCgH7RawnwRKvVuo1ILYdSU1PLysrKy8tdN61Zs+b48eMvvvii2yEZGRn33Xffli1bXn31VWnk2WefbW5unjp1qkajmT59+saNG/vNxNkw27VzdklJSV1dXWpqal5e3pIlS8Q3a48lUt3KyzPtNb5zxO1Pz9cBAAIpOJcsdXd3X7x48cqVK3InAsAX0k931dXVV65cUalUUpdJ8c0ioMLCwqlTpxoMhhkzZkjjHtpoFhcXX7hwwWQyrV69evbs2dJgX20rB9qO00P7y55tNKW3Nptt586dM2fOrK6u3rlzp9RJ0/O8PYP3xUMb0EG9DgBkJ9vNt0AQmjx5cnFx8bRp03w7fOvWrVeuXNmyZYvroIy3uCPsbdu27YsvvnDt24VIEB8f//DDDx89elTuRIKCw+H4+9//brPZMjMzg+q+CYvFcvXq1ejo6BEjRsidS0Rbt27dtm3bnHUBv4uNjX3//ffnzJkzSPExGM6ePbto0aKamhrx3faaEqm9pl6vP3funEaj6Xm4QqFoa2tzK2cPHTrU9f9m6enpTU1NQoiLFy+uWLHi1KlTXV1dEyZMOHHihPNjYa8fEfuK44Hnj5puW51v3V74MG+vNBrNpUuXpOvW0tKSlpYmzRKA6+DB+fPnc3Nza2trfY4AoF+sWgL8Q6FQPPvss//2b//mNii+u5IIAOBHHR0dNpstOjo62J4NFxsbO2LEiLvvvlvuRAB4YjAYnOtlpBdSw83u7m4PR/VcJjlx4kTXG0OcdZB58+Y98sgjX331lclkeu+99/oK6OyY2VccL/ncefMO5+03mQBfBwCBR2kJ8I9elyL3OggA8Bfns+GCrYivUCiio6OdT28AEFrmzp1bWloqhGhubq6srFywYIHn/fPy8srKyurq6ux2u+u4wWDIzs5OSkqqqal5/fXXXTfFxsZWVlZardYjR4489thjnuN40GucgfI8b05OTk5Ojjdx5s+fv3nzZqvVWl9fv2nTJud4AK4DAHlRWgKChU6nU/Sg0+nkzgsAgldwNloCEHLc2muWlpaaTCatVjtu3Lj9+/eXlJRI466NKV0r2n210dy+ffvSpUs1Gs3q1asXLlwo+mtb6UM7zr7aX/Zso+m2mt6b/CXet+/sqw1oAK4DAHnRBQb41h32WgICjF5LkYleS04dHR11dXVRUVEjRowItlVLCBL0WkJPrr2WEAnotQQEAOu0AQBASIqLi7vrrrtsNht1JQAAABlRWgIAACEpKioqMTFR7iwAAAAiHb2WAAAAACBI0Y4TQPBj1RIAAAAABKnGxka5UwCAfrBqCfCnwe73MRjx3R5xMqj8NZGHOIE8HZ8Ff4YAAAAA4CVKS4Aner1+QPvf+SMXPfcNGVD827dve7NbvzF7jeNbfxN/PZLSQ5yem7y8DpLA9G3x/jrQRwYIUUaj0Wg02mw2uRMBAAAYdJSWAE8aGhqcr6XlMFu2bElMTDx16lR5eXliYmJlZaW0taqqqud6GWlk69atWVlZSqXSuXNfNBqN2Wx23kXvuqlnfA/5NDc3T5o0SaVS6XS6Z555xpvayrVr16ZMmZKamrpkyZL29nZpsK84HvLsy4CuT2dn5/Lly3U6nV6v37Vr16hRozzHaW9vX7x4sVqtHj9+fHV1tXO8r/z7mrev86qsrFQqlQqFIikp6ZFHHnHNRwiRk5OTk5PjzUUY6HXw4ToDCBKtra0tLS2UlgAAQCSgtAR4S1ppYrPZdu7cOXPmzOrq6p07dxYVFUlb8/Pzey5FkUbq6+tramr27Nnj3LkvRqNROkriuqlnfA/5rFy5srS01GKxXL58+dFHH125cmW/Z7dr1669e/devnxZrVY///zz0mBfcTzk2ZcBXZ+1a9daLJbq6uorV66oVCppOg9xVq1apdfrjUbjxx9/fPDgQed4X/n3NW9f57Vw4cInnnjCarU2NDT8+te/NplMbmfh/SqkAV0HH64zgGDgcDjsdrsQIjo6Wu5cAAAABp2CryuA0+TJk4uLi6dNm5aZmVlfX++6KSMjw2AwKBT/91em5wuJ21u3kZ5be/K8T1/Tub0YOnSoazkmPT29qanJ86R1dXWZmZlCCKPROGbMGGl/D3G8ORdvzq7X66PX68+dO6fRaLyMo9FoLl26JO3f0tKSlpYmbfUy/37/Nzp48OA//dM/Wa3WtLS09PT03bt3T5o0aaDn7iH/gebjtG3bti+++GL37t13kgxCTnx8/MMPP3z06FG5E5GNw+EI8nV8NpvtypUrQoj7778/yFMNe+vWrdu2bZvrvwX+FRsb+/7778+ZM2eQ4mMwnD17dtGiRTU1NXIncqek/7wE5tucbx/8gsT58+dzc3Nra2vlTgQIZ6xaAnphMBic60SkFwaDIfBpWCwW3w6cOHGiw4XnupIbu90eFRU1oDg+59mX7u5un491TeZOroNrqFmzZlksFrPZ/Kc//emnP/3p448/7nN6d8Lv1xkIUdeuXauvr7+T/1AMNmnJEreyAiFkoO01e+Wv9o7+apfpR7SJBOAZpSUguMTGxlZWVlqt1iNHjjz22GO+BcnLyysrK6urq5O+3nhjx44ddXV1ra2t69evnzdvXr9x/JJnX+bOnVtaWiqEaG5urqysXLBggef958+fv3nzZqvVWl9fv2nTJue4D9eh1/NKT08/c+ZMVFTUsGHDxowZ4+xFJRlQr6WBGtTrDISizs5Oi8XS0dERzPeacTccEHJc22uKvts+SiVjk8m0dOnSxMRE5732HtpcLlu2bPTo0SqVKjc399ixY9JgX+0U/dUuUwpbVVUlvunzOGzYMOchtIkE4HeUlgBPtFqt87X0D6Tzn8le/4kV3/2Z2vUQt8P7IrXaSU1NLSsrKy8v9xDfQz7PPvtsc3Pz1KlTNRrN9OnTN27c6GFG6cDFixcXFhaOGDHCbDY79/cQp688Pczi/fUpLS01mUxarXbcuHH79+8vKSnxHKekpKSuri41NTUvL2/JkiXOOH3l7+F/l17P69577/3f//3fUaNGKRSKoqKiPXv2uJ6azWbz/qe8gf7/ZKDXGQh7Q4YMGT58uE6nC+YvLVL3bucKUAAhp6+2j9K/+IWFhVOnTjUYDDNmzJDGPbS5LC4uvnDhgslkWr169ezZs6XBvtop+qtd5unTp6dMmZKfny+EyMvLy87OPnz4sPMQ2kQC8LsQvmkW8DtnryW5EwG8Qq+lyESvpeBnNpuvX78+ZMgQ12UCkMW6des2btz4wx/+cJDi/+lPfxoxYkRKSsogxcdgaG9v7+jo+Prrr4UQfbXX9ND2UaFQtLW1qdVq18G+2jtevHhxxYoVp06d6urqmjBhwokTJzy3U/RXu0whRGFh4YIFCwoLC/fu3VtRUfHOO+94viye+atNpCzotQQEQIzcCQAAAIQV6YY4Vi0Fg9GjR3//+9/3vHr3TsyYMeOnP/3pP/zDPwxSfAyGCxcuvPbaa9JrZzNNt4KI525ubnUlIcTEiRM/+uijnnvOmzdv/vz55eXlGo3mxo0bfXV0slgsSqXSQxxvuLbLFEJs2LBh7ty5M2fOfPnllysqKnyLeYec5wUg7FFaAgAA8Cfphjh6LQWD5ORkjUYzeL3qFArFD37wA3rhhZbk5OSYmH6+BEltHzds2NDc3Hzy5MmKioq33nrLw/5Se8cZM2ZkZGS41ncMBkN2dnZSUlJNTc27777reojUTvGJJ5745JNPiouLjx8/7iGOBzt27PjZz36mUqlc22UKIcaMGfPQQw/NmjVr8uTJI0eOdD1EarR05swZb+IPVK/nBSDs8XsaEGhSixA3Op0u1OeV67wAINiwagkIOa7tNUXfbR9dGyZ60+Zy+/btS5cu1Wg0q1evXrhwoeivnaK/2mVK1qxZc/z48RdffNHtQNpEAvA7Vi0BgdbY2BiW88p1XgAQbCgtASHH7WOMSqXatm3btm3b3HbrqyITHR29Zs2aNWvWuI0XFBQUFBT0enhBQYHFYvEyTq+c0fpaf3T48OGnnnqqZ9O3L7/80pv4brP0Nei2Q6/nBSDsUVoCvlVfX79kyRKVSiV3IoBXWltb7733XrmzAOBOKi1xQxwAGTmXEW3ZskXeTABEAkpLwLdUKtX/+3//77777pM7EcArn3/+eXt7u9xZAHAn9Vpi1RIAGQXbY9oAhDdKS8C3kpOT58+fP23aNLkTAbyybdu2L774Qu4sgEDo6OiIj4+XOwtvcUMcAD/S6XRNTU1ug1qtll4EAIIHpSUAABDUbt++bTAY4uLi7r77brlz8QqlJQB+RAkJQPCjtAR8x+HDhy9duiR3FoBXPvvss34fnwyEAZPJJIQIoVVL0g1x9FoCAAARgu8kwLceffTRS5cu1dbWyp0I4K2HHnpI7hSAwWW1WqWeYsnJyXLn4i1WLQEAgIhCaQn41oYNG+ROAQDwHTdv3hRCJCQkKJVKuXPxFqUlAAAQUfjQAwAAgpTD4bh165YIwSVLghviAABAxKC0BAAAglRbW5vNZouJiVGpVHLn4i2p0ZJCoVAoFHLnAsDPQu6vtozZhty1AnAnKC0BAIAg1draKoRITk4Ooe8n0dHRWq02LS1N7kQADIBer/dmN4fDMdiZCCFu377t/c6JiYketg4o4QHN2y8vp/aQv3/zATCoKC0BAIBg1N7ebrFYoqKiUlJS5M5lAKKiopKTk0MrZwANDQ2ubzs7O5cvX67T6fR6/a5du0aNGuW69dNPP83KylIqlZWVlc7BZcuWjR49WqVS5ebmHjt2TBqUVu5s3brVbf/bt2///Oc/T01NnTBhwoULF5wLfJqbmydNmqRSqXQ63TPPPNNvbUWj0ZjNZsU3XDdVVVW5DUpvt2zZkpiYeOrUqfLy8sTERCklz/Pm5OTk5OR4cxnb29sXL16sVqvHjx9fXV3tuqnX69NX/gO9DgBkR2kJAAAEI+eSJfphAwiwtWvXWiyW6urqK1euqFQqo9HouvXIkSMXLlzYs2dPUVGRc7C4uPjChQsmk2n16tWzZ8+WBqWVO/X19TU1Na77r1q1SqPRNDQ0nDhx4oMPPnDuuXLlytLSUovFcvny5UcffXTlypWe85QSc3zDdVN+fr7biPTWZrPt3Llz5syZ1dXVO3fulFLyPG/P4H1ZtWqVXq83Go0ff/zxwYMHXTf1en36yn+g1wGA7BSBWdUJAAD8Ij4+/uGHHz569KjciQyujo6Ouro6hUJxzz33xMTwQFv46MCBA6+99trg/X2JjY19//3358yZM0jxMRjOnj27aNGimpoaIURmZmZ9fb3r1oyMDIPBoNfrz507p9Foeh6uUCisVqv03yWF4v++TF28eHHFihWnTp3q6uqaMGHCiRMnnF+ynPu4vtZqtefPn5fiNzc3a7VaaXzo0KGuZaz09PSmpibPp+Mav9+tzrduL3yYt1cajebSpUvSebW0tKSlpQ3o+jj5Kx/J+fPnc3Nza2trfY4AoF/8DAgAAIKOtGQpMTGRuhKAwWMwGJzrZaQXBoNBCNHd3e3hqJ7/XZo3b94jjzzy1VdfmUym9957r995XW/+ci2sTJw40eFioPUUi8UyoP39NW+/yXh5fZyHDEY+AAYVpSUAABBcLBZLe3u7ECI1NVXuXABEorlz55aWlgohmpubKysrFyxY4Hl/g8GQnZ2dlJRUU1Pz+uuv9xu/qKhoy5YtdrvdbDaXlZU5x/Py8srKyurq6ux2u5epxsbGVlZWWq3WI0eOPPbYY14e5cbzvN73Wpo/f/7mzZutVmt9ff2mTZuc4x6uT6/5+3AdAMiL0hIAAAgu0pIllUqlVCrlzgVARNBqta5vS0tLTSaTVqsdN27c/v37S0pKpHFptVHPP7dv37506VKNRrN69eqFCxd62FP6c+PGjQ0NDWlpaY888sisWbOc8z777LPNzc1Tp07VaDTTp0/fuHFjv5lLLZxSU1PLysrKy8ud487G2K4vhMuCKdeVU57ntdlsXjZRKSkpqaurS01NzcvLW7JkSb/Xp6/8fbgOAORFryUAAEJJ2Pda6u7u/vrrrx0OR1ZWVnx8vNzpILTRawk9ufZakp3Vaj106NC6devOnTsndy5hi15LQACwagkAAAQRk8nkcDji4+OpKwEIYy+88IJCoVCr1X/4wx8+/fRTudMBgDtCaQkAAAQLu91+8+ZNEcpdlmw2m9VqpT8IAM/Wr1/vcDi6uroqKyt1Op3c6QDAHaG0BAAAgsXNmzftdrtSqVSpVHLn4qPGxsavv/66ra1N7kQAhAmdTqfogWoUgKDCA30BAEBQcDgcJpNJCJGSkiJ3LndEoVBERfHrHQD/aGxslDsFAOgHpSUAABAUOjs7bTZbTExMUlKS3Ln4LiMjQ+4UAAAAAorSEgAACArx8fH33HNPd3e36yOxAQAAEOQoLQEAgGARExMTE8OHEwAAgFBCIwAAAAAAAAD4iNISAAAAAPRPejqb3Fn8n0AmEzxnDSA4UVoCAAAAENH0er03uzkcjsHORAhx+/Ztb3YLTDIDnSsxMXFQMwEQnCgtAQAAAIhoDQ0Nrm87OzuXL1+u0+n0ev2uXbtGjRrluvXTTz/NyspSKpWVlZXOwWXLlo0ePVqlUuXm5h47dkwalBYWbd261W3/27dv//znP09NTZ0wYcKFCxec64+am5snTZqkUql0Ot0zzzzjTY3p2rVrU6ZMSU1NXbJkSXt7u+u8VVVVQoiqqiqFQjFs2DDnITk5OTk5OV5eGelwt1VLfZ2XRqMxm82Kb3g5BYAwQKdMAAAAhC2j0fjJJ58MUnCHw/HnP/9ZrVYPUnwMhgsXLnR3d3veZ+3atRaLpbq6Wq1WHzp0yGg0um49cuTIhQsXPvroo6KiIovFIg0WFxdv3brVarUeP3589uzZbW1tQgiHw6FQKOrr62tqao4ePercf9WqVRqNpqGhobu7u6ysTHyzLGjlypWlpaUPP/xwV1fXxx9/vHLlyjfeeMNzqrt27dq7d29CQsJLL730/PPPS/ufPn36ueeey8/PF0Lk5eVlZ2eXl5c7DxnQcqf8/HzpLFwH+zovo9GoUCgCuZwKQJDgbz4AAKEkPj7+4YcfPnr0qNyJACHg9OnTL7744uDFP3r06IMPPpienj54U8Dvbt261dTU9Pe//10IkZmZWV9f77o1IyPDYDDo9fpz585pNJqehysUCqvVKj3L0llGuXjx4ooVK06dOtXV1TVhwoQTJ044v2S5llqcr7Va7fnz56X4zc3NWq1WGh86dKhrGSs9Pb2pqcnDuSgUirq6uszMTCGE0WgcM2aMc//CwsIFCxYUFhbu3bu3oqLinXfe8elqfTuR29fGXs+r1z1ld/78+dzc3NraWrkTAcIZq5YAAIA8LBZLfX29RqNJSkqSOxf/sFgsRqMxNjZ26NChcucCIYR46KGHPv7448GLHxsb+9JLL82ZM2fwpoDfnT17dtGiRdJrg8EgvXAriHhe1iTVlVzNmzdv/vz55eXlGo3mxo0b/XZucl0E5DrvxIkTP/roIy9Oohd2uz0q6ttuJxs2bJg7d+7MmTNffvnliooK32LeIYvFolQqZZkaQIDRawkAAMjj5s2bVqvVbDbLnYjfdHd3t7W1OdudAAhRc+fOLS0tFUI0NzdXVlYuWLDA8/4GgyE7OzspKammpub111/vN35RUdGWLVvsdrvZbJZuiJPk5eWVlZXV1dXZ7XYvU92xY0ddXV1ra+v69evnzZvnHB8zZsxDDz00a9asyZMnjxw50vWQAfVaGqjY2NjKykqr1XrkyJHHHntskGYBEGwoLQEAAHmkpaWlpaWF0wIf6dsgzWuBkKPVal3flpaWmkwmrVY7bty4/fv3l5SUSOPS3+6ef27fvn3p0qUajWb16tULFy70sKf058aNGxsaGtLS0h555JFZs2Y553322Webm5unTp2q0WimT5++ceNGDzlLoRYvXlxYWDhixAiz2ey2/5o1a44fP97znlCbzeb9PWvOhtyunbn7Oi8hxJ49e4qKilJTU8vKylwbPAEIb0F3KywAAPCAXkvBrK2traGhIT4+PisrS+5cEAixsbHvv/8+N8SFFumGuJqaGrkTEUIIq9V66NChdevWnTt3zu/Bt27deuXKlS1btvg9cmih1xIQAPRaAgAA8A/pFzvXdicA0KsXXnhhw4YNSqUyPz//008/9Xt85zIiSksAAoCPPgAAAP7BDXEAvLR+/XqHw9HV1VVZWanT6fwe3/ENv0cGgJ4oLQEAAPiH9C2O0hIAP9LpdIoeBqMaBQA+44Y4AAAA/+CGOAB+19jYKHcKANAPSksAAAD+wQ1xQPC7dOnSlStXkpKS5E4EgcONgcBgo7QEAADgH6xaAoJfZmbmXXfdVVFRIXciCJCvv/562bJlcmcBhDlKSwAAIBAcDkdtbW1CQoJGownX4gu9loDgFx8fn5CQMHHiRLkTQYCoVKro6Gi5swDCXHh+sAMAAMHGZDJ1dXW1tbWFceWFG+IAAEAEYtUSAAAYdN3d3UajUQgxdOjQMK68cEMcEBIMBsO8efPkzgIB0tbWJncKQPijtAQAAAZdc3Oz3W4fMmRIeLfOZdUSEPzuueeekpISubNAQC1YsEDuFIAwR2kJAAAMLrPZbDabFQqFTqeTO5fBRa8lIPilp6c/+eSTcmcBAGGFBdsAAGAQ2e325uZmIURqaqpSqZQ7ncHFDXEAACAC8dEHAAAMopaWlu7ubqVSqdFo5M5l0HFDHAAAiECUlgAAwGDp7Oy8efOmECI9PT0SCi7cEAcAACIQpYT8lWsAACAASURBVCUAADAoHA5HY2Ojw+FITExMSEiQO51A4IY4AAAQgfjoAwAABkVLS4vFYomOjk5PT5c7lwDhhjgAABCBKC0BAAD/6+joaG1tFUJotdro6Gi50wkQVi0BAIAIFCN3AgAAINw4HI6mpiYhhFqtVqvVcqcTOBkZGUKIyCmlAQAACEpLAADA74xGo8ViiYqKipxb4SQR0lIKAADAFQu2AQCAP3V2djpvhYuJ4UcsAACAMEdpCQAA+I3dbm9oaJCeCpeYmCh3OgAAABh0lJYAAIDf3Lhxw2q1xsTEaLVauXMBAABAIFBaAgAA/mE2m2/evCmEuOuuu3hKGgAAQITgYx8AAPCPjo4OIURKSkp8fLzcuQAAACBAaK4JAAD8Iz09PSEhgaekAQAARBRKSwAAwG9UKpXcKQAAACCgKC0BAAD4gd1u7+zsVCgU3A8IAAAiCr2WAAAA/MBisRgMhoaGBrkTAQAACChWLQEAAPiBQqGIi4uLieHDFQAAiCx8+gEAAPCDuLi4u+++W+4sAAAAAo0b4gAAAAAAAOAjSksAAGDAbDbb1atX29ra5E4EAAAAMqO0BAAABsxkMlkslpaWFofDIXcuAAAAkBO9lgAAwIANHTpUCKFWqxUKhdy5AAAAQE6UlgAAgC+k6hIAAAAiHDfEAQAAAAAAwEeUlgAAAAAAAOAjSksAAAAAAADwEb2WAAAA/MBsNhuNxoSEhLS0NLlzAQAACBxWLQEAgH7Y7Xa5UwgB3d3dXV1dVqtV7kQAAAACitISAADwpK2t7euvv+7s7JQ7EQAAAAQjSksAAKBPnZ2djY2NNputra1N7lwAAAAQjCgtAQCA3lkslvr6eofDoVar09PT5U4nNCgUCrlTAAAACChKSwAAoBc2m62+vt5ms8XFxel0OrnTAQAAQJCitAQAANzZ7XaDwWC1WmNjYzMyMqKi+MAAAACA3vFJEQAAfIdUV+rq6oqOjs7MzIyJiZE7IwAAAAQvSksAAOBbDoejoaGhs7MzKioqMzMzNjZW7oxChsPhkDsFAAAAGVBaAgAA37px40Z7e7tCobjrrrvi4uLkTgcAAADBjtISAAD4P0aj0WQyCSHS09NVKpXc6QAAACAEUFoCAABCCNHa2trS0iKESEtLS05OljsdAAAAhAYacwIAANHa2nrjxg0hRHp6ekpKitzpAAAAIGSwagkAgEh38+ZNqa40dOhQ6kp3SKFQyJ0CAABAQFFaAgAgorW1tTU3NwshUlJSNBqN3OkAAAAgxHBDHAAAkautra2hoUEIkZSUlJ6eLnc6AAAACD2UlgAAiFC3bt1qbGwUQiQnJ2u1WrnTAQAAQEjihjgAACKU1WoVQiQlJVFX8guHwyF3CgAAADJg1RIAABFq6NChcXFxarVa7kQAAAAQwli1BABA5KKu5Ec8Gw4AAEQmSksAAAB+w21xAAAg0nBDHAAAgB8kJSUlJCRERfG7HQAAiCyUlgAAAPwgOjo6Ojpa7iwAAAACjR/WAAAIcw6Ho6urS+4sAAAAEJ4oLQEAEM4cDsf169fr6uo6OzvlzgUAAABhiNISAABhzuFwOBwOm80mdyIAAAAIQ/RaAgAgnCkUCr1eb7Va4+Li5M4FAAAAYYhVSwAAhLmoqCjqSgAAABgklJYAAAAAAADgI0pLAAAAAAAA8BG9lgAAAPygu7u7vb09OjparVbLnQsAAEDgsGoJAIBwYLfbGxsbu7u75U4kclkslqamppaWFrkTAQAACChWLQEAEPIsFsv169ctFovVas3KypI7nQgVHR2dkJAQE8OHKwAAEFn49AMAQGgzm82NjY12u12pVOp0OrnTiVxxcXGZmZlyZwEAABBolJYAAAhhN27caG1tFUIkJCTo9fqoKG51BwAAQEBRWgIAICRJzZXMZrMQIjk5OT09XaFQyJ0UAAAAIg6lJQAAQo+zuZJCoUhPT09OTpY7IwAAAEQoSksAAIQYm8127do1h8MRGxur1+vj4uLkzggAAACRi9ISAAAhw+FwOBwOi8XicDgSEhLuuuuu6OhouZMCAABARKO0BABAaOju7m5oaJBep6amDh06lOZKAAAAkB2lJQAAQkB7e3tjY6PNZhNCKJXKtLQ0uTMCAAAAhKC0BABAkHM4HI2NjW1tbUKI+Ph4hULBTXAAAAAIHpSWAAAIXs4nwQkhNBqNRqOROyN4cvXqVYfDkZWVFRPDRywAABAp+NwDAECQamtra2pqstvt0dHROp1OpVLJnRH60d3dbbfb7Xa73IkAAAAEDqUlAACClMPhsNvtQ4YM0ev1rIIJCVFRUZSWAABApOFzKgAAQSopKSkqKkqlUvEkuFARFRUlhHA4HHInAgAAEDiUlgAACF5qtVruFDAAUhGQVUsAACCiRMmdAAAAQJiQSkusWgIAABGF0hIAAIB/cEMcAACIQJSWAACQU2dnZ0tLi9xZwD+4IQ4AAEQgei0BACCb7u7uuro6h8MxZMgQlUoldzq4U9KqJUpLAAAgolBaAgBANjExMSkpKXa7PT4+Xu5c4AfcEAcAACIQpSUAAOSUlpYmdwrwG9p4AwCACESvJQAAAP+g1xIAAIhAlJYAAAD8gxviAABABKK0BADA4HI4HDdv3pQ7CwQCq5YAAEAEotcSAACDqKOjo6mpyWKxCCGSk5PlTgeDi1VLAAAgAlFaAgBgUNhsths3bty6dUsIER0dLRUdEN6k/5VZtQQAACIKpSUAAPzM4XCYTCaj0SiVGJKSktLS0qKjo+XOC4NOKi3ZbDa5EwEAAAgcSksAAPiT2Wy+ceOG1WoVQsTFxaWnp8fHx8udFAKEVUsAACACUVoCAMA/Ojo6bty40dnZKYSIjY1NT09XqVRyJ4WAktamsWoJAABEFEpLAADcKavV2tzc3N7eLoSIiooaOnRocnKy9LAwRBRWLQEAgAhEaQkAAN/Z7faWlpabN29KDwVLSUnRaDS0VYpYzv/p7XY7jdsBAECEoLQEAICPpF7d0t1PKpUqLS1NqVTKnRTkpFAo7rnnnqioKOpKAAAgclBaAgBgwDo7O5ubm51tldLS0tRqtdxJISjExsbKnQIAAEBAUVoCAGAAuru7m5qanG2VNBpNSkoKbZUAAAAQsSgtAQAwAFFRUR0dHUKIpKSktLQ02ioBAAAgwlFaAgBgAKKionQ6nVKppK0SAAAAICgtAQAwULRVAgAAAJx4fAkAAAAAAAB8RGkJAIDvsNlsLS0tN2/elDsRAAAAIARwQxwAAN/R3t5uNBqjo6MTExOjovgNBgAAAPCE0hIAAN+RlJTU3t5OXQm+sVgsZrM5JiYmKSlJ7lwAAAACgdISAADu9Hq93CkgVFkslpaWliFDhlBaAgAAEYLSEgAAgN8olcrk5GSlUil3IgAAAAFCaQkAEHHa29tbW1t1Ol1sbKzcuSDcKJVKrVYrdxYAAACBQ2kJABApHA5HW1tba2urxWIRQphMpvT0dLmTAgAAAEIbpSUAQPiz2+23bt1qbW3t7u4WQigUiuTk5NTUVLnzAgAAAEIepSUAQDizWq0mk+nWrVt2u10IERUVlZKSkpKSEh0dLXdqAAAAQDigtAQACE+3b982mUzt7e3S29jY2JSUlKSkpKioKHkTAwAAAMIJpSUAQFix2+03b968efOm1WqVRtRqdUpKSnx8vLyJAQAAAGGJ0hIAIExYLBaTydTW1ibd+xYdHZ30/9m70yA378KO488p6ZEeabXS3pftOOQgJIWcxCQEyhQGp0BICUNCp03pMBSYTICBkkImpAxQSilpeUNnOMr0oFwTjjRO6FAKmJzYkKOE2nESr733ro7VrefsiycRynqllde7++j4fl54pGefffTTxt5IP/2PWKyvr49t4AAAAIDtQ7UEAOh4xWIxm82WSiXvbiAQiMfj0WiUuW8AAADAdqNaAgB0MNu2Z2dnq9Wqd1fTtHg8ruu6v6kA13Vd16XcBAAAvYBqCQDQwbyN3kRRjEaj8Xg8GAz6nQgQ8vn8wsKCpmkTExN+ZwEAANh2VEsAgM42PDysKIrXMQHtwPvbaNu230EAAAB2AtUSAKCzMVIJ7UZRFEEQLMvyOwgAAMBOYAkAAEBby2az09PT5XLZ7yBAq7xRS47juK7rdxYAAIBtR7UEAGhr1WrVMIxcLud3EKBVsiyLoigwcAkAAPQGJsQBANqatzh3LBbzOwhwGmRZtizLtm1VVf3OAgAAsL2olgAAbS0YDLKaEjqOoiiWZTFqCQAA9AKqJQCAb1zXLRaLuVwuHA7H43G/4wBbhk3iAABA76BaAgD4oFwu53K5QqHgOI4gCJZlUS2hm7BJHAAA6B1USwCAnVMul/P5fKFQqI3m8NZR0nXd32DA1mLUEgAA6B1USwCAbWdZVj6fz+fz1WrVOyJJUjQajUajmqb5mw3YDoxaAgAAvYNqCQCwXSzLKhQKhUKhXC57R0RRDIfDsVgsEol4u7MDXcnbGM40Tb+DAAAAbDuqJQDAFjNN02uUKpVK7WAoFPKGKXkThYDuRrUEAAB6B9USAGBrWJblrcxdm/UmCIKmabqu67ruzQ8CeoT3F951Xdu2qVMBAEB344U+AGBrGIaRSqWEF2a96boeiUR4U43eJIqioiiWZZmmyb8CAADQ3aiWAABbwxug5JVKvJcGVFX1qqVQKOR3FgAAgG1EtQQAOA1NZveIojg6OrrDeYC2xSZxAACgR1AtAQBaUi6X5+fnVVWdnJz0OwvQAVjJGwAA9AiqJQBAS1RVtW3bdV3HcSRJ8jsO0O68UUtUSwAAoOtRLQEAWqIoyuTkZDAYFEXR7yxAB/BGLTEhDgAAdD2qJQCA4LpuqVQqFouiKA4ODjY6jdWIgdapqhoMBr2CCQAAoItRLQFA7zJNs/QCx3EEQZAkaWBggHFJwJlTVXVqasrvFAAAANuOagkAeovjOOVy2RujVL8KjKIokUgkEon4mA0AAABAx6FaAoCeUK1Wi8ViqVSqVCqu63oHRVEMhUKRSCQcDgeDQX8TAgAAAOhEVEsA0LVM0ywWi8VisVKpePPdPMFgMBwORyKRUCjE3DcAAAAAZ4JqCQC6TbVazefzpVKpWq3WDkqSFH4B6woDAAAA2CpUSwDQbSqVSiaTEQRBFEVN07wBSoFAwO9cAAAAALoQ1RIAdJtIJBKLxSKRiKZpsiz7HQcAAABAN6NaAoAOUygUcrlcNBqNRqPrnqAoyvDw8A6nAgAAANCbJL8DAABOj7fXW7FY9DsIAAAAADBqCQA6TSQSqf0JoM0tLi4Wi8Xh4WH+zQIAgG5FtQQAbcF13UqlUqlUyuVypVIZGRkJh8PrnhkKhUKh0A7HA7A5juPYtm0YBtUSAADoVlRLAOAbx3HK5bLXJVUqFdd1a18ql8uNqiUAHSSRSCQSCVVV/Q4CAACwXaiWAGBHeXVSbXRSfZ0kiqI3IknTNE3TfAwJYKsEg0G/IwAAAGwvqiUA2HaGYdRGJ5mmWf8lRVG0FwQCAb8SAgAAAMDmUC0BwLZwHCefz3ujk9atk7zRSYxoAAAAANDRqJYAYFu4rru0tFS7GwgEvKFJoVCIVVcAAAAAdA2qJQDYJMdxHMdRlPV/kcqyHIvFFEXxlk+SZXmH4wEAAADADqBaAoDNyOVyi4uLkUhkbGys0TnDw8M7GQkAAAAAdp7kdwAA6EjektuWZfkdBAAAAAD8xKglAHgR27ar1WqlUqlWq7FYLBKJrHtaMBjcs2dPo9lwAAAAANAjeFMEoNcZhuEVSR7HcWpfUhSlUbUkiiK9EoAW5XI5wzASiYQkMWAcAAB0G94XAeg5tm3XuqRKpXLqpDZVVYPBYCgU0jTNl4QAukwqlbIsKxKJ8FsFAAB0H6olAN3PsqxakVStVpt0ScFgMBgMspsbgK0VCAQsyzIMg2oJAAB0H6olAN3MNM2TJ0/atr3meH2XFAqFmKICYFsFg8FSqWQYht9BAAAAth7VEoBupiiKt3aSqqq1QUl0SQB2mLenZLVa9TsIAADA1qNaAtDB8vl8Op0Oh8ODg4PrniCK4uTkpKqqdEkAfBQMBgWqJQAA0KWolgB0NsMwmtdG3js6APBRIBAQRdFxHNM0VVX1Ow4AAMBWoloC0HZs265Wq4ZhGIZRrVYHBwdDodC6Z4bD4bGxMcojAG1OFMVAIODtJ0C1BAAAugzVEgCf2bZdqVS8FskwDNM0vdWRaqrVaqNqSZblSCSyIzEB4IwEg0GvWtJ13e8sAAAAW4lqCcCOcl3XNE2vRap1SaeepqpqIBAIBoOBQIC9ugF0AZZbAgAA3YpqCcC2MwyjWCzW5ri5rrvmBFmWvRapViex6jaALkO1BAAAuhXVEoBtZxjGyspK7W6tSAoGg8FgkO3bAPQCr1qyLMu2bVmW/Y4DAACwZaiWAJypTCZTKpUSiUSjmWvBYFDX9VqdxBK2AHqQJEmKoliWVa1Ww+Gw33EAAAC2DNUSgDNVqVRKpVI4HG5ULamqOjo6usOpAKDdhEKhQqFAtQQAALoM1RKAdViWZZqm8QLLsnbt2tXo5Fgs1qRXAgB4vGqpUqn4HQQAAGArUS0Bvc51XW+bNq9F8m44jrPmtCaLg0Qike2PCQAdLxQKCYJAtQQAALoM1RLQW0zT9MqjWpdkWda6Z6qqGggEvD+DwSArbQPAGaqt5G1ZlqLwGgwAAHQJXtYAvWJhYaFQKLiue+qXZFn2KqRal6SqqiiKOx8SALqYJEmBQMAwjGq1SrUEAAC6Bi9rgG7gum61WrUsS9f15qeJolg/HMn7k22wAWBnhEIhwzAqlQpTiQEAQNegWgK6gWmaJ0+eFEXx7LPPbnROMplMJpOKojAcCQD8EgqFcrkcyy0BAIBuQrUEtC/HcbxFkbx1kSKRSDQaXfdMVVUVRQkEAo7jNFoUSVXV7QwLANiYt9ySYRh+BwEAANgyVEtAW7Btu36BbY9t2/XnSJLUqFoSRXHPnj07khQAsHnBYHBqaioQCPgdBAAAYMtQLQE7ynVdy7LMUziOs+75iqKoL9A0bYfTAgC2liiK3sAlAACArkG1BOyccrk8MzPT6Ktei+QtrV3TaHYbAAAAAADtgGoJ2DLFYrFUKum63mh4kbfVtCiKgUCgfjiSh9W1AQAAAAAdh2oJOA2WZXn10LoKhUIul5NluVG1pKrqWWedJcvytgUEAAAAAGBHUS0B6/CWQ6otilS7KwjC3r17Gw0vCofDkiSFQqEmV6ZXAgAAAAB0E6ol9LRGFZLruuueL4qibduNBi5Fo9FGO7gBAAAAANCVqJbQc1KpVKVSaV4hCXVbs9UvitRkNhwAAAAAAD2I98noKo7jVCoV13UjkUijcyqVSqlUqt2VZbm+OardYFFtAAAAAAA2RLWErmIYxuzsrKIoe/bsaXROX19fJBJhXzYAgI9SqVSxWBwcHGy08wMAAECnoFpC+7Jt+9S1kCzLSiaTfX19636LqqqBQEBV1SaX1XV9e/ICANAq0zSr1WqpVKJaAgAAnY5qCT7z+qN6pmnatm2aZqOFkLyd2tYly/KuXbu2LSwAAFujr69P13V6JQAA0AWoluCDYrGYzWa9FqnJQtqCICiK4q1/tObPHYsKAMB2oFQCAABdg7fo2HqFQsEwjFgs1qgDchynfiFtpTEWQgIAAAAAoJ1RLeH0OI5jWZbrusFgsNE5qVTKMIxQKNSoWtI0bWRkhP4IAAAAAIBOR7WEdZy6/lGN4ziCIIRCocnJyUbfruu6ZVmyLDc6QVGUaDS6LdEBAAAAAMAOolrqXY3KI29QUpNvFEWx+QnJZHKrwwIAAAAAgHZEtdSjHMd57rnnmpwgSVKj9Y+aDEcCAAAAAAA9hWqpO2UymXQ6HYvFBgcH1z1BesG6zZGqqqx/BAAAAAAANkS11AFc11132trY2FijAUSiKHrrbTe57N69e7cnLwAAAAAA6BVUS+1iw5WzT9VkqexoNBoOhxtt0AYAANrE6upqsVgcHBxUVdXvLAAAAJtB9eCnVCpVLpdN07Rte8OVs9dd9qjR+bIssyISAADtL5/Pl8vlcDgcj8f9zgIAALAZVEvbxbKsTCYjCEKj1Y4EQTAMo1wu1+56Kx/JslxrjlRV9VY+oicCAKArhcPhcrlcKpWolgAAQIeiWjo9tWlr3o1wOBwKhdY903GcbDYrSVKTaikej0ej0VqXxMrZAAD0mkgk4o1idl2XVwIAAKATUS2ttaY8qr+97rS1RtWSqqqJRKL5aCNN07YsNwAA6EDBYFCWZdu2K5UKLwwAAEAn6vVqqVwu5/P55uXRGvVz1oLBYKPTRFFMJpNbnRcAAHSbcDicz+eLxSLVEgAA6ERdXi2trq5alhWPxxuNHjJNc3V1tf6IKIpec1Trj9bc2JHggA9qexG6rlu7XbvR/O9/oVAQBCESiTSazVGtViuVyqazhUKhRk2u67rFYlEQBF3XG327bdveExFFUZIk72DtBgD4S9f1fD5fKBQGBgb8zgIAAHDaOrIocRynNshIkqRwONzozEwmY5pmOBxu9DFgKBRKJpNr+qNtCw5szH2BV4XU/nRdV5blJgPlVlZWHMdJJBKNCqBCobCysuLd9i5Ye7hWgsXj8SYLh83PzwuCsGfPnkaPXiqVao++CclkstFzdxzHe/Szzz67UbGVyWS8ZfXXJb7AK5u8P71fBd7tvr6+Rr9nHMfJ5/OSJEWj0dN7SgDwgnA4LIqiaZqGYQQCAb/jAAAAnJ52rJZc1601R96fa+7WhlEIgqBpWpNqKRqNOo7TpC0KBAKJRGKLnwB6lWEYruuqqtpoOEy1Wk2n08ILzU59bVRfJDWi6/ro6Gijr3pTO2OxWKNyx3Vd0zRbfzrCC51LK2d6/wybnBwIBJqMKtpQ8/daXuvU5NGb12e1fs227XVPiEQijb7XNM2lpSVZlptUS4uLi8ViUZIkSZK8Aqv+Ru22LMvSKZrEBtA1JEnSNK1UKhWLRaolAADQcfyvlmzbTqfT9eVR83fXHkmSvBFGTQZxCILAakdozut0PN7tJke82qjJyJ3FxcVKpTI2NtaoiXAcx5s4tqH6TserHoSNJnDF43HbtpvMWQuHw1NTU7W79VerPYRwOnVSvfHx8eYnRCKRJgXNmZBluf55rWtwcLD+P9yasVref9wm48WarH4iimI4HG4+2tF+QYvPqJ4kSaOjo40KdMuyKpWKLMuszwJ0ukgk4lVL/f39fmcBAAA4PdteLRWLxXK5HA6Hm4wtymaza46Ioug1R6cue+TdZnderKtarVqWFQgEVFVd9wTTNGdnZ+sHCp2W5lWmqqrN6wNVVQcGBmpzr9b8WX/3dIMJgrDhuxHvn88mrtx91tRnZzI4KBAIbFirDQ4OJhKJWoG1pq9cU2h6E37rG64mv+4qlcr8/HwoFJqcnGx0Tjab9QZverzhUbIs81sUaCu6ri8vL5fLZdu2+V0NAAA6y2aqJdd1Lcuqn6HWZHBQqVTKZrPeB/vrniDLciKRqFVI3g2mgfQgbyJk/bvr+rfZ3ldd1xVFscmksEwmk8/nBwYGGvUs3mIWaw42mql06o3mL/dHRkaaP0dFUfg4ugepqtqo62zO+/vfZCSaN4mmeeO5urpqGMapx70tC9Y0+PV3eXML7CRFUQKBgGEYpVKJtdsAAEBnWf8dy5q1jdb8eepYj/7+/kZlkKZpjuMwbQ31lpaWTm2RWlxMuvlQi0AgoGlak7fE3uQpb9CKN3CDsRtoWxsut9R8QKgnEokEAgHvX5k3L6+2grv3IUGjb/T+jUxNTdExATsjEokYhlEsFqmWAABAZ3m+WlpZWTEMo9YftfImv/5T7ibn67p+Jmv3on3UDyPSNK3JVlypVCoWiw0NDTW6VC6Xa/R35tRljE9d27hJyEQi0XxddlEUmxedQJc5dS9zbwxgrWyq7ZZQ432E4HVPTf7FpdPpfD7f19cXj8e3+UkAPUHX9UwmUywWvSG6fscBAABo1fPVUqlUqlartaPeUke18shbM7t+tSNe8XSBU+ed1d849Xj99zbZY154YW3sJg/trTe0boW0ZU8PQAO13/BNzqnVT01+23sbpTf5x+667uLionKKM0oPdK9QKKQoimVZpVJpm/Y9AAAA2A7Pv8Tv7+93Xbd+lQ3Ko85l27Zpms2H55w4caK+TGxRrQBqMk6tr68vGo1uuJfZ6T40gJ3USv2USCR0XW+yUbplWfl8/tQrq6qqKIr6YjTLgCAIuq5ns9l8Pk+1BAAAOsjzbxuY1d/OTh1MZNt2NBpt9K6vXC5vuGmU9y7u1ElnjW60PqRowzlrALrDhsuTS5I0ODhomqb1Am/CtWEYp64s7n2woZ5iO58B0Ha8aok5cQAAoLMwMcFPjuN4a5rUr2/i/Vk72Gh960Ag0Kha8t6eNR9uMDY2xgrWALaVLMunDlG0LMs8RW2Zp/rRlOFweHx8fGcjAz7TNI05cQAAoONQLW0L13W9N0uapjU6Z3FxMZfLtX5Nb7qiN4Co+b7goVBo9+7dza/GwCIAvvDm2a353ej9zlyjyVQ7QRAWFxe96orFm9BlvIFLhUKBagkAAHQKXpGfnvodlAKBQKPFjGzbnp6eFkXx7LPPbnSp+ilptbZo3dveje16SgDgN1EUA4FA8y6pnuu6XjXf39+/nbkAH9SqpaGhIQYXAwCAjkC19LzadkjN1X9LIpFoVC3V+iDHcRqNDxoYGPA2Stv6JwMAXc113aGhIdM0m9TuqVQqn897nwF4f6qqyq9ctD9N0/r6+sLhsN9BAAAAWtXT1VKxWEyn07UljVr8rlZGEomiuHfv3ubX4R0OAGyOJEl9fX3NzzEMw5tYVywWvSO1sVFe2RQIBFgmHO1paGjI7wgAAACnoZurpdnZWcMwxsbGGo0tchynUqnU7oqiKLdgp+IDADZvaGior6/P242uCxlMuwAAIABJREFUWq0ahuE4TrVarVar+XzeO0eSpPphTcFgkHXoAAAAgNPV7tVSbWGj+kWOardDodDIyEij763tdd3oBE3TxsbG6tc22p4nAQDYabIsh8Ph+llFpmnWaqZqtWqapvcBQ/1nDKqqhkKhYDDY19fH/xQAAACAVvhcLbmuW6lUHMdpVB41//bmY4iGh4dFUWwy38HbqGiT0QEAHUVVVVVVa7tuua5bP6apWq1aluXNocvn8xtOuAMAAADg2d5ixTRNy7JUVW3U4JimOTMz0/wikiQpiuINLFpzo3kxFAqFNh8dANDVRFH0JsFFo1HviG3blUrFG9DUZMhSpVJxXZfZcwAAAIBn89WSN7zIcRxN0xqdk06nc7ncwMBAo/2ha1XRqbVR7QbLXQMAdoAsy5FIpDasqZFUKlUqlQYHB+Px+M4EAwAAANrZ+tXSmhlqTaaqiaJ49tlnN7y6ojTf7FmSpLPOOusMnwMAADvG+/CDgbEAAACARxEEIZVK1Toj74bruq18szewyHGcRpMCkslkMpncyrwAAPiqyfYRnnw+n81mQ6FQKBTSNI1F/QAAANDdFEEQ8vm8aZprviCKYqN5arXbfgQGAKCtlcvl+o3nFEXRNC0UCoXD4UAg4G82dJZSqZTJZDRNSyQSfmcBAABoSBEEIRaLua57an/kdzYAADpPf39/KBSqVCrlctkwDMuy8vl8Pp8XBEGW5XA4rGlaOBxusoEp4LEsq1QqmaZJtQQAANqZIggCr1cAANgqqqqqqhqLxQRBcBzHG8Tk/Wnbdq1mUlXV65iYNIdGdF03TdP7uwQAANC2eC0LAMB2kSSptuuc67qGYZRKpVKpVC6XTdM0TTOXywmCoCiKN2MuEolQM6FGkiTWrAQAAO2P168AAOwEURSDwWAwGOzv77dtu1wuex2TN2muUCgUCgVRFPfu3dtkZ1UAAACg3VAtAQCw02RZ1nVd13VBEGzb9mbMlUolSZLolQAAANBZqJYAAPCTLMu1SXOO4zQ50zAM9pgDAABAu6FaAgCgXUiS1OhLjuOcOHGiyQkAAACAL3iFCgBABzAMQxRFqiUAAAC0G0YtAQDQAUKh0FlnnWVZlt9BAAAAgBfhw08AADqDKIqqqjY5YWZmZnl5uVwu71gk7CTXdQ3D8DsFAADAWoxaAgCgG3jbzJXL5Ww2K0lSJBKJRqPhcJgt57pDpVKZm5uTZXnXrl1+ZwEAAHgRqiUAALpBMBgcHR0tFArFYtFxnHw+n8/nZVnWdV3XdU3T6Jg6WiAQ8EYtlUqlcDjsdxwAAIDfoVoCAKAbiKLotUiu65ZKpUKhUCgUbNteXV1dXV2VJCkajUajUU3T/E6KzZAkKRaLZbPZbDZLtQQAANoK1RIAAF1FFMVIJBKJRIaGhsrl8pqOSVXVaDQai8WaL9uENuRVS6VSybIsReElHAAAaBe8LgEAoDuJohgOh8Ph8ODgYKlUyufzhULBNM10Op1Op0OhUCwW03VdlmW/k6IlwWBQ07Ryuby6uppMJv2OAwAA8DyqJQAAulxtHJPjOIVCIZ/Pl0qlSqVSqVSWl5e9Bb91Xfc7JjYWj8e9ldr7+/sliX1+AQBAW6BaAgCgV3jr9cRisfqOqVAoVKtVqqWOoOu6qqqmaebz+b6+Pr/jAAAACALVEgAAPajWMRmG4W0k53citCoejy8vL2cyGaolAADQJhhKDQBA7woEAslkMh6P+x0ErYrFYpIkmaZZLBb9zgIAACAIVEsAAKAJ0zQzmYxt234HwfMkSfLGK2WzWb+zAAAACALVEgAAaGJ1dXVlZWVxcdHvIPideDwuimKpVKpWq35nAQAAoFoCAACNhUKhUCjEsj5tRVEUb9l1Bi4BAIB2QLUEAAAa0nV9cnIyEon4HQQv4i2Plc/nTdP0OwsAAOh1VEsAAGDzWIbJF6FQKBwOu66bTqf9zgIAAHod1RIAANi8hYWF6enp1dVV13X9ztJbEomEIAj5fN6yLL+zAACAnka1BAAANsm27Wq1ahjG0tLSc889l0qlqDl2jKZpmqa5rpvJZPzOAgAAehrVEgAA2CRZlvfs2TM8PBwMBm3bTqfTzz333NzcXKlU8jtaT+jv7xcEYXV1lUYPAAD4SPE7AAAA6GCiKMZisVgsViwWM5lMuVwuFovFYlHTtP7+ftb/3laRSCQYDFar1Ww2OzAw4HccAADQo6iWAADAFohEIpFIpFKpZLPZQqFQLpfL5XIwGEwmkxRM26e/v39hYaFQKFAtAQAAv1AtAQCALRMKhUZGRizLSqfTuVyuWq3Ozc0Fg8FEIqHrut/pulA0GrVtOxaL+R0EAAD0LqolAACwxRRFGRoaSiaT2Ww2m81Wq9X5+XlVVfv7+2OxmCiKfgfsKvF43O8IAACgp1EtAQCAbSHLcjKZjMfjXsFkmubS0lImk6FgAgAA6CbsEAcAALaRVzDt3r07kUhIkuQVTCdOnCiXy35HAwAAwBZg1BIAANh2XsHU39+fy+UymYxhGJLE51sAAADdgGoJAADsEEmS4vF4LBYrFovBYNDvOAAAANgCfGAIAAB2lCRJ0WjU7xQAAADYGlRLAAAAAAAA2CSqJQAA0EZKpdLS0pJlWX4H6Uiu66bT6aWlJb+DAACAHsJaSwAAoI2kUqlKpSKK4uDgoN9ZOo9hGKlUShCEvr4+VrMCAAA7g2oJAAC0kWQymU6nE4mE30E6UjAYjMfjoVCIXgkAAOwYqiUAANBGwuFwOBz2O0UHY7QXAADYYay1BAAAAAAAgE2iWgIAAAAAAMAmUS0BAICOkcvlTp48WalU/A4CAACA51EtAQCAjpFOpyuVysmTJxcWFizL8jsOAAAAqJYAAEDnmJiYiEajgiDk8/np6elMJuN3IgAAgF5HtQQAADqGoigjIyMTExPBYNBxnJWVlZMnTxqG4XcuAACA3kW1BAAAOoymaZOTk0NDQ5IkVSqVEydOpNNp13X9ztWOLMtaWFgoFAp+BwEAAF2LagkAAHQeURT7+vp2794djUZd102lUtPT0+Vy2e9cbWd1dTWfz6+srFC9AQCAbUK1BAAAOpUsyyMjI2NjY4qimKY5MzOztLTkOI7fudpIIpFQVdU0zXQ67XcWAADQnaiWAABAZ4tEIrt27err6xMEYXV19cSJE6VSye9Q7UIUxYGBAUEQMpmMaZp+xwEAAF2IagkAAHQ8SZKGhoYmJia8ETqzs7MLCwu2bfudqy3ouq5pmuu6S0tLfmcBAABdiGoJAAB0CU3TpqamvOFL+Xye4Us1w8PDoiiWSqVcLud3FgAA0G2olgAAQPfwhi+Nj4+rqmpZ1uzsLCtYC4KgqmoikRAEYWVlhcFcAABga1EtAQCAbhMOh6empmKxmCAImUxmdXXV70T+6+/vDwaDtm0vLy/7nQUAAHQVqiUAANCFJEkaHh4eHR3Vdd2bItfjRFEcGhoSBCGfzzNPEAAAbCGqJQAA0LV0XR8dHRVF0e8gbSEUCnkt29LSkuM4fscBAABdgmoJAACgVwwMDMiybJpmJpPxOwsAAOgSVEsAAAC9wlvmXBCETCZTrVb9jgMAALoB1RIAAOhRvblznK7rsVjMdd2FhYXe/AkAAICtRbUEAAB6UaVSOX78eLFY9DuIDwYHBxVFMQwjlUr5nQUAAHQ8qiUAANCLstmsZVmrq6t+B/GBt32eIAiZTKZcLvsdBwAAdDaqJQAA0IuGh4cTicTIyIjfQfwRDoe93eIWFxfZLQ4AAJwJqiUAANCLRFFMJpOS1LuvhQYGBhRFMU0znU77nQUAAHSw3n05BQAA0Mtqu8Vls1nbtv2OAwAAOpXidwAAAAD4IxKJJBIJXddlWfY7CwAA6FRUSwAAAL0rmUz6HQEAAHQ2JsQBAAC8iGma09PTbJ0GAADQCqolAACAF0mlUoZhzM7O5nI5v7MAAAC0O6olAACAFxkeHo5Go67rLi4uLi8v+x0HAACgrVEtAQAAvIgoiiMjIwMDA4IgZLPZ+fl513X9DgUAANCmqJYAAADW0d/fPzo6KopioVA4efKkZVl+JwIAAGhHVEsAAADr03V9YmJCluVqtXry5Mlqtep3op3guu7Kyoppmn4HAQAAnYFqCQAAoKFQKDQ5ORkIBCzLmpmZKRaLfifadsvLy5lMZn5+3u8gAACgM1AtAQAANKOq6sTERCgUchxnfn6+67eNSyaTwWBwcHDQ7yAAAKAzUC0BAABsQJbliYkJXde9bePS6bTfibaRLMtTU1OapvkdBAAAdAaqJQAAgI2Jojg6OppIJARBSKVSKysrficCAABoC1RLAAAArUomk0NDQ4IgZDKZhYUF13X9TgQAAOAzqiVs7M4777zzzjv9TrGxTskJAOhofX19IyMjoijm8/n5+XnaJQAA0OMUvwN0tkqlcvjw4WPHji0vL5fLZW/Ny3POOeeSSy4JhUJ+p9t2lmU9/vjjR48enZ+fL5VKsiwnEolzzjnn8ssvj0QifqcDAGC7RKNRSZLm5+eLxeLs7OzY2Jgk8XEdAADoUVRLm/f000/ffffd5XK5dqRUKk1PT09PTx88eHD//v0XXXSRj/G228zMzHe+853V1dXaEcuy5ufn5+fnH3roof3797/85S8/rQt6A44YdgQA6AiRSGRsbGx+fr5cLs/Ozk5MTIii6HcoAAAAH1AtbdKxY8e+8Y1vuK67Z8+eyy+/fGJiIhwOG4axsrJy5MiRw4cP33333V1cLc3MzHz961+3LGtsbOyKK67YtWuXruuWZaXT6aNHj/7yl7/8/ve/f7rVEgAAnSUcDk9MTMzOzmqa1gu90urqaigUCgaDfgcBAADthWppM0zT/N73vue67jXXXPPa1762dlzTtMnJycnJyauuuurAgQM+JtxWtm1/97vftSzr0ksv3b9/f20KgKIoY2NjY2Nj+/bt6+KnDwBATTAYnJycVFXV7yDbLpvNLi8vK4oyNTUly7LfcQAAQBuhWtqMxx57rFgsTk1N1fdK9UKh0PXXX3/q8Uwm8+CDDz7zzDO5XE5RlNHR0SuuuOK8886rP6c2L+zxxx9/5JFHlpeXJUmampp63eteNzIysukLfuITnzh8+PCvfvWrlZUV0zQ/8YlPCIIwOzv72GOPHT9+PJPJiKLY19d37rnnXnXVVZqmNXn6TzzxRDabHRkZqe+V6gUCgeuuu652t5VHqc2Dq58QV7u9uZyekydPPvjggydPniyXy5qmTU1N7du3b2JiYs1pTz/99AMPPOCtxjowMHDJJZdccsklzNEDAGyoF3olQRCi0Wg2mzVNc35+fnx8vBdGaQEAgBZRLW3G008/LQjCZZdddlrf9cwzz3zrW98yDMO7a1nWc88999xzz7361a/+/d///TUn/+hHP3rooYfqH3F6evo973lPMpnc3AXvvffeQ4cOrTn45S9/uf7uysrKysrKU0899e53vzscDjd6IkeOHBEE4ZWvfGWLS5Zu7lG25Aq//OUvDxw4UNu7p1AoPPXUU7/97W//8A//8JJLLqmd9vDDD99///21u3Nzc3NzcwsLC61kQ+tEUdzhfZS26hE/85nPPPjgg//5n//ZymPt37//1a9+9W233XbmjwsA7UOW5bGxMe+jmqWlpeHhYb8TAQCAdkG1tBle6TA5Odn6t+RyuW9/+9uGYVx44YX79u1LJpPlcvk3v/nN//zP//z85z/fu3fvrl276s9/5JFHrr766le84hW6ri8sLPzgBz9IpVIHDx6sjQY63QsePnx43759F198cSKRqFVCu3fvvuSSS6ampnRdNwxjbm7uJz/5yezs7MGDB9/whjc0ei7z8/OCIKy5fhOtPMqdd97ZZIjQ5nIuLCzcd999ruu+4hWvuOqqq+LxeDabPXjw4GOPPXbgwIHJycmhoSHvtP/6r/8SBOGyyy7bt29fLBbL5XIPPvjgL3/5yxafILpbsVi86667HnzwQe/uhnXVF77whVe/+tW33nprK6PqAKCDBAKBsbGx2dlZb6x0/cddAACgl1EtbUapVBIEQdf1NcdPrUVqRx5++OFqtfp7v/d7b33rW70jgUBg3759sizfd999jz766Jqm5uqrr67Ntpuamrr22mv/5V/+5fjx47UTTveCl1122etf//o18W6++ebabU3T9u7dOzAwcNdddx09erRJZVMsFgVBiEajjU7Ykkc58ys88sgjjuOcc845b3nLW7wjyWTyuuuuKxQKx44de/jhh9/85jcLgvDoo486jvPSl7702muv9U7r7++/9tpri8XiU0891eJzxA7byQFQd9999759+17ykpd4dzd83PPOO+/SSy/9wQ9+8I53vGP70wHAjtI0bXh4eGFhIZ1OK4rS19fndyIAAOA/qqUdcuzYMUEQrrjiijXHL7jggvvuu+/kyZNrjq/ZXm18fFwQhHw+v+kLXnrppaem8obnPPvss9lstjaxThCE1dXVFp5Tq878UTZ3henpaUEQrrrqqjXHr7766mPHjtV6Ou/Gvn371px25ZVXUi1BEIR77rnnhhtuOK1vefvb3/7DH/5w+6ql5557rq+vL5FIbNP1AWwJwzAkSVKUbnutFY1GTdNMpVLLy8uqqrY4tx0AAHSxltbKwRreq6j6osdzZ501X8pkMoIgfOUrX/nkJz/513U+//nPCy+MA6oXj8fr73ob/dq2vekL9vf3rzmyvLz8pS996eGHH15aWqrvawRBsCyrydOPRCLrPv11bfpRzvwKuVxOEITBwcE1x715cLX83mmnjuofGBhoJV5HqFar733ve5PJ5MjIyOc+97na2quO43zqU5/as2dPIpF417veVftrI4riP/3TP+3evVvTtCuvvPJ///d/Nzz/rrvumpyc9OZaHj169G1ve1symezr67v++utXVlZaCWlZ1h133LFr167+/v6///u/9w6ueykvvyiKtSey4SNWq9UPfOADIyMjIyMjH/jAB6rVavOfTL1Dhw5deeWVtbu1cwzDeP/73+9979/93d/Vf8urXvWqRx99tJVnfbqeffbZG2+88YYbbjj1XzSAtmIYxszMzOzsbIv/s+ssiUQiFou5rjs/P1/7jQoAAHoW1dJmjI6OCi8MimmRN4nGcRzHcdw63lfrOyPPhhuvnO4FT92/5sc//nG5XB4fH/+TP/mTj3zkI3fcccedd955++23b/hcTuvpb/pRtvAK+NSnPjU9Pf3kk0/+6le/+u///u/a8X/4h3/46U9/+pOf/OSZZ54xTfOOO+6ofelHP/rRT3/605WVlTe+8Y1/8Rd/seH5P/vZz7wZiIIg3HDDDe9///tnZmZOnDgxPj7+V3/1V62E/Nu//duDBw/+5Cc/efbZZ2dmZryD617K+3te/xd+w0f89Kc//Zvf/ObQoUOHDh164oknPvOZzzT/ydRbWFjw/s6v8ZnPfObo0aNPPPHEoUOH7rvvvvovjY2Nzc3NtfKsWzc9Pf3Hf/zH55133je/+c3bb7+dvZmANifV8TvLthgaGtI0zXGc+fn5U191AACAntJtg7R3xrnnnnvkyJFHHnnkoosuavElY19fXyqVuuWWW7Zqzcszv6A3Eextb3tb/fCHVCq14Teee+65//d///fwww+38vQ3/ShnfoVYLJZOp5eXl6empuqPLy0tCXVrRXmnpVKpiYmJ+tNaHGvTEb7xjW/ce++9Y2NjgiDcddddF1xwgXf8y1/+8ve///09e/YIgvD5z3/+iiuuqA0X+tKXvjQyMiIIwoc//OHPfvazG57/j//4j971BUF4/PHHvRuapn3605+uPVxzX//617/3ve/t3bvXC3lal9rwtH//93+/5557vP/EX/ziF6+77rq//uu/bvKTqddocaV/+7d/++EPf+hNVv3iF7944YUXtvI0N2FmZub222//j//4D8dxLMuamJiIRCI//vGPva/eeeedTf45KIrCXJXuYxjGiRMnPve5z/kdBBtwHKd+fGX3cV03m83atq2qaiwW6+Jn2oT3mQoAAD2OamkzLrroop/+9Kfz8/MHDhzYv39/K+3SOeec89BDDz3wwAPe0tFn7swv6H3GuGYNiNo2WE1cdNFFP/vZzxYWFho9fcMwDhw44G1m1/qjKIpiWVa1WvVm/515zl27dqXT6QceeGBNtfSLX/xCEITdu3d7d3fv3p1Opx988MG3v/3t9ac99NBDGz5Ep5ibm/P6IEEQzjrrrNrx6enp8847r3a3/j+l1ysJghAOh8vl8obn1/+QDx069NGPfvTXv/61N21TluVWQs7MzJx99tlrDrZ4qQ1Pm5ubqz3xs88+e3Z2tnZ83Z9MvdHR0bm5uVOzzc7O1l9zzcOtO9BpE8rl8oc//OFvfetbkiQ5jqMoSrVarR+Wdfjw4S15IHSW48ePe/Uo4Lta/96b1VIoFGItcwAAqJY2Q1GUG2644etf//qhQ4dmZmYuv/zyXbt2xWIxWZYrlcrCwsKTTz655lv27dv3+OOP/+pXvyoWi5dffvnQ0FAkEjEMI51OHz9+/Mknn3zPe95zWhnO/ILDw8Ozs7M/+MEP3vCGN8Tj8Uwm89BDD9VGfzQhy/Lb3vY27+nPzc298pWv3LVrl67rlmWl0+mjR48++uijxWLRq5ZafxRvHNavf/3riy++OBAInHnOK6644vHHHz9y5Mg999zzqle9qq+vb3V19eDBg08//bQsy7UV0C+//PLHHnvsqaeeOnDgwJVXXhmLxXK53EMPPdRNa3iPjY0999xzXiv07LPP1o5PTU3df//9tZZtQ03Or39H8Y53vOOOO+74zne+4/3MWxxYNzk5eezYsZe97GX1Bxtdas0bmA0fcWxs7Nlnn33pS18qCMKxY8e8oUZC459MvUsvvfSBBx44tVoaHx+vXfOZZ56p/9IDDzxw+eWXt/KsN6Rp2je/+c2PfexjH//4x3/84x9blrW6unrgwAFvyTAA8F21Wp2ZmXEcJxKJjI6O9mbBBABAj6Na2qTJycmbb775u9/97sLCwg9/+MNTT4hGo/v376+/e9NNN33rW986cuTIkSNHzjzAmV/wNa95zTe+8Y1jx455m815Lr/88laWH56YmLj55pu/853vzM3N3X333Wu+GggEvF7ptB7lpS996cGDB++///7777/fO+Kthr7pnCMjI2984xsPHDhw+PDh+pEdoiju379/eHi4dtof/MEf/OhHP3r00Ufrr3nppZceOnSoxRE3be7GG2/80Ic+9JWvfEUQhA996EO14+9973vf/e53f/GLX9y7d++RI0c+/elPf/Ob32xynRbPLxaLsVgsEolMT0//5V/+ZYshb7755ltuueWrX/1qf3//Jz/5SW9OXKNLDQwM/Pa3vz3//PNbfMQbb7zx1ltv/ed//mdBEG699dYbb7yx+U+m3pve9KZvf/vbf/qnf7rm+E033fTBD37wa1/7miAIH/jAB+q/9N3vfvemm25q8Ym34qKLLrrnnnuefPLJj33sY/fee+9nP/vZL3zhC1t4fQDYtGAwOD4+Pjs7WywWFxcXa4NeAQBA7+jOpSV3xuTk5C233PLmN7/53HPPjcViiqKoqtrX13f++edfd911t956a+19r2diYuJ973vf6173uomJiVAoJElSKBQaHx9/zWte8773vW8TAc7wgi95yUtuuummyclJRVECgcD4+Pib3/zm+jpsw0e/5ZZb3vSmN51zzjne0w8Gg6Ojo9dcc82tt9768pe//HQf5ZprrrnqqqsSicSaNudMcl522WV/9md/dv7550ciEUmSIpHI+eef/653veuSSy6pP+3KK6985zvfuXv37kAgEAgExsbG3vSmN73uda8TXtibr9Pdfvvtk5OTL3vZy17xile86lWvqq3p7v0Fvv7662Ox2Dvf+c5a4dJIi+d/9atfve2226LR6Gtf+9prrrmmxZAf+chH9u3bd8011+zdu7c2va7RpW677bZ9+/bVPhvf8BFvv/32888//9JLL7300ksvuOCCj3/8481/MvX+6I/+6OGHHz569Oia4x//+MfPOuusCy+88OKLL379619fO37kyJFHH330rW99a4tPvHUXXnihVzAVCoXTWrAMALZVKBQaGRkRRTGfzy8vL/sdBwAA7DSx0Qq1QI975pln/vVf/3VycvLP//zP/c6ylZ544onrrruu0eSvXtbkJ/M3f/M3v/jFL+69995WrnPttddeffXVt91221YHBIC2ls/nFxYWBEFIJpOJRMLvOAAAYOcwIQ5Yh+u6Bw8eFBov7dxxPvjBD370ox+tVqsf+tCHatMVIbT2k6lfNntDLTZQAHqT4zjz8/ORSCQej/udZYtFo1HLslZWVlKplKIosVjM70QAAGCHUC0Bwte+9rVLLrlkfHy8r6/PcZy5ubmf//znx48fDwQCF198sd/ptsbu3bsvu+wywzDe8pa3fOpTn/IxyborvPo4fLJ9fjIAekGhUCiVSqVSSZblaDTqd5wt1t/fb9t2Pp8PhUJ+ZwEAADuHCXHA8+uFryHL8vXXX3/BBRfseBwAQDdbWVnJZDKCIIyOjuq67necrWfbdndsggEAAFpEtQQIJ06cOHz48NzcXC6Xs207Go3u3r37yiuvZH93AMB2WFhYyOfzkiSNj48zwAcAAHQ6qiUAAIAd5bru3NycNy1ucnJy3e0pAQAAOoXkdwAAAIDeIori6OhoMBi0bXtubs5xHL8TAQAAbB7VEgAAwE6TJGlsbExRFMMw5ubmGEUOAAA6F9USAACADxRFGRsbkySpXC4vLS35HWfblctlvyMAAIBtQbUEAADgj2AwODw8LAhCLpfzto3rVktLSzMzM7lczu8gAABg61EtAQAA+EbX9WQyKQjCyspKsVj0O8528Wb8iaLodxAAALD12CEOAADAZwsLC/l8XpKkiYmJYDDod5xtUS44lLKyAAAgAElEQVSXNU3zOwUAANh6jFoCAADw2fDwcCgUchxnbm7Osiy/42wLeiUAALoV1RIAAIDPRFEcGxtTVdWyrPn5eQaVAwCADkK1BAAA4D9ZlkdHR0VRrFQqKysrfscBAABoFdUSAABAWwgGgyMjI4IgZLPZQqHgdxwAAICWUC0BAAC0C13XE4mEIAiLi4uGYfgdZycUCgXbtv1OAQAANk/xOwAAAAB+J5lMVioVWZYVpftfpxWLxYWFBVVVx8fHe+H5AgDQlUTWiQQAAGgrjuNIUk8MLTcMY3Z21rIsWZbHx8eDwaDfiQAAwGmjWgIAAIBvTNOcm5szDMNbyFzTNL8TAQCA00O1BAAAAD/Ztj03N1epVERRHB4ejkajficCAACngWoJAAAAPnNdd3FxMZ/PC4IQj8cHBwf9TgQAAFpFtQQAAIC2kEql0um0IAi6ro+MjIii6HciAACwMaolAAAAtIt8Pr+4uOi6bjAYHBsbY9s4AADaH9USAABAB7Asy7KsUCjkd5BtVyqV5ufnHcdRVXVsbCwQCPidCAAANEO1BAAA0O6q1ers7KwoilNTU7Is+x1n2xmGMTc3Z5qmJEkjIyORSMTvRAAAoCHJ7wAAAADYgKqqsizLsuw4jt9ZdkIgEJicnNQ0zXGcubk5bwEmAADQnhi1BAAA0AEsy5JluddWtl5ZWclkMoIghMPhkZGRXhixBQBAx6FaAgAAQPuqLeytKMrY2FgwGPQ7EQAAeBGqJQAAALS1SqUyPz9vWRZLLwEA0IZYawkAAABtLRQKTU1NhcNhQRBUVfU7DgAAeBFGLQEAAKADuK5brVZDoZDfQQAAwItQLQEAAAAAAGCTmBAHAAAAAACATaJaAgAA6EjVavXEiROFQsHvIAAAoKdRLQEAAHSkQqFQrVaXlpZs2/Y7i8+8ZZj8TgEAQI+iWgIAAOhIiUQiGAzatr20tOR3Fp+lUqmTJ09ms1m/gwAA0IuolgAAADqSKIrDw8OiKBYKhV6eFue6rmmaruuqqup3FgAAehE7xAEAAHSwVCqVTqdlWd61a5csy37H8U2lUgmFQn6nAACgFzFqCQAAoIMlEolAIGDb9vLyst9Z/ESvBACAX6iWAAAAOpgoiiMjI6Io5vP5Xp4WBwAA/EK1BAAA0NmCwWA8HhcEYXl52XEcv+MAAIDeQrUEAADQ8ZLJZCAQsCyrx6fFrWt5eblarfqdAgCArkW1BAAA0PFEURwaGhIEIZfLlUolv+O0kVwul81mT548mU6n2b4GAIDtQLUEAADQDTRN86bFLS0t0aHU6Lre19fnum4qlTpx4gTDlwAA2HIirzwAAAC6g+M409PTlmX19/cPDAz4HaeNFIvFpaUly7JEUYzH48lkUhRFv0MBANAlqJYAAAC6R6FQmJ+fF0VxcnIyGAz6HaeNWJa1tLRULBYFQQiFQsPDw4FAwO9QAAB0A6olAACArjI3N1csFjVNm5iY8DtL28nlct4+eqIo9vf3JxIJhi8BAHCGqJYAAAC6imma09PTruuOjIxEo1G/47Sd+uFLgUBgaGhI0zS/QwEA0MGolgAAALpNKpVKp9OyLO/evVuS2LZlHbXVlwRB0HV9aGhIlmW/QwEA0JGolgAAALqN67rT09Omacbj8cHBQb/jtClv27hMJiMIgiRJyWTS22IPAACcFj7FAgAA6DaiKHqNUj6fdxzH7zhtShTFgYGBiYmJQCDgOM7y8vLs7Kxpmn7nAgCgwzBqCQAAoDtlMplYLMY8rw25rptOpzOZjOu6LO8NAMDpoloCAAAABMMwlpeXS6WSIAiBQGDXrl1+JwIAoDNQLQEAAADPK5VKy8vLsVisv7/f7ywAAHQGqiUAAADgd7yXx0yIAwCgRVRLAAAAAAAA2CR2iAMAAAAAAMAmUS0BAAAALXEcZ3Fx0TRNv4MAANBGqJYAAAB6heM4fkfobJlMJpfLzc3N+R0EAIA2QrUEAADQE3K53PHjx3O5nN9BOpiu65qmJZNJv4MAANBGqJYAAAB6gm3btm1TLZ2JYDA4MTGh67rfQQAAaCPsEAcAANATXNfN5XKxWEwURb+zAACA7kG1BAAAAGwNy7IURfE7BQAAO4oJcQAAAMAWME3z+PHj8/PzhmH4nQUAgJ3DhyoAAADAFiiVSq7rFgqFQqEQi8USiYSqqn6HAgBg2zEhDgAAANga1Wo1lUoVi0VBEERR9AompsgBALob1RIAAACwlSqVSiqVKpVKAgUTAKAHUC0BAAAAW69arabT6UKh4N3VdT2ZTAYCAX9TAQCw5aiWAAAAgO1CwQQA6HpUSwAAAL3IcZx0Ol0ulycnJ/3O0v3K5XI6na6fIhePxymYAADdgWoJAACgFzmOc/z4cdu2h4eHY7GY33F6Qn3BJAhCJBJJJBKhUMjfVAAAnCGqJQAAgB6VTqdTqZSiKLt37xZF0e84vaJcLmcyGW8XOUEQNE3r7++PRCL+pgIAYNPYqAIAAKBHxePxbDZrWdbq6mo8Hvc7Tq/QNE3TNNM0s9ns6upquVx2XZdqCQDQuRi1BAAA0Luy2ezy8rIsy7t375Ykye84Pcc0zUwmEw6HdV33OwsAAJtEtQQAANC7XNednp42TTOZTCYSCb/jAACAzsNnUwAAAL1LFMX+/n5BELLZrOM4fscBAACdh2oJAACgp8VisUAgYNt2JpPxOwvWmp+fn52drVarfgcBAKAhqiUAAICeJopiMpkUGLjUfmzbLhaLpVKJ/fsAAO2MagkAAKDX6boeCAQcx8lms35nwe94y6sPDQ0FAgG/swAA0BDVEgAAAARvDW8GLrUbRVH6+vr8TgEAQDNUSwAAABCi0ai34tLq6qrfWXAaMpmMZVl+pwAA9DSqJQAAAAiCIHhbxWUyGQYudYpisbiysnL8+PH5+flyuex3HABAj6JaAgAAgCAIQjQaVVWVgUsdRJIkTdNc1y0UCjMzM9PT09ls1rZtv3MBAHqL6Lqu3xkAAADQFlZXV5eWlmRZ3rNnD7uSdYpqtbq6uprP573hZqIo6roei8XC4bDf0QAAPYFqCQAAAM9zXff48eOWZQ0ODsbjcb/j4DQ4jpPL5XK5XLVa9Y4oihKLxWKxmKqq/mYDAHQ3qiUAAAD8TjabXV5eVhRl9+7dDFzqRIZheB1TbWZcMBjs6+uLRqOSxGoYAICtR7UEAACA36kNXBoaGmLb+87lum4+n8/lcrXlvSVJisVi0Wg0FAr5mw0A0GWolgAAAPAimUxmZWUlHA6Pj4/7nQVn6tRBTIFAwOuYFEXxNxsAoDtQLQEAAOBFHMcpFou6rjMhrmu4rlssFvP5fLFY9F7/DwwM9Pf3+50LANANqJYAAACAXuE4TqFQyOfzw8PDjFoCAGwJqiUAAAAAAABsEp9UAAAAAPidVCrlum5fX5+qqn5nAQB0AKolAAAAAM9zXTebzTqOEw6HqZYAAK2gWgIAAADwO8PDw6VSKRwO+x0EANAZWGsJAAAAwGmwbVuWZb9TAADaBaOWAAAAAJyG2dlZy7LC4XA0Gg2Hw6Io+p0IAOAnqiUAAAA0YxjG6upqMpmUJMnvLPCfbduGYbium8/n8/m8LMu6rkciETomAOhZTIgDAABAM8ePHzdNc3BwMB6P+50FbcF13WKxWCgUisWi4zjeQUmSIpGIruvhcJgWEgB6CtUSAAAAmslms8ViMZFIaJr2/+3de3Bc5X0/4LO72tWuJN8kHF8pN0NCTLmEQKAEDzWXlDothMu0QDqEW7gMkDRDgOKOZygTQtp0pgkUXEJISFs6bTPFw0zohIBrIIRi7rQGAgEMOAbbsmxZl73v+f1xmv1tZEuW1pJWl+f5Q7P7nve853tkGbQfv+97Gl0LE0sYhtlstre3t7e3t1wuR42xWCyTyUQxU1OTRRIAU59oCQAA2FfZbDaaylQsFquNzc3Nra2tra2t6XS6gbUBMKZESwAAwKgpFAp9fX19fX3ZbLbamEgkoozJcjmAqUe0BAAAjL4wDPv7+6OYqVQqRY2LFy+2shJgihEtAQAAYyjakimax7T//vt7kBzAFCNaAgAAGi9aQJdOp2VPAJOLdc4AAEDjdXZ2btq0qaenp9GFADAyoiUAAKDxkslkIpFoaWlpdCEAjIwFcQAAjEwYhpYsMf6y2WypVGppaUkkEo2uBYD/r6nRBQAAMGnk8/lt27YFQbB48eJG18K0s3Pnzt7e3iAIUqlUS0tLJpPJZDJiJoCGEy0BADBciUQil8uFYZjP55ubmxtdDtNLc3NzsVjM5/OFQqFQKOzcuTMIglQqlfmNpiafbgAawII4AABG4KOPPurp6Zk5c+a8efMaXQvTUblc7u/v7+/vz2azxWKx9lAymYwypnQ6nUqlGlUhwHQjWgIAYASy2eymTZtisdhBBx1kLRKNVSqVsr9RKBRqDyUSiepsJjPsAMaUaAkAgJF5//338/n8fvvtN2fOnEbXAv+nXC7ncrn+/v5cLpfP52s/5sTj8dbW1vnz5zewPIApzGpkAABGZtasWVu3bu3u7hYtMXEkEonW1tbW1tYgCCqVSi6Xi2Yz5XK5SqXiH9QBxo5oCQCAkZkxY0ZnZ2exWOzv729paWl0OTBQPB5vaWmJfjijXedjsdgQ/Xfu3Nnc3JxOp4fuBsAexRtdAAAAk0w8Hp8xY0YQBN3d3Y2uBfYiFoul0+khtlsqlUrbtm3btGmTmU0A9REtAQAwYrNmzQqCoK+vr1QqNboW2CeVSqWtra21tTUeH/TDUalUEjwBDMY23gAA1OODDz7I5XIdHR3t7e2NrgXG1qZNm3K5XDqdjiZANTc3p1KpRhcFMFHYawkAgHrMnDkzl8vt2rVLtMSUVywWwzCM9gWPWuLxeCqVaq5hnyZg2jJrCQCAelQqlXfffbdSqSxatMhm3kx5xWIxl8vlf6NcLtcejcViyWSyNmlKJBKNKhVgnImWAACo09atW7u7u9va2hYsWNDoWmBcFYvFfI3dNx1ramqqTmuKtr0HmKosiAMAoE6zZs3q7u6ONvNuavKLJdNIMplMJpNtbW3R20qlEmVM0cymQqFQKpVKpVJ/f79oCZjy/AYAAECdmpub0+l0Lpfr6emZM2dOo8uBhonH45lMJpPJRG+jpKlQKOTz+WQyOcSJXV1d8Xh8xowZFtABk5doCQCA+kWbeXd3d4uWoGpA0jSErq6uMAxbWlpES8DkJVoCAKB+M2bM6OzsLBaL/f39NvOGEalUKrNnzy4Wi0PMbOrp6env708mk6lUKpVKJZNJj6IDJhrREgAA9YvW8nR3d3d3d4uWYETi8fh+++03dJ/+/v5du3bVtkTbPEUxU/R16DV3AGNNtAQAwD6ZOXNmtJl3uVy2qAdG14wZM5LJZKFQKBaLhUKhUqkUi8VonmC1TywWGxA2pVIpfxmBcSNaAgBgn6TT6XQ6nUqlwjBsdC0w1bS0tNTOByyXy4VCIUqaorCpWCyGYRg11p4Yj8eTyeS8efOam5vHvWpgeon5DQAAAGDyqsZM1clNpVIpOnTggQcOtlwu6h9t4TSOxQJTkGgJAABgSgnDMMqbWltbB+vT1dW1ffv2mTNnzps3bzxrA6YeC+IAAACmlFgsttfpSIlEIp1OD7FcLgzDt99+O5lMNjU1RZuFV1/YyAmoZdYSAAAAAxWLxY0bN+7xUCwWaxrc+JYJNJ5oCQAAgD0olUrF36i+rm7ktEexWCyRSDQ1NaXT6blz545bqUADSZQBAADYg2gWUiaTqW0Mw7BcLheLxXK5HOVNtS/CMCyVSqVSKR6PDzFyZ2dnGIazZs2yiThMAaIlAAAAhqu6Gm6PR6NcqVwux2KxIQbp6ekplUozZswYrEM+n+/r64vH401NTYka+1o9MAZESwAAAIyOYW631N7eXigUksnkYB1yudz27dt3b69mTAMiJ/ETNJC9lgAAGDWVSqWnpyefz3/sYx9rdC3AJJbNZnt6esq/USqVKpXKMM9NJBJz5syZM2fOYB1KpZLtxmEU+esEAMCoCcNw27ZtYRjOnj3bFipA3TKZzB73eIpW29W+qAZP0U5PQRCUy+UhRi6VSu+++24QBIceeuhgffL5fLRdVCSRSAy9dRRMc6IlAABGTSKRmDVrVjKZNCMAGF1D7/EUieKnSqUyxLK4aPbT0FHRzp07d+3aNaAxvpsoctpdMpm0Lo8pIAzDMAwrlUr0tfqi+jX6G5dOpy2IAwAAYBqJPhIPkS51dXX19fVFM6Gij9AjGn/hwoWtra17PJTP53fs2JFMJjs6OgY7vVQqReXFYjGzpdh3fX19YRhmMpnBEs9sNtvV1TUgORr+EtSZM2f61yQAAACmkVgsNvQD7Nrb29vb26tvo4/Z0eK76IN39GIwQ+RBpVKpp6cnnU4PES199NFH2Wy2tqUaM8V+o/q6NoGKXs+cOXOwBCG6i2i+1RC3z6iL4sIhVlaWy+Xe3t7gN7PqonBnmG/L5XJLS8uCBQsGu3pnZ2ehUFi0aFFLS8seO1Qqlf7+/iHqH/ATWPtTl0gkmpubRUsAAAAwqGiZ26is800mk/vtt99Ih6omCMPp3NraOlhy1NPTs3Xr1tbW1oULFw52+qZNm0qlUvDbAVx1wL02dnR0DBbbZbPZXC7X3Nw8WMARBEF3d/cQtza0KFYb7GhfX1+hUMhkMul0eo8dKpVKZ2fngJbaCWvRZLfat7X5TjKZXLRo0WBX37JlS39//7x58warsFQqbd26dbDT92ron43m5uah49R0Or1gwYIBsVFtlrTXAkRLAAAAMB5SqdReH3GwePHi4LfjpAG729S+rh6qdh56RtJepywVi8UoWqpPe3v7YElEf39/V1fX7Nmzh4iW9iVeicfjQ0RLvb29u3bt6ujoGCxaCsNwX4KtoUXfkyFWVsbj8ejbUjsBrXaSWvVQ9MdX2606/mDmz58/dHmJRKKtrW2E9/RbREsAAAAwsdSmCaNl1qxZs2bNGrrP/PnzowSkdpJOdVLMHhtrDZFxpFKptra25ubmIa4+ROq0V0PHK+l0ulKpDJHrxWKxOXPm1LZUg5tqhwFva/+Mhr76ENPEIkNPepr4bOMNAAAAQJ3sNg8AAABAnURLAAAAANTJXksAAIyJQqGwY8eOIAjmzZvX6FoAgLFi1hIAAGNl165dPT09w3xgNgAwGYmWAAAYE6lUqrm5OQzD3t7eRtcCAIwV0RIAAGNlxowZQRD09PQ0uhAAYKyIlgAAGCtRtJTNZovFYqNrAQDGhGgJAICx0tTUlMlkgiCwJg4ApirREgAAYyiauCRaAoCpSrQEAMAYamtri8ViuVzOmjgAmJJESwAAjKFEIhGtibOZNwBMSaIlAADGVltbW2BNHABMUaIlAADGVrQmLp/PWxMHAFOPaAkAgLGVSCTS6XRg4hIATEWiJQAAxlz0nDjbLQHA1CNaAgBgzEXbLVkTBwBTj2gJAIAxV31OnDVxADDFiJYAABgPnhMHAFOSaAkAgPEQbbeUy+WsiQOAqUS0BADAeLAmDgCmJNESAADjxJo4AJh6REsAAIyTKFrK5XKlUqnRtQAAoyMWhmGjawAAYLrYtWtXOp1OpVKNLgQAGB2iJQAAAADqZEEcAAAAAHUSLQEAAABQJ9ESAAAAAHUSLQEAAABQJ9ESAAAAAHUSLQEAAABQJ9ESAAAAAHUSLQEA0ADbtm175513+vv7G10IALBPREsAADRApVIpl8t9fX2NLgQA2CexMAwbXQMAANNOoVAolUqZTCYWizW6FgCgfqIlAAAAAOpkQRwAAAAAdRItAQAAAFAn0RIAAAAAdRItAQAAAFAn0RIAAAAAdRItAQAAAFAn0RIAAI0XhmGjSwAA6tHU6AIAAJjW+vr6tm/f3tzcPG/evEbXAgCMmGgJAIBGisfj+Xy+VCqFYRiLxRpdDgAwMhbEAQDQSOl0Oh6Pl8vlXC7X6FoAgBETLQEA0EixWKy1tTUIgv7+/kbXAgCMmGgJAIAGi6Klvr6+RhcCAIyYaAkAgAZraWmJxWL5fL5YLDa6FgBgZERLAAA0WCKRSKfTgYlLADAJiZYAAGg82y0BwCQlWgIAoPGq0VKlUml0LQDACIiWAABovFQq1dTUFIZhNpttdC0AwAiIlgAAmBDa2toC2y0BwGQjWgIAYEJoaWkJREsAMNmIlgAAmBBaWlpisVipVCoUCo2uBQAYLtESAAATQiwWy2QygYlLADCpiJYAAJgoqs+Ja3QhAMBwiZYAAJgoou2WstlspVJpdC0AwLCIlgAAmChSqVQymQzDMJvNNroWAGBYREsAAEwgnhMHMBG8/vrr11xzzSc+8Ym2trbW1taPf/zjV1999euvvz6gW2wYBuvc2tq6dOnSr33tax999NHuBWSz2W9/+9snnnji7Nmzm5qaOjo6TjrppJUrV77yyiv13VFtMSMqe5iVVE+86KKLdr/6RRddtPvIw9Hb23vAAQfUceJ4ioVh2OgaAADg//T19W3evDmZTB544IGNrgVgmvrWt761cuXKcrk8oD2RSNx+++033nhjtWU4eUc1dhis87x585555pmDDjqo2rJ169bly5dv2LBh6AFHJLp6dO7wyx5+JdGYsVisubn5ww8/nD17dvXQzp07FyxYkM/no/4jqv+666679957o2enTtgAx6wlAAAmkEwmE4vFisVi9Gs0AOPsO9/5zs0331ypVC677LJnn322p6enr69v/fr1l19+eaVSuemmm7773e9WO4e/bYjG3U/ZunXrmjVrDj744C1btvzlX/5lbZ8bb7xxw4YNixYt+sEPfvDBBx/k8/mdO3c+88wzt99++5FHHrnv9zj8skdayfLly3O53IMPPljb+M///M+5XO7UU08daZ3PPPPM3XffXZvlTUxmLQEAMLHs3LkzlUpFGVOjawGYXj744IMlS5YUCoX777//kksuGXD0Bz/4waWXXppKpd5+++3FixfvfnrtzKBhHn366ac/+9nPfuxjH9uyZUu1saOjo6ur65lnnjnhhBP28Y6GU9sQh4ZfSTTIgw8+eOGFF37qU5964YUXqoc+9alPvfTSS//yL/9ywQUXDHah3RUKhWOOOaZYLL766quZTGb4J44/s5YAAJhYZs+e3dLSIlcCGH+rV68uFArnnXfe7rlSEASXXHLJueeeWygUVq9ePVpXPOqoo4Ig6O7urm2Mdtw79NBD93r6HjchGsWdiYZfSeScc85pb29/8cUXX3755ajlpZdeeumll9rb27/whS+M6NK33377a6+9ds8996TT6RGdOP5ESwAAAEAQBMHPfvazIAiuuOKKwTpEhx577LHRuuKLL74YBMGAOVDHHHNMEASXXXbZr371q9G6UH1GWklzc3O0jff3v//9qCV68cUvfrG5uXn4133ttde++c1vfvGLX6xjGd34syAOAAAACIIgaG9v37Fjx/bt29vb2/fYobOzc+7cuR0dHZ2dnbsfHdGCuM7OzqeeeuprX/vaxo0bV61adeutt1Z7PvXUU2eccUYulwuC4OCDDz766KOPOOKIZcuWnXLKKYlEYq9XHH7jXg/VUckrr7xy9NFHz5kzZ/PmzUEQLFiwYOfOna+88sqRRx459PenqlKpfPazn/3lL3/5xhtvzJ07d+gKJwLREgAAABAEQZBMJkulUrFYbGpq2mOHYrGYSqWampqKxeLuR4cTLe3uggsueOCBB5LJZG3jG2+8cfvtt69Zs6anp6fauHjx4r/7u78799xzh3k7w6xt6LKHWUntIMcdd9zzzz//4IMPhmF40UUXHXfccevXr9/rharuvPPO66+//r777rvsssuGU2HDiZYAAACAIBiXWUsDLF68+OGHH47Wne2uXC7/7//+74YNG9avX//II4+89dZbsVjsoYceOuuss4Z7S8OobTjBzV4rqR1k9erVV1999amnnhqG4dq1a1evXn3llVcO80Lvv//+0qVLjznmmCeeeKL6HRMtAQAAAJPA8ccf/9xzzz366KOnn376Hjs8+uijn/vc544//vhnn31296PDXxBXLBbffffdb3zjGz/60Y/mzp37P//zP/PmzRu6tkqlsnLlyjvuuGPA89eGaR+jpb1WUjtId3f3woULs9lsEASZTObDDz+cOXPmMC+0YsWKxx577OWXXz788MPrrnCc2cYbAAAACIIgOO2004Ig+N73vjdYh+hQ1G1fJJPJww477Ic//OHnPve5bdu2rVy5cq+nxOPxm266KQiCDRs27OPV99FeK5k1a9Z5550XhmEYhueff36UKw3TI488UigUPvnJT8ZqRIdG8cl3o0u0BAAAAARBEFx11VXJZPLf//3f//Ef/3H3oz/60Y9+/OMfp1Kpq666alQuF4vFvvvd7zY1NT3wwANvvvnmXvtHj2lra2sblavvi71WUt0mqfpiChMtAQAwEVUqla6urg8//LDRhQBMI7/zO7/zzW9+MwiCiy+++Mtf/vJzzz3X39+fzWaff/75K6+88ktf+lIQBHfcccf+++8/Wlc87LDDLr300lKpVDtxaenSpStXrvzpT3/6wQcf5PP5XC737rvv3n333dHGRmeeeWa15x4n8ozi7J7hVzLAsmXLollLJ5988oiuGO5J7aF9uZ0xYq8lAAAmojAM33nnnUqlsv/++6fT6UaXAzCNfOMb31i1alWlUhnQHo/Hb7vttltuuWWwE4e/11KtzZs3L1myJJfLrV+//tOf/nQw+LPkgiA4/PDD165dO3/+/CHGHH7jMA/VXcnwLzS0Cb7XkmgJAIAJaseOHfF4vK2tLZFINLoWgOllw4YNd9111+OPP/7rX/86DMPFixcvX778uuuuW7p06RBn1RctBUFw8803f+tb3zrttNN+9rOfBUHw2muvrVmz5sknn9ywYcPWrVvDMOzo6Fi6dOnZZ599+eWX11Jm0CwAAAsoSURBVP57w1hHS/tYyfAvNDTREgAAAABTk72WAAAAAKiTaAkAAACAOomWAAAAAKiTaAkAAACAOomWAAAAAKiTaAkAAACAOomWAAAAAKiTaAkAgAktDMOenp5t27Y1uhAAYA9ESwAATHRbt27duXNnPp9vdCEAU18sFou+DiYIgkqlcv/995988snz5s1LpVIHHnjgl770paeffro6wooVK/Y4+IoVK6IRqn76059+/vOfnzt3bjKZnD9//rnnnvvYY4+N8S0yykRLAABMaLFYLJ1OB0GQzWYbXQvAdBHW2P3tdddd9+Mf//hv/uZv3nrrrd7e3kcfffT444//8z//8+rpr7zyyssvvzxgzJdffvmVV16pbVm1atUtt9xy1VVXvfnmm7t27XrooYfK5fLpp58+9vfHaIpFPxYAADBh7dixo7Ozs7W1deHChY2uBWCKi8UGBgW7t7S1tb333nsdHR2DjfD3f//369at+7d/+7fa9vPPP3/58uXXXHNNNNqjjz564403PvPMM5lMprbbX/3VX61atWp0boZxYdYSAAATXfSpI5vN+mdRgIlg4cKFv/jFL4bocPnll7/wwgu//OUvqy1vvPHGiy++ePnll1db7rzzzlWrVg3IlYIgqOZK//AP/7BkyZJUKrVkyZLvfe971Q6xWOzBBx/8zGc+09bWlkgkosaHH374mGOOaW5uPvDAA7///e/v4w0yImYtAQAwCbz99tuVSmX//fePFscBMEaGM2vp8ccfv+iii5YsWbJs2bLDDz982bJlBxxwwID+999//5NPPvnDH/4warz44otPOeWUSy65pDra3LlzX3vttblz5+6xjIceeuj6669/4IEHjjvuuOeee+7iiy++++67/+iP/iga/7DDDrvnnntOOOGElpaWIAiefvrpz3/+83ffffeKFSveeOONCy644K677jrzzDNH8/vC4ERLAABMAps3b+7r6+vo6Ghvb290LQBT2XCipSAI+vv7161b9+yzz27YsOG//uu/Pv3pTz/wwAPz58+v9i+Xy0ceeeRPfvKTAw88cOPGjStWrHj11VcTiUR1tGQymc1mm5qa9ljGSSed9PWvf/3ss8+O3j700EN/+7d/+/Of/zwa/8knnzz55JOrnU8//fQrr7zyvPPOi94+++yz11577XPPPTc63xH2RrQEAMAksHPnzm3btrW0tCxatKjRtQBMZcOMlmrlcrmvfOUrW7ZsWbNmTW3/Bx988Oc///ndd9999dVXL1u27IILLqg9Onfu3Ndff32//fbb45jt7e1vv/32nDlzorc7duw45JBDurq6ohGy2WztJNa5c+d2dnbWnp5IJEql0sjvnnrYawkAgEkgWvJguyWACSidTt9xxx1r164d0P6nf/qn69evf+GFF55//vk/+ZM/GXD0M5/5zJNPPln3FWvf9vb29vT01D7GTq40nkRLAABMAqlUKpFIhGGYzWYbXQvAdHf99deXy+Xals2bN8+YMWNAt3g8fsstt5xxxhm33HJLPD4wf7j22mtvu+223f+rfttttwVBcPjhh9cGT0888cQnP/nJweo59thjX3jhhTpuhFEhWgIAYHKoTlxqdCEA092dd9553HHHrVmzpru7e9euXWvXrr3wwguvu+663Xuec84527dv/8IXvrD7oT/4gz/4wz/8w5NPPvknP/lJd3d3Lpf77//+77PPPjt6QtwNN9xw/fXXr1u3rre3d926dV/5ylduuummweq59dZbb7jhhieffLK3t7evr+/xxx9fsWLFKN4vQ7PXEgAAk8OuXbu2bNmSTqf333//RtcCMGUNZ6+lX/ziF/fdd9/atWt//etfZzKZI4444oorrrjkkksG6z/EaP/5n/955513rl+/vru7u6Oj46STTrrmmmtOPfXUIAhWr1797W9/+7333jvggANuuummK664Yojxn3jiiVtvvXX9+vWVSuWEE05YuXJlNAjjQLQEAMDkUCwWN27cGIvFDj744N0XVgAADeF/yQAATA7JZDKZTNpuCQAmFNESAACTRrTdUn9/f6MLAQD+j2gJAIBJI5PJBHbyBoCJRLQEAMCkEUVL+Xx+wEOvAYBGES0BADBpNDU1pVKpwMQlAJgwREsAAEwm0XZLoiUAmCBESwAATCbRmjg7eQPABCFaAgBgMslkMvF4vKmpKQzDRtcCMMW99957H3zwQfS6t7d348aN0et8Pr99+/Zqt+7u7gGTSWs7b9++/f333x8wcnWEfD6/adOmTZs29fT0jMk9MPZi/pcMAMDkEoZhLBZrdBUAU9zDDz/86quvdnV1HXTQQeedd95Xv/rVo446qrm5+Y//+I//+q//etu2bWvWrAmCoKen55RTTvmLv/iL8847Lzrxww8/rHY+8cQT77333kMPPXTWrFnXXntt1OGtt96qjrBu3brvfOc7xx577PLly3/v936vYXfLPhAtAQAAAHu2a9euq6+++sQTT1y6dOnv//7vn3POOf/xH/8RBMHZZ58dRUurVq1qb29fvHhxNVq66667qp0/8YlPXHjhhUccccRpp5322GOP1Y4cjbBu3bp//dd/Peuss84444x43MqqSckfGwAAALAHYRjeeOONX//617dt2zZ37tzdO6xbt+7jH//4fvvtFwTBO++88/zzz2ez2drOJ5988j333HPffff96le/qnaoHeGwww47//zzN2/e/NWvfnUc7oix0NToAgAAAICJ6IYbbjj//POPPvro9evXb968+YgjjhiwHnnt2rVdXV1vvvlmIpGYNWvWli1bDjnkkEWLFlU7n3nmmYcddlgulzv22GM3b968cePGQw45JHogQ2ThwoULFy4MguCss84a79tjlFgQBwAAAAx077333nPPPSeddNKhhx76Z3/2Z1ddddWCBQuOOuqos88+e9WqVY888siXv/zlm2++OQiCf/qnf0qn09UFcV1dXdXOy5Ytu++++zZv3nz55ZcvW7as2qE6wu/+7u8+9dRTmzdvPuWUUy699NKG3S37QLQEAAAA7EUYhrlcrnbC0TA79/T0tLa2DrGPUnd3d0tLSzKZHLVaGV+iJQAAAADqZBtvAAAAAOokWgIAYLIql8ulUqnRVQDAtCZaAgBgUurq6nrnnXe6uroaXQgATGuiJQAAJqVUKhUEgVlLANBYtvEGAGBSCsOwUqkkEolGFwIA05poCQAAAIA6WRAHAAAAQJ1ESwAAAADUSbQEAAAAQJ1ESwAAAADUSbQEAAAAQJ1ESwAAAADUSbQEAAAAQJ1ESwAATG5bt2595513stlsowsBgOlItAQAwORWLpfL5bJoCQAaQrQEAMDklslkgiAQLQFAQ4iWAACY3KJoKZfLhWHY6FoAYNoRLQEAMLk1NzfH4/FKpZLP5xtdCwBMO6IlAAAmPWviAKBRREsAAEx6oiUAaBTREgAAk146nQ6CIJfLNboQAJh2REsAAEx66XQ6FouVy+VCodDoWgBgehEtAQAw6cVisWjikjVxADDOREsAAEwFtlsCgIYQLQEAMBWIlgCgIURLAABMBdF2S6VSqVQqNboWAJhGREsAAEwF8Xi8ubk5MHEJAMaXaAkAgCnCmjgAGH+iJQAApggPiQOA8SdaAgBgiohmLRUKhXK53OhaAGC6EC0BADBFJBKJVCoVmLgEAONItAQAwNRhuyUAGGeiJQAApo4oWsrlco0uBACmi6ZGFwAAAKMmk8nMmDEjCpgAgHEQC8Ow0TUAAAAAMClZEAcAAABAnURLAAAAANRJtAQAAABAnURLAAAAANRJtAQAAABAnf4fsET7pqelch8AAAAASUVORK5CYII=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQcm9kdWN0TmFtZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIiBDb25maWdMZXZlbD0iMjAwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiwgc2hvd24gaW4gdGhlIHdlYiBpbnRlcmZhY2UsIHRhYnMgYW5kIHRpdGxlIGJhciBvZiB0aGUgd2ViIGJyb3dzZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+T1RSUzo6SVRTTSA1czwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlZpZXdNb2RlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRldGVybWluZXMgdGhlIHdheSB0aGUgbGlua2VkIG9iamVjdHMgYXJlIGRpc3BsYXllZCBpbiBlYWNoIHpvb20gbWFzay48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJDb21wbGV4Ij4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2ltcGxlIiBUcmFuc2xhdGFibGU9IjEiPlNpbXBsZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29tcGxleCIgVHJhbnNsYXRhYmxlPSIxIj5Db21wbGV4PC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQYWNrYWdlOjpSZXBvc2l0b3J5TGlzdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIiBDb25maWdMZXZlbD0iMjAwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBsaXN0IG9mIG9ubGluZSByZXBvc2l0b3JpZXMuIEFub3RoZXIgaW5zdGFsbGF0aW9ucyBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3Rycy9wdWJsaWMucGw/QWN0aW9uPVB1YmxpY1JlcG9zaXRvcnk7RmlsZT0iIGFuZCBDb250ZW50PSJTb21lIE5hbWUiLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlBhY2thZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaHR0cDovL2Z0cC5vdHJzLm9yZy9wdWIvb3Rycy9pdHNtL3BhY2thZ2VzNS8iPk9UUlM6OklUU00gNSBNYXN0ZXI8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+Cg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5JVFNNQ0lQQWxsb2NhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+YWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFuYWdlIHByaW9yaXR5IG1hdHJpeC48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+Q3JpdGljYWxpdHkgJmx0Oy0mZ3Q7IEltcGFjdCAmbHQ7LSZndDsgUHJpb3JpdHk8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+QWRtaW48L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTW9kdWxlPgogICAgICAgICAgICAgICAgICAgIDxNb2R1bGU+S2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5hdkJhcjo6TW9kdWxlQWRtaW48L01vZHVsZT4KICAgICAgICAgICAgICAgICAgICA8TmFtZSBUcmFuc2xhdGFibGU9IjEiPkNyaXRpY2FsaXR5ICZsdDstJmd0OyBJbXBhY3QgJmx0Oy0mZ3Q7IFByaW9yaXR5PC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz5TeXN0ZW08L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjQzMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyTW9kdWxlPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPklUU00uVGFibGUuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNOjpDb3JlOjpJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvICdEZXBlbmRzT24nLCBhbmQgdGhlIERpcmVjdGlvbiBpcyAnU291cmNlJywgb25seSAnRGVwZW5kcyBvbicgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayAnUmVxdWlyZWQgZm9yJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gJ0luY2x1ZGVzJyB3aXRoIHRoZSBkaXJlY3Rpb24gJ1RhcmdldCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSAnU291cmNlJywgJ1RhcmdldCcsIG9yICdCb3RoJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIFNDUklQVCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyE8L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXBlbmRzT24iIFRyYW5zbGF0YWJsZT0iMSI+Qm90aDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlR5cGUjIyNBbHRlcm5hdGl2ZVRvIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgJ0FsdGVybmF0aXZlVG8nLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkFsdGVybmF0aXZlIHRvPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXROYW1lIiBUcmFuc2xhdGFibGU9IjEiPkFsdGVybmF0aXZlIHRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6VHlwZSMjI0Nvbm5lY3RlZFRvIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgJ0Nvbm5lY3RlZFRvJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5Db25uZWN0ZWQgdG88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+Q29ubmVjdGVkIHRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6VHlwZSMjI0RlcGVuZHNPbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlICdEZXBlbmRzT24nLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkRlcGVuZHMgb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgZm9yPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6VHlwZSMjI0luY2x1ZGVzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgJ0luY2x1ZGVzJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5JbmNsdWRlczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0TmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5QYXJ0IG9mPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6VHlwZSMjI1JlbGV2YW50VG8iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSAnUmVsZXZhbnRUbycuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZU5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+UmVsZXZhbnQgdG88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+UmVsZXZhbnQgdG88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjAwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgJ0lUU01Db25maWdJdGVtJyBvYmplY3RzIHVzaW5nIHRoZSAnQWx0ZXJuYXRpdmVUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5BbHRlcm5hdGl2ZVRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIwMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0cyB1c2luZyB0aGUgJ0Nvbm5lY3RlZFRvJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPkNvbm5lY3RlZFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIwMiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0cyB1c2luZyB0aGUgJ0RlcGVuZHNPbicgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5EZXBlbmRzT248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjAzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgJ0lUU01Db25maWdJdGVtJyBvYmplY3RzIHVzaW5nIHRoZSAnSW5jbHVkZXMnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+SW5jbHVkZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjA0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgJ0lUU01Db25maWdJdGVtJyBvYmplY3RzIHVzaW5nIHRoZSAnUmVsZXZhbnRUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIyMCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdUaWNrZXQnIG9iamVjdHMgdXNpbmcgdGhlICdBbHRlcm5hdGl2ZVRvJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5BbHRlcm5hdGl2ZVRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIyMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdUaWNrZXQnIG9iamVjdHMgdXNpbmcgdGhlICdEZXBlbmRzT24nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPkRlcGVuZHNPbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMjIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnVGlja2V0JyBvYmplY3RzIHVzaW5nIHRoZSAnUmVsZXZhbnRUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+UmVsZXZhbnRUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyNDAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnU2VydmljZScgb2JqZWN0cyB1c2luZyB0aGUgJ0FsdGVybmF0aXZlVG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5BbHRlcm5hdGl2ZVRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI0MSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdTZXJ2aWNlJyBvYmplY3RzIHVzaW5nIHRoZSAnRGVwZW5kc09uJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+RGVwZW5kc09uPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI0MiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdTZXJ2aWNlJyBvYmplY3RzIHVzaW5nIHRoZSAnUmVsZXZhbnRUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPlJlbGV2YW50VG88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjYwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ05vcm1hbCcgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+Tm9ybWFsPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI2MSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdGQVEnIG9iamVjdHMgdXNpbmcgdGhlICdQYXJlbnRDaGlsZCcgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+UGFyZW50Q2hpbGQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjYyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ1JlbGV2YW50VG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPlJlbGV2YW50VG88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjgwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnU2VydmljZScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnRkFRJyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyODEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdTZXJ2aWNlJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdGQVEnIG9iamVjdHMgdXNpbmcgdGhlICdQYXJlbnRDaGlsZCcgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5QYXJlbnRDaGlsZDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyODIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdTZXJ2aWNlJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdGQVEnIG9iamVjdHMgdXNpbmcgdGhlICdSZWxldmFudFRvJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPlJlbGV2YW50VG88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzQwMCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Xb3JrT3JkZXInIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1NlcnZpY2UnIG9iamVjdHMgdXNpbmcgdGhlICdOb3JtYWwnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Xb3JrT3JkZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzM0MDEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNV29ya09yZGVyJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdTZXJ2aWNlJyBvYmplY3RzIHVzaW5nIHRoZSAnRGVwZW5kc09uJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNV29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5EZXBlbmRzT248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzNDEwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTVdvcmtPcmRlcicgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdHMgdXNpbmcgdGhlICdOb3JtYWwnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Xb3JrT3JkZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Ob3JtYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzNDExIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTVdvcmtPcmRlcicgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdHMgdXNpbmcgdGhlICdEZXBlbmRzT24nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Xb3JrT3JkZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5EZXBlbmRzT248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzNDEyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTVdvcmtPcmRlcicgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnVGlja2V0JyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNV29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzM0MjAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ2hhbmdlJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdUaWNrZXQnIG9iamVjdHMgdXNpbmcgdGhlICdOb3JtYWwnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01DaGFuZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+Tm9ybWFsPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTTo6RnJvbnRlbmQ6OlRleHRBcmVhIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPldpZHRoIG9mIElUU00gdGV4dGFyZWFzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDN9JCI+Nzg8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjSW5jaWRlbnRTdGF0ZXMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkdlbmVyYWxDYXRhbG9nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+R2VuZXJhbENhdGFsb2c6OlByZWZlcmVuY2VzPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXM6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj5JVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCIgVHJhbnNsYXRhYmxlPSIxIj5JbmNpZGVudCBTdGF0ZSBUeXBlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjIiBUcmFuc2xhdGFibGU9IjEiPkluY2lkZW50IFN0YXRlIFR5cGUuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYXRhIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJ3YXJuaW5nIiBUcmFuc2xhdGFibGU9IjEiPldhcm5pbmc8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ib3BlcmF0aW9uYWwiIFRyYW5zbGF0YWJsZT0iMSI+T3BlcmF0aW9uYWw8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaW5jaWRlbnQiIFRyYW5zbGF0YWJsZT0iMSI+SW5jaWRlbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmVmS2V5Ij5GdW5jdGlvbmFsaXR5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+T3B0aW9uPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTG9hZGVyOjpBZ2VudDo6Q29tbW9uQ1NTIyMjMTAwLUlUU00iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpXZWI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkRlZmF1bHQuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5BZ2VudC5TZWFyY2guY3NzPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxvYWRlcjo6QWdlbnQ6OkNvbW1vbkpTIyMjMTAwLUlUU00iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBKUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OldlYjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuQ3VzdG9tZXJTZWFyY2guanM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkluY2lkZW50U3RhdGUuanM8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPgo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU2VydmljZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5pdHNtLXNlcnZpY2U8L0dyb3VwPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1zZXJ2aWNlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBTZXJ2aWNlIE92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5TZXJ2aWNlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+U2VydmljZTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNlcnZpY2UtQXJlYTwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+U2VydmljZXM8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+TWVudTwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+SXRlbUFyZWE8L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudElUU01TZXJ2aWNlPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+U2VydmljZTwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+PC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+MzEwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TZXJ2aWNlIE92ZXJ2aWV3PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5TZXJ2aWNlPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudElUU01TZXJ2aWNlPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPlNlcnZpY2U8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjEwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01TTEEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tc2VydmljZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPklUU00gU0xBIE92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5TZXJ2aWNlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+U0xBPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U0xBIE92ZXJ2aWV3PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5TTEE8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50SVRTTVNMQTwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5TZXJ2aWNlPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4yMDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU2VydmljZVpvb20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1zZXJ2aWNlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2VydmljZSBab29tLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5ab29tPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPlNlcnZpY2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+Q29yZS5BbGxvY2F0aW9uTGlzdC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5Db3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PkNvcmUuVUkuVGFibGUuU29ydC5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5Db3JlLkFnZW50LlRhYmxlRmlsdGVycy5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5Db3JlLkFnZW50LkxpbmtPYmplY3QuanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU2VydmljZVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLXNlcnZpY2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TZXJ2aWNlIFByaW50LjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5QcmludDwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5TZXJ2aWNlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01TTEFab29tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1zZXJ2aWNlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U0xBIFpvb20uPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPlpvb208L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+U2VydmljZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU0xBUHJpbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1zZXJ2aWNlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U0xBIFByaW50LjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5QcmludDwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5TZXJ2aWNlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01TZXJ2aWNlOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAwMC1CYWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNU2VydmljZTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNU2VydmljZU1lbnU6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVNlcnZpY2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMTAwLVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTVNlcnZpY2U6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNlcnZpY2VNZW51OjpHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5QcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+UHJpbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNU2VydmljZVByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNU2VydmljZVByaW50O1NlcnZpY2VJRD1bJSBEYXRhLlNlcnZpY2VJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNU2VydmljZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMyMDAtTGluayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01TZXJ2aWNlOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01TZXJ2aWNlTWVudTo6TGluazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+TGluazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+TGluazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRMaW5rT2JqZWN0O1NvdXJjZU9iamVjdD1TZXJ2aWNlO1NvdXJjZUtleT1bJSBEYXRhLlNlcnZpY2VJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNU0xBOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAwMC1CYWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01TTEE6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNMQU1lbnU6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01TTEE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNU0xBOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzEwMC1QcmludCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTVNMQTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNU0xBTWVudTo6R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+UHJpbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPlByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTVNMQVByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNU0xBUHJpbnQ7U0xBSUQ9WyUgRGF0YS5TTEFJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpDb21wbGV4VGFibGU6OlNldHRpbmdzVmlzaWJpbGl0eSMjI1NlcnZpY2UiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5BZ2VudElUU01TZXJ2aWNlWm9vbTwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpDb21wbGV4VGFibGUjIyNTZXJ2aWNlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3Q6OlNlcnZpY2UucG08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlZmF1bHRDb2x1bW5zIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb21tZW50Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JpdGljYWxpdHkiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VySW5jaVN0YXRlIj4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb21tZW50Ij4xMTA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+MTIwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyaXRpY2FsaXR5Ij4xMzA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VySW5jaVN0YXRlIj4xNDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlVGltZSI+MTUwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpbWUiPjE2MDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+Cg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaWNrZXQ6OlNlcnZpY2UiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWxsb3dzIGRlZmluaW5nIHNlcnZpY2VzIGFuZCBTTEFzIGZvciB0aWNrZXRzIChlLiBnLiBlbWFpbCwgZGVza3RvcCwgbmV0d29yaywgLi4uKSwgYW5kIGVzY2FsYXRpb24gYXR0cmlidXRlcyBmb3IgU0xBcyAoaWYgdGlja2V0IHNlcnZpY2UvU0xBIGZlYXR1cmUgaXMgZW5hYmxlZCkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGlja2V0PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6VGlja2V0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KPC9vdHJzX2NvbmZpZz4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6YmdfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICfQkNC70YLQtdGA0L3QsNGC0LjQstC10L0g0L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICfQlNC+0YHRgtGK0L/QvdC+0YHRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ9Ce0YHQvdC+0LLQvdCwINGB0LjRgdGC0LXQvNCwL0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAn0KHQstGK0YDQt9Cw0L0g0YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAn0JTQtdC80L7QvdGB0YLRgNCw0YbQuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICfQl9Cw0LLQuNGB0Lgg0L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAn0KPRgdC70YPQs9C4INC30LAg0LrRgNCw0LnQvdC4INC/0L7RgtGA0LXQsdC40YLQtdC70LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAn0JPRgNC10YjQutC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ9Ca0LvQuNC10L3RgtGB0LrQsCDRgdC40YHRgtC10LzQsC9Gcm9udGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAn0KPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDQmNCiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAn0JjQoiDQntC/0LXRgNCw0YbQuNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ9CS0LvQuNGP0L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAn0JLQutC70Y7Rh9C10L3QuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ9CU0YDRg9Cz0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ9Cn0LDRgdGCINC+0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ9Cf0YDQvtC10LrRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAn0JLRgNC10LzQtSDQt9CwINCy0YrQt9GB0YLQsNC90L7QstGP0LLQsNC90LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICfQodGK0L7RgtCy0LXRgtC10L0g0YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn0J7RgtGH0LXRgtC90L7RgdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ9Cd0LXQvtCx0YXQvtC00LjQvCDQt9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ9CS0YDQtdC80LUg0LfQsCDRgNCw0LfRgNC10YjQsNCy0LDQvdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICfQktGA0LXQvNC1INC30LAg0L7RgtCz0L7QstC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAn0J7QsdGD0YfQtdC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICfQodC00LXQu9C60Lgv0YLRgNCw0L3Qt9Cw0LrRhtC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAn0J7RgdC90L7QstC10L0g0LTQvtCz0L7QstC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ9C+0L/RgNC10LTQtdC70LXQvSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAn0JrRgNC40YLQuNGH0L3QvtGB0YI8LT7QktC70LjRj9C90LjQtTwtPtCf0YDQuNC+0YLQuNGC0LXRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICfQnNC40L3QuNC80LDQu9C90L4g0LLRgNC10LzQtSDQvNC10LbQtNGDINC40L3RhtC40LTQtdC90YLQuNGC0LUnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICfQmtGA0LjRgtC40YfQvdC+0YHRgic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ9Cf0L7RgdC70LXQtNC90LAg0L/RgNC+0LzRj9C90LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn0J/QvtGB0LvQtdC00L3QviDQv9GA0L7QvNC10L3QtdC9INC+0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICfQodCy0YrRgNC30LDQvdC4IFNMQSDQtNC+0LPQvtCy0L7RgNC4JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBsaW5rIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6Y3NfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2bsOtIGsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnRG9zdHVwbm9zdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ1rDoWtsYWRuw60gcm96aHJhbsOtL0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnU3BvamVuIHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ1NvdcSNYXNuw70gU3Rhdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnVWvDoXprYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnWsOhdmlzw60gbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NsdcW+Ynkga29uY292w71tIHXFvml2YXRlbMWvbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdDaHlieSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdaw6FrYXpuaWNrw6kgcm96aHJhbsOtL0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICfFmMOtemVuw60gSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVCBPcGVyYWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ1ZsaXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdTdGF2IEluY2lkZW50dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ1phaHJudWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnRGFsxaHDrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnxIzDoXN0IHonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2pla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ8SMYXMgb2Jub3Z5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnRuw60gayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSZXBvcnRpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUG/FvmFkb3ZhbsO9IHBybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICfEjGFzIMWZZcWhZW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICfEjGFzIG9kcG92xJtkaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEEgUMWZZWhsZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1DFmWVobGVkIFNsdcW+YnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnUHJvc3RvciDDmmRyxb5ieSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ8Wga29sZW7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2FrY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnWsOha2xhZG7DrSBzbWxvdXZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICdwxZlpZMSbbGl0JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLcml0acSNbm9zdDwtPlZsaXY8LT5Qcmlvcml0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBbG9rYWNlIHByaW9yaXQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNaW5pbcOhbG7DrSDEjWFzIG1lemkgaW5jaWRlbnR5JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnS3JpdGnEjW5vc3QnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQSBJbmZvcm1hY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnTmFwb3NsZWR5IHptxJtuxJtuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ05hcG9zbGVkeSB6bcSbbmlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdQxZlpxZlhemVuw6kgU2x1xb5ieSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdQxZlpxZlhemVuw6kgU0xBIHNtbG91dnknOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ1NvdcSNYXNuw70gU3RhdiBJbmNpZGVudHUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ0luY2lkZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3BlcmHEjW7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGFfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2IHRpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdUaWxnw6ZuZ2VsaWdoZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0ZvcmJ1bmRldCB0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ051dsOmcmVuZGUgdGlsc3RhbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9uc3RyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0FmaMOmbmdlciBhZic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnS3VuZGVzZXJ2aWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0ZlamwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lUIE1hbmFnZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVCBvcGVyYXRpb25lbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdQw6V2aXJrbmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0luY2lkZW50IHRpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnSW5ka2x1ZGVyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0FuZHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdEZWwgYWYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2pla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ0dlbmV0YWJsZXJpbmdzdGlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnQgZm9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JlcG9ydGVyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ0tyw6Z2ZXMgZm9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ0zDuHNuaW5nc3JhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1JlYWt0aW9uc3RpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEEgb3ZlcnNpZ3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1NlcnZpY2Ugb3ZlcnNpZ3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnU2VydmljZSBvbXLDpWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnVHLDpm5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha3Rpb25lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdVbmRlcmxpZ2dlbmRlIGtvbnRyYWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ0tyaXRpa2FsaXRldCA8LT4gUMOldmlya25pbmcgPC0+IFByaW9yaXRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNaW5pbXVtc3RpZCBtZWxsZW0gSW5jaWRlbnRzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnS3JpdGlrYWxpdGV0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnU2lkc3Qgw6ZuZHJldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdTaWRzdCDDpm5kcmV0IGFmJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdUaWxrbnl0dGVkZSBzZXJ2aWNlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdUaWxrbnl0dGVkZSBTTEFzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdOdXbDpnJlbmRlIEluY2lkZW50IHRpbHN0YW5kJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBsaW5rIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhdGlvbmVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGVfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2IHp1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ1ZlcmbDvGdiYXJrZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFja2VuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdWZXJidW5kZW4gbWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICdBa3R1ZWxsZXIgU3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vbnN0cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdIw6RuZ3QgYWIgdm9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdBbndlbmRlci1TZXJ2aWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0ZlaGxlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdGcm9udGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVQgTWFuYWdlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lUIEJldHJpZWInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnQXVzd2lya3VuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1ZvcmZhbGxzc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnQmVpbmhhbHRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ1NvbnN0aWdlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnVGVpbCB2b24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2pla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1dpZWRlcmhlcnN0ZWxsdW5nc3plaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdSZWxldmFudCBmw7xyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JlcG9ydGluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdCZW7DtnRpZ3QgZsO8cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdMw7ZzdW5nc3plaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1JlYWt0aW9uc3plaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xBLcOcYmVyc2ljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ0RpZW5zdMO8YmVyc2ljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnU2VydmljZS1CZXJlaWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnVHJhaW5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha3Rpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdVbmRlcnBpbm5pbmcgQ29udHJhY3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ3p1b3JkbmVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLcml0aWthbGl0w6R0IDwtPiBBdXN3aXJrdW5nIDwtPiBQcmlvcml0w6R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICdWZXJ3YWx0dW5nIGRlciBQcmlvcml0w6R0IGF1cyBkZXIgS29tYmluYXRpb24gdm9uIEtyaXRpa2FsaXTDpHQgPC0+IEltcGFjdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1ByaW9yaXTDpHQgenVvcmRuZW4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNaW5kZXN0emVpdCB6d2lzY2hlbiBJbmNpZGVudHMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0aWthbGl0w6R0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEEtSW5mb3JtYXRpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdadWxldHp0IGdlw6RuZGVydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdadWxldHp0IGdlw6RuZGVydCB2b24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1p1Z2Vow7ZyaWdlIFNlcnZpY2VzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ1NlcnZpY2UtSW5mb3JtYXRpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnQWt0dWVsbGVyIFZvcmZhbGxzdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnWnVnZWjDtnJpZ2UgU0xBcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnQWt0dWVsbGVyIFZvcmZhbGxzc3RhdHVzJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJ0JlaWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kbW9kdWwtUmVnaXN0cmF0aW9uIGRlciBBZG1pbklUU01DSVBBbGxvY2F0ZSBLb25maWd1cmF0aW9uIGltIEFkbWluLUJlcmVpY2guJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU0xBLU9iamVrdHMgaW0gQWdlbnQtSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU0xBUHJpbnQtT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmRtb2R1bC1SZWdpc3RyYXRpb24gZGVzIEFnZW50SVRTTVNMQVpvb20tT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmRtb2R1bC1SZWdpc3RyYXRpb24gZGVzIEFnZW50SVRTTVNlcnZpY2UtT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU2VydmljZVByaW50LU9iamVrdHMgaW0gQWdlbnQtSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU2VydmljZVpvb20tT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJ0lUU00gU0xBLcOcYmVyc2ljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdJVFNNLURpZW5zdMO8YmVyc2ljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnVm9yZmFsbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnUHJpb3JpdMOkdHMtTWF0cml4IHZlcndhbHRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ8OcYmVyIGRpZXNlcyBNb2R1bCB3aXJkIGRlciBadXLDvGNrLUxpbmsgaW4gZGVyIExpbmtsZWlzdGUgZGVyIFNlcnZpY2UtQW5zaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICfDnGJlciBkaWVzZXMgTW9kdWwgd2lyZCBkZXIgWnVyw7xjay1MaW5rIGluIGRlciBMaW5rbGVpc3RlIGRlciBTTEEtQW5zaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ8OcYmVyIGRpZXNlcyBNb2R1bCB3aXJkIGRlciBEcnVja2VuLUxpbmsgaW4gZGVyIExpbmtsZWlzdGUgZGVyIFNlcnZpY2UtQW5zaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnw5xiZXIgZGllc2VzIE1vZHVsIHdpcmQgZGVyIERydWNrZW4tTGluayBpbiBkZXIgTGlua2xlaXN0ZSBkZXIgU0xBLUFuc2ljaHQgYW5nZXplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfDnGJlciBkaWVzZXMgTW9kdWwgd2lyZCBkZXIgTGluay1MaW5rIGluIGRlciBMaW5rbGVpc3RlIGRlciBTZXJ2aWNlLUFuc2ljaHQgYW5nZXplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhdGl2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXJhbWV0ZXIgZnVlciBkZW4gVm9yZmFsbHNzdGF0dXMgaW4gZGVyIEFuc2ljaHQgZnVlciBkaWUgRWluc3RlbGx1bmdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ1NMQS1EcnVjay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnU2V0emVuIGRlcyBUeXBzIHVuZCBkZXIgUmljaHR1bmcgZGVyIHZlcndlbmRldGVuIExpbmtzLCB1bSBkZW4gSW5jaWRlbnQtU3RhdHVzIHp1IGJlcmVjaG5lbi4gRGVyIFNjaGzDvHNzZWwgaXN0IGRlciBOYW1lIGRlcyBMaW5rLVR5cHMgKHdpZSBpbiBMaW5rT2JqZWN0OjpUeXBlIGRlZmluaWVydCksIHVuZCBkZXIgV2VydCBpc3QgZGllIFJpY2h0dW5nIGRlcyBJbmNpZGVudExpbmtUeXBlLCBkaWUgYmVmb2xndCB3ZXJkZW4gc29sbCwgdW0gZGVuIEluY2lkZW50LVN0YXR1cyB6dSBiZXJlY2huZW4uIFp1bSBCZWlzcGllbCwgd2VubiBkZXIgSW5jaWRlbnRMaW5rVHlwZSBhdWYgXCdEZXBlbmRzT25cJyB1bmQgYWxzIFJpY2h0dW5nIFwnUXVlbGxlXCcgZ2VzZXR6dCBpc3QsIHdpcmQgbnVyIFwnRGVwZW5kc1wnIExpbmtzIGdlZm9sZ3QgKHVuZCBuaWNodCBkZW0gR2VnZW50ZWlsIFwnQmVuw7Z0aWd0IGbDvHJcJykgdW0gZGVuIEluY2lkZW50U3RhdGUgenUgYmVyZWNobmVuLiBTaWUga8O2bm5lbiBzb3ZpZWxlIExpbmstVHlwZW4gdW5kIFJpY2h0dW5nZW4gaGluenVmw7xnZW4gd2llIFNpZSBtw7ZjaHRlbiwgei5CLjogXCdFbnRow6RsdFwnIG1pdCBkZXIgUmljaHR1bmcgXCdUYXJnZXRcJy4gQWxsZSBpbiBkZXIgU3lzY29uZmlnIHVudGVyIExpbmtvYmplY3Q6OlR5cGUgZGVmaW5pZXJ0ZW4gVmVya27DvHBmdW5nc2FydGVuIHNpbmQgbcO2Z2xpY2ggc2luZCB1bmQgZGllIFJpY2h0dW5nIGthbm4gXCdRdWVsbGVcJywgXCdaaWVsXCcgb2RlciBcJ0JlaWRlXCcgc2Vpbi4gV0lDSFRJRzogTmFjaGRlbSBTaWUgw4RuZGVydW5nZW4gYW4gZGllc2VyIFN5c2NvbmZpZy1FaW5zdGVsbHVuZyBnZW1hY2h0IGhhYmVuLCBmw7xocmVuIFNpZSBkYXMgU2tyaXB0IGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIGF1cywgZGFtaXQgYWxsZSBJbmNpZGVudC1TdGF0dXMgYW5oYW5kIGRlciBuZXVlbiBFaW5zdGVsbHVuZ2VuIGJlcmVjaG5ldCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNoYW5nZVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdOb3JtYWxcJyBtaXQgXCdUaWNrZXRcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnTm9ybWFsXCcgbWl0IFwnRkFRXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnUGFyZW50Q2hpbGRcJyBtaXQgXCdGQVFcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1JlbGV2YW50VG9cJyBtaXQgXCdGQVFcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdBbHRlcm5hdGl2ZVRvXCcgbWl0IFwnU2VydmljZVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnRGVwZW5kc09uXCcgbWl0IFwnU2VydmljZVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1JlbGV2YW50VG9cJyBtaXQgXCdTZXJ2aWNlXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdBbHRlcm5hdGl2ZVRvXCcgbWl0IFwnVGlja2V0XCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0RlcGVuZHNPblwnIG1pdCBcJ1RpY2tldFwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnUmVsZXZhbnRUb1wnIG1pdCBcJ1RpY2tldFwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdBbHRlcm5hdGl2ZVRvXCcgbWl0IGFuZGVyZW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnQ29ubmVjdGVkVG9cJyBtaXQgYW5kZXJlbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnRGVwZW5kc09uXCcgbWl0IGFuZGVyZW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnSW5jbHVkZXNcJyBtaXQgYW5kZXJlbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1JlbGV2YW50VG9cJyBtaXQgYW5kZXJlbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNV29ya09yZGVyXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0RlcGVuZHNPblwnIG1pdCBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNV29ya09yZGVyXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ05vcm1hbFwnIG1pdCBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Xb3JrT3JkZXJcJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnRGVwZW5kc09uXCcgbWl0IFwnU2VydmljZVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNV29ya09yZGVyXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ05vcm1hbFwnIG1pdCBcJ1NlcnZpY2VcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNV29ya09yZGVyXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ05vcm1hbFwnIG1pdCBcJ1RpY2tldFwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ1NlcnZpY2VcJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnTm9ybWFsXCcgbWl0IFwnRkFRXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdTZXJ2aWNlXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1BhcmVudENoaWxkXCcgbWl0IFwnRkFRXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ1NlcnZpY2VcJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnUmVsZXZhbnRUb1wnIG1pdCBcJ0ZBUVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGVuIExpbmt0eXAgXCdBbHRlcm5hdGl2ZVRvXCcuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgZGVyIGdsZWljaGUgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIHVuZ2VyaWNodGV0ZXIgTGlua3R5cC4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSB2ZXJzY2hpZWRlbmVyIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiBnZXJpY2h0ZXRlciBMaW5rdHlwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRlbiBMaW5rdHlwIFwnQ29ubmVjdGVkVG9cJy4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSBkZXIgZ2xlaWNoZSBJbmhhbHQgYW5nZWdlYmVuLCBlbnRzdGVodCBlaW4gdW5nZXJpY2h0ZXRlciBMaW5rdHlwLiBXaXJkIGFscyBTb3VyY2VOYW1lIHVuZCBUYXJnZXROYW1lIHZlcnNjaGllZGVuZXIgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIGdlcmljaHRldGVyIExpbmt0eXAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRlbiBMaW5rdHlwIFwnRGVwZW5kc09uXCcuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgZGVyIGdsZWljaGUgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIHVuZ2VyaWNodGV0ZXIgTGlua3R5cC4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSB2ZXJzY2hpZWRlbmVyIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiBnZXJpY2h0ZXRlciBMaW5rdHlwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRlbiBMaW5rdHlwIFwnSW5jbHVkZXNcJy4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSBkZXIgZ2xlaWNoZSBJbmhhbHQgYW5nZWdlYmVuLCBlbnRzdGVodCBlaW4gdW5nZXJpY2h0ZXRlciBMaW5rdHlwLiBXaXJkIGFscyBTb3VyY2VOYW1lIHVuZCBUYXJnZXROYW1lIHZlcnNjaGllZGVuZXIgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIGdlcmljaHRldGVyIExpbmt0eXAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkZW4gTGlua3R5cCBcJ1JlbGV2YW50VG9cJy4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSBkZXIgZ2xlaWNoZSBJbmhhbHQgYW5nZWdlYmVuLCBlbnRzdGVodCBlaW4gdW5nZXJpY2h0ZXRlciBMaW5rdHlwLiBXaXJkIGFscyBTb3VyY2VOYW1lIHVuZCBUYXJnZXROYW1lIHZlcnNjaGllZGVuZXIgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIGdlcmljaHRldGVyIExpbmt0eXAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0FuemFobCBkZXIgWmVpY2hlbiBwcm8gWmVpbGUgaW4gSVRTTS1UZXh0QXJlYXMuJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZXNfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcmFudGl2YSBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rpc3BvbmliaWxpZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFja2VuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdDb25lY3RhZG8gYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAnRXN0YWRvIEFjdHVhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb3N0cmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnRGVwZW5kZSBlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnU2VydmljaW8gZGUgVXN1YXJpbyBGaW5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdFcnJvcmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdBZG1pbmlzdHJhY2nDs24gZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdPcGVyYWNpw7NuIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGFjdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGVsIEluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luY2x1eWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdPdHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdQYXJ0ZSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJveWVjdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1RpZW1wbyBkZSBSZWN1cGVyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnRlIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnSW5mb3JtZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUmVxdWVyaWRvIHBhcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnVGFzYSBkZSBSZXNvbHVjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVGllbXBvIGRlIFJlc3B1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdEZXNjcmlwY2nDs24gZGUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdEZXNjcmlwY2nDs24gZGUgU2VydmljaW9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ0FyZWEtU2VydmljaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhaW5pbmcnfSA9ICdFbnRyZW5hbWllbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWNjaW9uZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnQ29udHJhdG8gY29uIFRlcmNlcm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICdBc2lnbmFyJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdVcmdlbmNpYSA8LT4gSW1wYWN0byA8LT4gUHJpb3JpZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICdBZG1pbmlzdHJhciBsYSBwcmlvcmlkYWQgcmVzdWx0YW50ZSBhbCBjb21iaW5hciBVcmdlbmNpYSA8LT4gSW1wYWN0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0FzaWduYXIgcHJpb3JpZGFkJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnVGllbXBvIE3DrW5pbW8gZW50cmUgSW5jaWRlbnRlcyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ1VyZ2VuY2lhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2nDs24gZGVsIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW1vIGNhbWJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1vIGNhbWJpbyBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1NlcnZpY2lvcyBBc29jaWFkb3MnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNpw7NuIGRlbCBTZXJ2aWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnRXN0YWRvIGFjdHVhbCBkZWwgaW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQXMgQXNvY2lhZG9zJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGUgSW5jaWRlbnRlIEFjdHVhbCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGVsIG3Ds2R1bG8gZnJvbnRlbmQgcGFyYSBsYSBjb25maWd1cmFjacOzbiBkZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBlbiBlbCDDoXJlYSBkZSBhZG1pbmlzdHJhci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlbCBtw7NkdWxvIGZyb250ZW5kIHBhcmEgZWwgb2JqZXRvIEFnZW50SVRTTVNMQSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZWwgbcOzZHVsbyBmcm9udGVuZCBwYXJhIGVsIG9iamV0byBBZ2VudElUU01TTEFQcmludCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlbCBtw7NkdWxvIGZyb250ZW5kIHBhcmEgZWwgb2JqZXRvIEFnZW50SVRTTVNMQVpvb20gZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZWwgbcOzZHVsbyBmcm9udGVuZCBwYXJhIGVsIG9iamV0byBBZ2VudElUU01TZXJ2aWNlIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZWwgbcOzZHVsbyBmcm9udGVuZCBwYXJhIGVsIG9iamV0byBBZ2VudElUU01TZXJ2aWNlUHJpbnQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGVsIG3Ds2R1bG8gZnJvbnRlbmQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU2VydmljZVpvb20gZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ0FkbWluaXN0cmFyIGxhIG1hdHLDrXogZGUgcHJpb3JpZGFkZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RhciB1biB2w61uY3VsbyBwYXJhIHJlZ3Jlc2FyIGVuIGVsIG1lbsO6IGRlIHNlcnZpY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RhciB1biB2w61uY3VsbyBwYXJhIHJlZ3Jlc2FyIGVuIGVsIG1lbsO6IGRlIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RhciB1biB2w61uY3VsbyBwYXJhIGltcHJpbWlyIGVuIGVsIG1lbsO6IGRlIHNlcnZpY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0YXIgdW4gdsOtbmN1bG8gcGFyYSBpbXByaW1pciBlbiBlbCBtZW7DuiBkZSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBsaW5rIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0YXIgZWwgdsOtbmN1bG8gIlZpbmN1bGFyIiBlbiBlbCBtZW7DuiBkZSBzZXJ2aWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYWNpb25hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyw6FtZXRyb3MgcGFyYSBsb3MgZXN0YWRvcyBkZSBsb3MgaW5jaWRlbnRlcyBlbiBsYSB2aXN0YSBkZSBwcmVmZXJlbmNpYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnQ29uZmlndXJhciBlbCB0aXBvIHkgZGlyZWNjaW9uIGRlIGxvcyBlbmxhY2VzIHBhcmEgc2VyIHVzYWRvcyBwYXJhIGNhbGN1bG8gZGVsIGVzdGFkbyBkZWwgaW5jaWRlbnRlLiBMYSBjbGF2ZSBlcyBlbCBub21icmUgZGVsIGVubGFjZSAoY29tbyBlc3RhIGRlZmluaWRvIGVuIExpbmtPYmplY3Q6OlR5cGUpLCB5IGVsIHZhbG9yIGVzIGxhIGRpcmVjY2nDs24gZW4gZWwgSW5jaWRlbnRMaW5rVHlwZSBxdWUgZGViZSBzZWd1aXIgcGFyYSBjYWxjdWxhciBlbCBlc3RhZG8gZGVsIGluY2lkZW50ZS4gUG9yIGVqZW1wbG8gc2kgZWwgSW5jaWRlbnRMaW5rVHlwZSBlc3RhIGNvbmZpZ3VyYWRvIGVuIFwnRGVwZW5kZURlLCB5IGxhIGRpcmVjY2lvbiBlcyBcJ09yaWdlblwnLCBzb2xvIFwnRGVwZW5kZSBkZVwnIGVubGFjZXMgc2Vyw6Egc2VndWlkbyAoeSBubyBlbCBlbmxhY2Ugb3B1ZXN0byBcJ1JlcXVlcmlkbyBwYXJhXCcpIHBhcmEgY2FsY3VsYXIgZWwgZXN0YWRvIGRlbCBpbmNpZGVudGUuIFB1ZWRlIGHDsWFkaXIgbcOhcyB0aXBvcyBkZSBkaXJlY2Npb25lcyBkZSBhdmlzbyBjb21vIGRlc2VlLCBlam0uIFwnSW5jbHV5ZVwnIGNvbiBsYSBkaXJlY2Npb24gXCdPYmpldGl2b1wnLiBUb2RvcyBsb3MgdGlwb3MgZGVmaW5pZG9zIGVuIGVsIFN5c2NvbmZpZyBvcGNpb24gTGlua09iamVjdDo6VHlwZSBzb24gcG9zaWJsZSB5IGxhIGRpcmVjY2lvbiBwdWVkZSBzZXIgXCdPcmlnZW5cJywgXCdPYmpldGl2b1wnLCBvIFwnQW1ib3NcJy4KwqFJTVBPUlRBTlRFOiBERVNQVUVTIERFIFJFQUxJWkFSIENBTUJJT1MgRU4gTEEgT1BDSU9OIERFTCBTSVNDT05GSUcgRVMgTkVDRVNBUklPIENPUlJFUiBFTCBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgQVPDjSBUT0RPIExPUyBFU1RBRE9TIERFIExPUyBJTkNJREVOVEVTIFNFUsOBTiBSRUNBTENVTEFET1MgRU4gQkFTRSBBIExBIE5VRVZBIENPTkZJR1VSQUNJw5NOISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ2hhbmdlXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1RpY2tldFwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ1BhcmVudENoaWxkXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ0FsdGVybmF0aXZlVG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdTZXJ2aWNlXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnU2VydmljZVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1RpY2tldFwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnQWx0ZXJuYXRpdmVUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnVGlja2V0XCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdBbHRlcm5hdGl2ZVRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnVGlja2V0XCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG90cm9zIG9iamV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnQWx0ZXJuYXRpdmVUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb3Ryb3Mgb2JqZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdDb25uZWN0ZWRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG90cm9zIG9iamV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvdHJvcyBvYmpldG9zIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ0luY2x1ZGVzXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG90cm9zIG9iamV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB2w61uY3VsbyBcJ1JlbGV2YW50VG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNV29ya09yZGVyXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNV29ya09yZGVyXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Xb3JrT3JkZXJcJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnU2VydmljZVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNV29ya09yZGVyXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNV29ya09yZGVyXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1RpY2tldFwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ1NlcnZpY2VcJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdTZXJ2aWNlXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ1NlcnZpY2VcJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnQWx0ZXJuYXRpdmVUb1wnLiBTaSBlbCBTb3VyY2VOYW1lIHkgZWwgVGFyZ2V0TmFtZSBjb250aWVuZW4gZWwgbWlzbW8gdmFsb3IsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBubyBkaXJlY2Npb25hZG8uIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCByZXN1bHRhZG8gZXMgdW4gdsOtbmN1bG8gZGlyZWNjaW9uYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5lIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdDb25uZWN0ZWRUb1wnLiBTaSBlbCBTb3VyY2VOYW1lIHkgZWwgVGFyZ2V0TmFtZSBjb250aWVuZW4gZWwgbWlzbW8gdmFsb3IsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBubyBkaXJlY2Npb25hZG8uIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCByZXN1bHRhZG8gZXMgdW4gdsOtbmN1bG8gZGlyZWNjaW9uYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnRGVwZW5kc09uXCcuIFNpIGVsIFNvdXJjZU5hbWUgeSBlbCBUYXJnZXROYW1lIGNvbnRpZW5lbiBlbCBtaXNtbyB2YWxvciwgZWwgcmVzdWx0YWRvIGVzIHVuIHbDrW5jdWxvIG5vIGRpcmVjY2lvbmFkby4gU2kgbG9zIHZhbG9yZXMgc29uIGRpZmVyZW50ZXMsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBkaXJlY2Npb25hZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdEZWZpbmUgZWwgdGlwbyBkZSB2w61uY3VsbyBcJ0luY2x1ZGVzXCcuIFNpIGVsIFNvdXJjZU5hbWUgeSBlbCBUYXJnZXROYW1lIGNvbnRpZW5lbiBlbCBtaXNtbyB2YWxvciwgZWwgcmVzdWx0YWRvIGVzIHVuIHbDrW5jdWxvIG5vIGRpcmVjY2lvbmFkby4gU2kgbG9zIHZhbG9yZXMgc29uIGRpZmVyZW50ZXMsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBkaXJlY2Npb25hZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnUmVsZXZhbnRUb1wnLiBTaSBlbCBTb3VyY2VOYW1lIHkgZWwgVGFyZ2V0TmFtZSBjb250aWVuZW4gZWwgbWlzbW8gdmFsb3IsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBubyBkaXJlY2Npb25hZG8uIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCByZXN1bHRhZG8gZXMgdW4gdsOtbmN1bG8gZGlyZWNjaW9uYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdEZWZpbmUgZWwgYW5jaG8gZGUgbGFzIHRleHRhcmVhcyBkZWwgSVRTTS4nOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZmFfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICfYrNin24zar9iy24zZhtuMINio2LHYp9uMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ9mF24zYstin2YYg2K/YsSDYr9iz2KrYsdizINio2YjYr9mGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAn2b7YtNiqINi12K3ZhtmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ9mF2KrYtdmEINin2LPYqiDYqNmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICfZiNi22LnbjNiqINis2KfYsduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICfZhtmF2KfbjNi0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICfZiNin2KjYs9iq2Ycg2KfYs9iqINio2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ9iz2LHZiNuM2LMg2qnYp9ix2KjYsSDZhtmH2KfbjNuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ9iu2LfYp9mH2KcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAn2KzZhNmIINi12K3ZhtmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICfZhdiv24zYsduM2KogSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICfYudmF2YTbjNin2KogSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAn2KfYq9ixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAn2YjYtti524zYqiDYsdiu2K/Yp9ivJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAn2YXYtNiq2YXZhCDYp9iz2Kog2KjYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ9io2YLbjNmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICfYqNiu2LTbjCDYp9iyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICfZvtix2YjamNmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICfYstmF2KfZhiDYqNmH2KjZiNivJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAn2YXYsdiq2KjYtyDYqNinJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ9qv2LLYp9ix2LTbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfZhdmI2LHYryDZhtuM2KfYsiDYp9iz2Kog2KjYsdin24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAn2YbYsdiuINit2YQg2YXYs9im2YTZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAn2LLZhdin2YYg2b7Yp9iz2K7ar9mI24zbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICfYrtmE2KfYtdmHIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAn2K7ZhNin2LXZhyDYs9ix2YjbjNizJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ9io2K7YtCDYs9ix2YjbjNizJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAn2KLZhdmI2LLYtNuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ9iq2LHYp9qp2YbYtOKAjNmH2KcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAn2YLYsdin2LHYr9in2K8g2KLZhdin2K/ZhyDahtin2b4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ9in2K7Yqti12KfYtSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAn2KfZh9mF24zYqiA8LT4g2KfYq9ixIDwtPiDYp9mI2YTZiNuM2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ9mF2K/bjNix24zYqiDYp9mE2YjbjNiqINmG2KfYtNuMINin2LIg2KrYsdqp24zYqCDYp9mH2YXbjNiqIDwtPiDYp9ir2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ9iq2K7YtduM2LUg2KfZhNmI24zYqic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ9it2K/Yp9mC2YQg2LLZhdin2YYg2KjbjNmGINiv2Ygg2LHYrtiv2KfYryc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ9in2YfZhduM2KonOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ9in2LfZhNin2LnYp9iqIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfYotiu2LHbjNmGINiq2LrbjNuM2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn2KLYrtix24zZhiDYqti624zbjNixINiq2YjYs9i3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICfYs9ix2YjbjNiz4oCM2YfYp9uMINmF2LHYqtio2LcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAn2KfYt9mE2KfYudin2Kog2LPYsdmI24zYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAn2YjYtti524zYqiDaqdmG2YjZhtuMINix2K7Yr9in2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xB2YfYp9uMINmF2LHYqtio2LcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ9mI2LbYuduM2Kog2KzYp9ix24wg2LHYrtiv2KfYryc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn2KvYqNiqINmF2KfamNmI2YQg2KjYsdin24wg2b7bjNqp2LHYqNmG2K/bjCBBZG1pbklUU01DSVBBbGxvY2F0ZSDYr9ixINio2K7YtCDZhdiv24zYsduM2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9ir2KjYqiDZhdin2pjZiNmEINio2LHYp9uMINm+24zaqdix2KjZhtiv24wg2KLYqNis2qnYqiBBZ2VudElUU01TTEEg2K/YsSDZiNin2LPYtyDaqdin2LHYqNix24wg2qnYp9ix2LTZhtin2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn2KvYqNiqINmF2KfamNmI2YQg2KjYsdin24wg2b7bjNqp2LHYqNmG2K/bjCDYotio2KzaqdiqIEFnZW50SVRTTVNMQVByaW50INiv2LEg2YjYp9iz2Lcg2qnYp9ix2KjYsduMINqp2KfYsdi02YbYp9izJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn2KvYqNiqINmF2KfamNmI2YQg2KjYsdin24wg2b7bjNqp2LHYqNmG2K/bjCDYotio2KzaqdiqIEFnZW50SVRTTVNMQVpvb20g2K/YsSDZiNin2LPYtyDaqdin2LHYqNix24wg2qnYp9ix2LTZhtin2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINii2KjYrNqp2KogQWdlbnRJVFNNU2VydmljZSDYr9ixINmI2KfYs9i3INqp2KfYsdio2LHbjCDaqdin2LHYtNmG2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn2KvYqNiqINmF2KfamNmI2YQg2KjYsdin24wg2b7bjNqp2LHYqNmG2K/bjCDYotio2KzaqdiqIEFnZW50SVRTTVNlcnZpY2VQcmludCDYr9ixINmI2KfYs9i3INqp2KfYsdio2LHbjCDaqdin2LHYtNmG2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINii2KjYrNqp2KogQWdlbnRJVFNNU2VydmljZVpvb20g2K/YsSDZiNin2LPYtyDaqdin2LHYqNix24wg2qnYp9ix2LTZhtin2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ9mF2K/bjNix24zYqiDZhdin2KrYsduM2LMg2KfZhNmI24zYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ9mF2KfamNmI2YTbjCDYqNix2KfbjCDZhtmF2KfbjNi0INmE24zZhtqpINio2KfYstqv2LTYqiDYr9ixINmF2YbZiNuMINiz2LHZiNuM2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ9mF2KfamNmI2YTbjCDYqNix2KfbjCDZhtmF2KfbjNi0INmE24zZhtqpINio2KfYstqv2LTYqiDYr9ixINmF2YbZiNuMIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfZhdin2pjZiNmE24wg2KjYsdin24wg2YbZhdin24zYtCDZhNuM2YbaqSDahtin2b4g2K/YsSDZhdmG2YjbjCDYs9ix2YjbjNizJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAn2YXYp9qY2YjZhNuMINio2LHYp9uMINmG2YXYp9uM2LQg2YTbjNmG2qkg2obYp9m+INiv2LEg2YXZhtmI24wgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBsaW5rIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ9i52YXZhNuM2KfYqtuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICfZvtin2LHYp9mF2KrYsdmH2KfbjNuMINio2LHYp9uMINmI2LbYuduM2KrigIzZh9in24wg2LHYrtiv2KfYryDYr9ixINmG2YXYp9uMINiq2YbYuNuM2YXYp9iqINi02K7YtduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAn2KfZhtiv2KfYstmHINi52LHYtiDaqdmG2KrYsdmE4oCM2YfYp9uMINmI2LHZiNivINmF2KrZhiBJVFNNJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZnJfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2ZSDDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsaXTDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnTGnDqSDDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAnRXRhdCBhY3R1ZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0TDqW1vbnN0cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdEw6lwZW5kIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdTZXJ2aWNlIHV0aWxpc2F0ZXVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0VycmV1cnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpb24gSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdPcMOpcmF0aW9ucyBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdFdGF0IGRcJ2luY2lkZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnSW5jbHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnQXV0cmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1BhcnQgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2pldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnVGVtcHMgZGUgcsOpcGFyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdDb3JyZXNwb25kIMOgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JhcHBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUmVxdWlzIHBvdXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnVGF1eCBkZSByw6lzb2x1dGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVGVtcHMgZGUgcsOpcG9uc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnQXBlcsOndSBkZXMgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdBcGVyw6d1IGRlcyBzZXJ2aWNlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdab25lIGRlIHNlcnZpY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhaW5pbmcnfSA9ICdGb3JtYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNhY3Rpb25zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ0NvbnRyYXQgZXh0ZXJuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAnYWxsb3VlJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdDcml0aWNpdMOpIDwtPiBJbXBhY3QgPC0+IFByaW9yaXTDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnR2VzdGlvbiBkZSBsYSBwcmlvcml0w6kgcGFyIGNvbWJpbmFpc29uIENyaXRpY2l0w6kgPC0+IEltcGFjdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQXR0cmlidXRpb24gZGUgcHJpb3JpdMOpJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnVGVtcHMgbWluaW1hbCBlbnRyZSBsZXMgaW5jaWRlbnRzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnQ3JpdGljaXTDqSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYXRpb24gU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBwYXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1NlcnZpY2VzIGFzc29jacOpcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hdGlvbiBzZXJ2aWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdFdGF0IGFjdHVlbCBkZSBsXCdpbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdTTEFzIGFzc29jacOpZXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0V0YXQgYWN0dWVsIGRcJ2luY2lkZW50JzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnR2VzdGlvbiBkZSBsYSBtYXRyaWNlIGRlIHByaW9yaXTDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcMOpcmF0aW9ubmVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXJhbcOodHJlcyBkZXMgw6l0YXRzIGRcJ2luY2lkZW50IGRhbnMgbGVzIHByw6lmw6lyZW5jZXMgZGUgdmlzdWFsaXNhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIFNDUklQVCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnQ2UgcGFyYW3DqXRyYWdlIGTDqWZpbmkgcXVcJ3VuIG9iamV0IFwnSVRTTUNoYW5nZVwnIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0IFwnVGlja2V0XCcgZW4gdXRpbGlzYW50IHVuIHR5cGUgZGUgbGllbiBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnQ2UgcGFyYW3DqXRyYWdlIGTDqWZpbmkgcXVcJ3VuIG9iamV0IFwnSVRTTUNvbmZpZ0l0ZW1cJyBwZXV0IMOqdHJlIGxpw6kgYXZlYyB1biBvYmpldCBcJ0ZBUVwnIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnQ2UgcGFyYW3DqXRyYWdlIGTDqWZpbmkgcXVcJ3VuIG9iamV0IFwnSVRTTUNvbmZpZ0l0ZW1cJyBwZXV0IMOqdHJlIGxpw6kgYXZlYyB1biBvYmpldCBcJ0ZBUVwnIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gXCdQYXJlbnRFbmZhbnRcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnQ2UgcGFyYW3DqXRyYWdlIGTDqWZpbmkgcXVcJ3VuIG9iamV0IFwnSVRTTVdvcmtPcmRlclwnIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0IFwnSVRTTUNvbmZpZ0l0ZW1cJyBlbiB1dGlsaXNhbnQgdW4gdHlwZSBkZSBsaWVuIFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgXCdJVFNNV29ya09yZGVyXCcgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgXCdTZXJ2aWNlXCcgZW4gdXRpbGlzYW50IHVuIHR5cGUgZGUgbGllbiBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgXCdJVFNNV29ya09yZGVyXCcgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgXCdUaWNrZXRcJyBlbiB1dGlsaXNhbnQgdW4gdHlwZSBkZSBsaWVuIFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCBcJ1NlcnZpY2VcJyBwZXV0IMOqdHJlIGxpw6kgYXZlYyB1biBvYmpldCBcJ0ZBUVwnIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgXCdTZXJ2aWNlXCcgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgXCdGQVFcJyBlbiB1dGlsaXNhbnQgdW4gdHlwZSBkZSBsaWVuIFwnUGFyZW50RW5mYW50XCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTGFyZ2V1ciBkZXMgem9uZXMgZGUgdGV4dGUgSVRTTSc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aHVfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdMOtdmEgZXJyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdFbMOpcmhldMWRc8OpZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0jDoXR0w6lycHJvZ3JhbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdDc2F0bGFrb3p0YXR2YSBpZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ0plbGVubGVnaSDDoWxsYXBvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnQmVtdXRhdMOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdFdHTFkWwgZsO8Z2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1bDqWdmZWxoYXN6bsOhbMOzaSBzem9sZ8OhbHRhdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdIaWLDoWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRWzFkXTDqXRwcm9ncmFtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdJVCBtZW5lZHpzbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lUIMO8emVtZWx0ZXTDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnSGF0w6FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnSW5jaWRlbnPDoWxsYXBvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ1RhcnRhbG1henphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnRWd5w6liJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdSw6lzemUgZW5uZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2pla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ0hlbHlyZcOhbGzDrXTDoXNpIGlkxZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdSZWxldsOhbnMgZXp6ZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnSmVsZW50w6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1N6w7xrc8OpZ2VzIGVoaGV6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ0ZlbGJvbnTDoXNpIGFyw6FueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVsOhbGFzemlkxZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xBIMOhdHRla2ludMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnU3pvbGfDoWx0YXTDoXMgw6F0dGVraW50w6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1N6b2xnw6FsdGF0w6FzIHRlcsO8bGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnS2lrw6lwesOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuemFrY2nDs2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnTWVnYWxhcG96w7Mgc3plcnrFkWTDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ2xlZm9nbGFsw6FzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLcml0aWt1c3PDoWcgPC0+IEhhdMOhcyA8LT4gUHJpb3JpdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnQSBLcml0aWt1c3PDoWcgPC0+IEhhdMOhcyDDtnNzemV0w6l0ZWwgcHJpb3JpdMOhcyBlcmVkbcOpbnnDqW5layBrZXplbMOpc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdQcmlvcml0w6FzIGxlZm9nbGFsw6FzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnQXogaW5jaWRlbnNlayBrw7Z6dGkgbGVna2lzZWJiIGlkxZEnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0aWt1c3PDoWcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQSBpbmZvcm3DoWNpw7NrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1V0b2xzw7MgbcOzZG9zw610w6FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1V0b2xqw6FyYSBtw7Nkb3PDrXRvdHRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdIb3p6w6FyZW5kZWx0IHN6b2xnw6FsdGF0w6Fzb2snOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnU3pvbGfDoWx0YXTDoXMgaW5mb3Jtw6FjacOzayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnSmVsZW5sZWdpIGluY2lkZW5zw6FsbGFwb3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnSG96esOhcmVuZGVsdCBTTEEtayc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnSmVsZW5sZWdpIGluY2lkZW5zw6FsbGFwb3QnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAnTWluZGtldHTFkSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdFbMWRdMOpdHByb2dyYW0gbW9kdWwgcmVnaXN6dHLDoWNpw7MgYXogYWRtaW5pc3p0csOhY2nDs3MgdGVyw7xsZXRlbiBsw6l2xZEgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgYmXDoWxsw610w6FzaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWzFkXTDqXRwcm9ncmFtIG1vZHVsIHJlZ2lzenRyw6FjacOzIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbiBsw6l2xZEgQWdlbnRJVFNNU0xBIG9iamVrdHVtaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFbMWRdMOpdHByb2dyYW0gbW9kdWwgcmVnaXN6dHLDoWNpw7MgYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGzDqXbFkSBBZ2VudElUU01TTEFQcmludCBvYmpla3R1bWhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFbMWRdMOpdHByb2dyYW0gbW9kdWwgcmVnaXN6dHLDoWNpw7MgYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGzDqXbFkSBBZ2VudElUU01TTEFab29tIG9iamVrdHVtaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VsxZF0w6l0cHJvZ3JhbSBtb2R1bCByZWdpc3p0csOhY2nDsyBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4gbMOpdsWRIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWt0dW1ob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFbMWRdMOpdHByb2dyYW0gbW9kdWwgcmVnaXN6dHLDoWNpw7MgYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGzDqXbFkSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWt0dW1ob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VsxZF0w6l0cHJvZ3JhbSBtb2R1bCByZWdpc3p0csOhY2nDsyBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4gbMOpdsWRIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVrdHVtaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICdJVFNNIFNMQSDDoXR0ZWtpbnTDqXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdJVFNNIHN6b2xnw6FsdGF0w6FzIMOhdHRla2ludMOpcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnSW5jaWRlbnPDoWxsYXBvdCB0w61wdXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZS4nfSA9ICdJbmNpZGVuc8OhbGxhcG90IHTDrXB1cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdQcmlvcml0w6FzbcOhdHJpeCBrZXplbMOpc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnRWd5IG1vZHVsIHZpc3N6YW11dGF0w7MgaGl2YXRrb3rDoXMgbWVnamVsZW7DrXTDqXPDqWhleiBhIHN6b2xnw6FsdGF0w6FzIG1lbsO8YmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnRWd5IG1vZHVsIHZpc3N6YW11dGF0w7MgaGl2YXRrb3rDoXMgbWVnamVsZW7DrXTDqXPDqWhleiBheiBTTEEgbWVuw7xiZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ0VneSBtb2R1bCBueW9tdGF0w6FzaSBoaXZhdGtvesOhcyBtZWdqZWxlbsOtdMOpc8OpaGV6IGEgc3pvbGfDoWx0YXTDoXMgbWVuw7xiZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnRWd5IG1vZHVsIG55b210YXTDoXNpIGhpdmF0a296w6FzIG1lZ2plbGVuw610w6lzw6loZXogYXogU0xBIG1lbsO8YmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdFZ3kgbW9kdWwgYSBoaXZhdGtvesOhcyBtZWdqZWxlbsOtdMOpc8OpaGV6IGEgc3pvbGfDoWx0YXTDoXMgbWVuw7xiZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnw5x6ZW1rw6lwZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcmFtw6l0ZXJlayBheiBpbmNpZGVuc8OhbGxhcG90b2tob3ogYSBiZcOhbGzDrXTDoXNvayBuw6l6ZXRiZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICdTTEEgbnlvbXRhdMOhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnU0xBIG5hZ3nDrXTDoXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnU3pvbGfDoWx0YXTDoXMgbnlvbXRhdMOhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ1N6b2xnw6FsdGF0w6FzIG5hZ3nDrXTDoXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIFNDUklQVCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ8OBbGzDrXRzYSBiZSBhIGhpdmF0a296w6Fzb2sgdMOtcHVzw6F0IMOpcyBpcsOhbnnDoXQsIGhvZ3kgaGFzem7DoWxoYXTDsyBsZWd5ZW4gYXogIGluY2lkZW5zw6FsbGFwb3Qga2lzesOhbcOtdMOhc8OhaG96LiBBIGt1bGNzIGEgaGl2YXRrb3rDoXN0w61wdXMgbmV2ZSAoYWhvZ3kgYSBMaW5rT2JqZWN0OjpUeXBlIMOpcnTDqWvDqWJlbiB2YW4gbWVnaGF0w6Fyb3p2YSksIMOpcyBheiDDqXJ0w6lrIGF6IEluY2lkZW50TGlua1R5cGUgaXLDoW55YSwgYW1lbHlldCBrw7Z2ZXRuaWUga2VsbCBheiBpbmNpZGVuc8OhbGxhcG90IGtpc3rDoW3DrXTDoXPDoWhvei4gUMOpbGTDoXVsIGhhIGF6IEluY2lkZW50TGlua1R5cGUg4oCeRGVwZW5kc09u4oCdIMOpcnTDqWtyZSB2YW4gw6FsbMOtdHZhLCDDqXMgYXogaXLDoW55IOKAnlNvdXJjZeKAnSwgYWtrb3IgY3NhayBhIOKAnkRlcGVuZHMgb27igJ0gaGl2YXRrb3rDoXNvayBsZXN6bmVrIGvDtnZldHZlICjDqXMgbmVtIGF6IGVsbGVudMOpdGVzIOKAnlJlcXVpcmVkIGZvcuKAnSBoaXZhdGtvesOhcykgYXogaW5jaWRlbnPDoWxsYXBvdCBraXN6w6Ftw610w6Fzw6Fob3ouIEhvenrDoWFkaGF0IHRvdsOhYmJpIGhpdmF0a296w6FzdMOtcHVzb2thdCDDqXMgaXLDoW55b2thdCwgYWhvZ3kgY3NhayBzemVyZXRuw6ksIHDDqWxkw6F1bCDigJ5JbmNsdWRlc+KAnSBhIOKAnlRhcmdldOKAnSBpcsOhbm55YWwuIE1pbmRlbiBMaW5rT2JqZWN0OjpUeXBlIHJlbmRzemVyYmXDoWxsw610w6FzaSBsZWhldMWRc8OpZ2JlbiBtZWdoYXTDoXJvem90dCBoaXZhdGtvesOhc3TDrXB1cyBsZWhldHPDqWdlcywgw6lzIGF6IGlyw6FueSDigJ5Tb3VyY2XigJ0sIOKAnlRhcmdldOKAnSB2YWd5IOKAnkJvdGjigJ0gbGVoZXQuIEZPTlRPUzogTUlVVMOBTiBNw5NET1PDjVTDgVNPS0FUIEhBSlRPVFQgVsOJR1JFIEVaRU4gQSBSRU5EU1pFUkJFw4FMTMONVMOBU09OLCBMRSBLRUxMIEZVVFRBVE5JQSBBIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFBBUkFOQ1NGw4FKTFQgQVrDiVJULCBIT0dZIE1JTkRFTiBJTkNJREVOU8OBTExBUE9UIMOaSlJBIEtJU1rDgU3DjVTDgVNSQSBLRVLDnExKw5ZOIEFaIMOaSiBCRcOBTEzDjVTDgVNPSyBBTEFQSsOBTiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ2hhbmdl4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeVGlja2V04oCdIG9iamVrdHVtb2trYWwgYSDigJ5Ob3JtYWzigJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnkZBUeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeTm9ybWFs4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnkZBUeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeUGFyZW50Q2hpbGTigJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYSDigJ5GQVHigJ0gb2JqZWt0dW1va2thbCBhIOKAnlJlbGV2YW50VG/igJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeU2VydmljZeKAnSBvYmpla3R1bW9ra2FsIGF6IOKAnkFsdGVybmF0aXZlVG/igJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYSDigJ5TZXJ2aWNl4oCdIG9iamVrdHVtb2trYWwgYSDigJ5EZXBlbmRzT27igJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeU2VydmljZeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeUmVsZXZhbnRUb+KAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnlRpY2tldOKAnSBvYmpla3R1bW9ra2FsIGF6IOKAnkFsdGVybmF0aXZlVG/igJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnlRpY2tldOKAnSBvYmpla3R1bW9ra2FsIGEg4oCeRGVwZW5kc09u4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeVGlja2V04oCdIG9iamVrdHVtb2trYWwgYSDigJ5SZWxldmFudFRv4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgbcOhcyDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bW9ra2FsIGF6IOKAnkFsdGVybmF0aXZlVG/igJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgbcOhcyDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeQ29ubmVjdGVkVG/igJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIG3DoXMg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW1va2thbCBhIOKAnkRlcGVuZHNPbuKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBtw6FzIOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtb2trYWwgYXog4oCeSW5jbHVkZXPigJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBtw6FzIOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtb2trYWwgYSDigJ5SZWxldmFudFRv4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Xb3JrT3JkZXLigJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYXog4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW1va2thbCBhIOKAnkRlcGVuZHNPbuKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNV29ya09yZGVy4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGF6IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtb2trYWwgYSDigJ5Ob3JtYWzigJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNV29ya09yZGVy4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeU2VydmljZeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeRGVwZW5kc09u4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTVdvcmtPcmRlcuKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnlNlcnZpY2XigJ0gb2JqZWt0dW1va2thbCBhIOKAnk5vcm1hbOKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTVdvcmtPcmRlcuKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnlRpY2tldOKAnSBvYmpla3R1bW9ra2FsIGEg4oCeTm9ybWFs4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5TZXJ2aWNl4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeRkFR4oCdIG9iamVrdHVtb2trYWwgYSDigJ5Ob3JtYWzigJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeU2VydmljZeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnkZBUeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeUGFyZW50Q2hpbGTigJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5TZXJ2aWNl4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeRkFR4oCdIG9iamVrdHVtb2trYWwgYSDigJ5SZWxldmFudFRv4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcgYXog4oCeQWx0ZXJuYXRpdmVUb+KAnSBoaXZhdGtvesOhc3TDrXB1c3QuIEhhIGEgZm9ycsOhc27DqXYgYSBjw6lsbsOpdiB1Z3lhbmF6dCBheiDDqXJ0w6lrZXQgdGFydGFsbWF6emEsIGFra29yIGF6IGVyZWRtw6luecO8bCBrYXBvdHQgaGl2YXRrb3rDoXMgbmVtIGxlc3ogaXLDoW55w610b3R0LiBIYSBheiDDqXJ0w6lrZWsgZWx0w6lybmVrLCBha2tvciBheiBlcmVkbcOpbnnDvGwga2Fwb3R0IGhpdmF0a296w6FzIGlyw6FuecOtdG90dCBoaXZhdGtvesOhcyBsZXN6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcgYSDigJ5Db25uZWN0ZWRUb+KAnSBoaXZhdGtvesOhc3TDrXB1c3QuIEhhIGEgZm9ycsOhc27DqXYgYSBjw6lsbsOpdiB1Z3lhbmF6dCBheiDDqXJ0w6lrZXQgdGFydGFsbWF6emEsIGFra29yIGF6IGVyZWRtw6luecO8bCBrYXBvdHQgaGl2YXRrb3rDoXMgbmVtIGxlc3ogaXLDoW55w610b3R0LiBIYSBheiDDqXJ0w6lrZWsgZWx0w6lybmVrLCBha2tvciBheiBlcmVkbcOpbnnDvGwga2Fwb3R0IGhpdmF0a296w6FzIGlyw6FuecOtdG90dCBoaXZhdGtvesOhcyBsZXN6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnIGEg4oCeRGVwZW5kc09u4oCdIGhpdmF0a296w6FzdMOtcHVzdC4gSGEgYSBmb3Jyw6FzbsOpdiBhIGPDqWxuw6l2IHVneWFuYXp0IGF6IMOpcnTDqWtldCB0YXJ0YWxtYXp6YSwgYWtrb3IgYXogZXJlZG3DqW55w7xsIGthcG90dCBoaXZhdGtvesOhcyBuZW0gbGVzeiBpcsOhbnnDrXRvdHQuIEhhIGF6IMOpcnTDqWtlayBlbHTDqXJuZWssIGFra29yIGF6IGVyZWRtw6luecO8bCBrYXBvdHQgaGl2YXRrb3rDoXMgaXLDoW55w610b3R0IGhpdmF0a296w6FzIGxlc3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZyBheiDigJ5JbmNsdWRlc+KAnSBoaXZhdGtvesOhc3TDrXB1c3QuIEhhIGEgZm9ycsOhc27DqXYgYSBjw6lsbsOpdiB1Z3lhbmF6dCBheiDDqXJ0w6lrZXQgdGFydGFsbWF6emEsIGFra29yIGF6IGVyZWRtw6luecO8bCBrYXBvdHQgaGl2YXRrb3rDoXMgbmVtIGxlc3ogaXLDoW55w610b3R0LiBIYSBheiDDqXJ0w6lrZWsgZWx0w6lybmVrLCBha2tvciBheiBlcmVkbcOpbnnDvGwga2Fwb3R0IGhpdmF0a296w6FzIGlyw6FuecOtdG90dCBoaXZhdGtvesOhcyBsZXN6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZyBhIOKAnlJlbGV2YW50VG/igJ0gaGl2YXRrb3rDoXN0w61wdXN0LiBIYSBhIGZvcnLDoXNuw6l2IGEgY8OpbG7DqXYgdWd5YW5henQgYXogw6lydMOpa2V0IHRhcnRhbG1henphLCBha2tvciBheiBlcmVkbcOpbnnDvGwga2Fwb3R0IGhpdmF0a296w6FzIG5lbSBsZXN6IGlyw6FuecOtdG90dC4gSGEgYXogw6lydMOpa2VrIGVsdMOpcm5laywgYWtrb3IgYXogZXJlZG3DqW55w7xsIGthcG90dCBoaXZhdGtvesOhcyBpcsOhbnnDrXRvdHQgaGl2YXRrb3rDoXMgbGVzei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnQXogSVRTTSBzesO2dmVnZG9ib3pvayBzesOpbGVzc8OpZ2UuJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aXRfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2byBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rpc3BvbmliaWxpdMOgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnTW90b3JlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0Nvbm5lc3NvIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ1N0YXRvIGF0dHVhbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RpbW9zdHJhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0RlcGVuZGUgZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZpemlvIHV0ZW50ZSBmaW5hbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyb3JpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0ludGVyZmFjY2lhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdJVCBNYW5hZ2VtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVQgT3BlcmF0aW9uYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnSW1wYXR0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YXRvIGRlbGxcJ2luY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luY2x1ZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbHRybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnUGFydGUgZGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2dldHRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdUZW1wbyBkaSByaXByaXN0aW5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmlsZXZhbnRlIHBlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBwb3J0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdSaWNoaWVzdG8gcGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ1ZlbG9jaXTDoCBkaSByaXNvbHV6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVGVtcG8gZGkgcmlzcG9zdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnRGVzY3JpemlvbmUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdEZXNjcml6aW9uZSBkZWwgc2Vydml6aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnU2Vydml6aW8tQXJlYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ0Zvcm1hemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNhemlvbmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICdhc3NlZ25hemlvbmUnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ1VyZ2VuemEgPC0+IEltcGF0dG8gPC0+IFByaW9yaXTDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnR2VzdGlzY2UgaWwgcmlzdWx0YXRvIGRpIHByaW9yaXTDoCBkZWxsYSBjb21iaW5hemlvbmUgQ3JpdGljaXTDoCA8LT4gSW1wYXR0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0Fzc2VnbmF6aW9uZSBwcmlvcml0YXJpYSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ1RlbXBvIG1pbmltbyB0cmEgaW5jaWRlbnRpJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnVXJnZW56YSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYXppb25pIHN1bGxlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdVbHRpbWEgbW9kaWZpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnVWx0aW1hIG1vZGlmaWNhIGVmZmV0dHVhdGEgZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1NlcnZpemkgYXNzb2NpYXRpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWF6aW9uaSBzdWwgc2Vydml6aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ1N0YXRvIGF0dHVhbGUgZGVsbFwnaW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQSBhc3NvY2lhdGknOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YXRvIGF0dHVhbGUgZGVsbFwnSW5jaWRlbnRlJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ0dlc3Rpb25lIGRlbGxhIG1hdHJpY2UgZGVsbGUgcHJpb3JpdMOgLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsbyBwZXIgbW9zdHJhcmUgaWwgY29sbGVnYW1lbnRvIGluZGlldHJvIG5lbCBtZW51IGRpIHNlcnZpemlvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTW9kdWxvIHBlciBtb3N0cmFyZSBpbCBjb2xsZWdhbWVudG8gaW5kaWV0cm8gbmVsIG1lbnUgc2xhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bG8gcGVyIG1vc3RyYXJlIGlsIGNvbGxlZ2FtZW50byBzdGFtcGEgbmVsIG1lbnUgZGkgc2Vydml6aW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTW9kdWxvIHBlciBtb3N0cmFyZSBpbCBjb2xsZWdhbWVudG8gc3RhbXBhIG5lbCBtZW51IHNsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWxvIHBlciBtb3N0cmFyZSBpbCBjb2xsZWdhbWVudG8gY29sbGVnYSBuZWwgbWVudSBkaSBzZXJ2aXppby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYXRpdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcmFtZXRyaSBwZXIgZ2xpIHN0YXRpIGRlbGxcJ2luY2lkZW50ZSBuZWxsYSB2aXN0YSBkZWxsZSBwcmVmZXJlbnplLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIFNDUklQVCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBzdGFiaWxpc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTUNoYW5nZVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ1RpY2tldFwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ05vcm1hbGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIHN0YWJpbGlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ0ZBUVwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ05vcm1hbGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgc3RhYmlsaXNjZSBjaGUgdW4gb2dnZXR0byBcJ0lUU01Db25maWdJdGVtXCcgcHXDsiBlc3NlcmUgY29sbGVnYXRvIGNvbiBvZ2dldHRpIFwnRkFRXCcgdXNhbmRvIGlsIHRpcG8gZGkgY29sbGVnYW1lbnRvIFwnUGFkcmVGaWdsaW9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ0ZBUVwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0ltcG9ydGFudGVQZXJcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgZGVmaW5pc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIG9nZ2V0dGkgXCdTZXJ2aXppb1wnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0FsdGVybmF0aXZvQVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIGRlZmluaXNjZSBjaGUgdW4gb2dnZXR0byBcJ0lUU01Db25maWdJdGVtXCcgcHXDsiBlc3NlcmUgY29sbGVnYXRvIGNvbiBvZ2dldHRpIFwnU2Vydml6aW9cJyB1c2FuZG8gaWwgdGlwbyBkaSBjb2xsZWdhbWVudG8gXCdEaXBlbmRlRGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgZGVmaW5pc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIG9nZ2V0dGkgXCdTZXJ2aXppb1wnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0ltcG9ydGFudGVQZXJcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ1RpY2tldFwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0FsdGVybmF0aXZvQVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgZGVmaW5pc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIG9nZ2V0dGkgXCdUaWNrZXRcJyB1c2FuZG8gaWwgdGlwbyBkaSBjb2xsZWdhbWVudG8gXCdEaXBlbmRlRGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ1RpY2tldFwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0ltcG9ydGFudGVQZXJcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdTZXJ2aXppb1wnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ0ZBUVwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ05vcm1hbGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdTZXJ2aXppb1wnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ0ZBUVwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0ltcG9ydGFudGVQZXJcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTGFyZ2hlenphIGRlaSBjYW1waSBkaSB0ZXN0byBkaSBJVFNNJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6amFfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICfku6Pmm7/vvJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAn5Y+v55So5oCnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAn44OQ44OD44Kv44Ko44Oz44OJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ+aOpee2mu+8mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAn54q25oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICfjg4fjg6Ljg7Pjgrnjg4jjg6zjg7zjgrfjg6fjg7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ+S+neWtmO+8mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAn44Ko44Oz44OJ44Om44O844K244O744K144O844OT44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ+OCqOODqeODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICfjg5Xjg63jg7Pjg4jjgqjjg7Pjg4knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lU44Oe44ON44O844K444Oh44Oz44OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVTjgqrjg5rjg6zjg7zjgrfjg6fjg7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAn5b2x6Z+/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAn44Kk44Oz44K344OH44Oz44OI44Gu54q25oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAn5ZCr44KA77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn44Gd44Gu5LuWJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICfkuIDpg6jvvJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ+ODl+ODreOCuOOCp+OCr+ODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAn44Oq44Kr44OQ44Oq44O744K/44Kk44OgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAn6Zai6YCj6aCF55uu77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ+ODrOODneODvOODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICflv4XpoIjvvJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAn6Kej5YOP5bqm44Os44O844OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICfjg6zjgrnjg53jg7Pjgrnjgr/jgqTjg6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xB44Gu5qaC6KazJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICfjgrXjg7zjg5Pjgrnjga7mpoLoprMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAn44K144O844OT44K544O744Ko44Oq44KiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAn44OI44Os44O844OL44Oz44KwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ+WPluW8lSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICfmlK/mjIHjgZnjgovlpZHntIQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ+mFjeWIhic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAn6YeN6KaB5bqmIDwtPiDlvbHpn7/luqYgPC0+IOWEquWFiOW6pic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAn6YeN6KaB5bqmPC0+5b2x6Z+/5bqm44KS57WQ44Gz44Gk44GR44Gf6Zqb44Gu5YSq5YWI5bqm57WQ5p6c44KS566h55CG44GZ44KLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICflhKrlhYjpoIbkvY3jga7libLjgorlvZPjgaYnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICfjgqTjg7Pjgrfjg4fjg7Pjg4jplpPjga7mnIDlsI/mmYLplpMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICfph43opoHluqYnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQeaDheWgsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfmnIDntYLlpInmm7TmmYLliLsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn5pyA57WC5aSJ5pu06ICFJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICfplqLpgKPjgZnjgovjgrXjg7zjg5PjgrknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAn44K144O844OT44K55oOF5aCxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICfjgqTjg7Pjgrfjg4fjg7Pjg4jjga7nirbmhYsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAn6Zai6YCj44GZ44KLU0xBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICfjgqTjg7Pjgrfjg4fjg7Pjg4jjga7nirbmhYsnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAn5Lih5pa5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ+euoeeQhuOCqOODquOCouOBp+OBrkFkbWluSVRTTUNJUEFsbG9jYXRl44Gu44OV44Ot44Oz44OI44Ko44Oz44OJ44Oi44K444Ol44O844Or44Gu55m76YyyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjga5BZ2VudElUU01TTEHjgqrjg5bjgrjjgqfjgq/jg4jjgIDjg5Xjg63jg7Pjg4jjgqjjg7Pjg4njg7vjg6Ljgrjjg6Xjg7zjg6vjga7nmbvpjLLjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44OV44Kn44O844K544GuQWdlbnRJVFNNU0xBUHJpbnTjgqrjg5bjgrjjgqfjgq/jg4jjgIDjg5Xjg63jg7Pjg4jjgqjjg7Pjg4njg7vjg6Ljgrjjg6Xjg7zjg6vjga7nmbvpjLLjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjga5BZ2VudElUU01TTEFab29t44Kq44OW44K444Kn44Kv44OI44CA44OV44Ot44Oz44OI44Ko44Oz44OJ44O744Oi44K444Ol44O844Or44Gu55m76Yyy44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44OV44Kn44O844K544GuQWdlbnRJVFNNU2VydmljZeOCquODluOCuOOCp+OCr+ODiOOAgOODleODreODs+ODiOOCqOODs+ODieODu+ODouOCuOODpeODvOODq+OBrueZu+mMsuOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44OV44Kn44O844K544GuQWdlbnRJVFNNU2VydmljZVByaW5044Kq44OW44K444Kn44Kv44OI44CA44OV44Ot44Oz44OI44Ko44Oz44OJ44O744Oi44K444Ol44O844Or44Gu55m76Yyy44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODleOCp+ODvOOCueOBrkFnZW50SVRTTVNlcnZpY2Vab29t44Kq44OW44K444Kn44Kv44OI44CA44OV44Ot44Oz44OI44Ko44Oz44OJ44O744Oi44K444Ol44O844Or44Gu55m76Yyy44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJ0lUU00gU0xBIOOBruamguimgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnSVRTTSDjgrXjg7zjg5Pjgrnjga7mpoLopoEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICfjgqTjg7Pjgrfjg4fjg7Pjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ+OCpOODs+OCt+ODh+ODs+ODiOeKtuaFi+OBruOCv+OCpOODlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJ+OCpOODs+OCt+ODh+ODs+ODiOeKtuaFi+OBruOCv+OCpOODlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ+WEquWFiOW6puOBrumWoumAo+aAp+OCkueuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ+OCteODvOODk+OCueODoeODi+ODpeODvOOBp+ODkOODg+OCr+ODquODs+OCr+OCkuihqOekuuOBmeOCi+OBn+OCgeOBruODouOCuOODpeODvOODqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnU0xB44Oh44OL44Ol44O844Gn44OQ44OD44Kv44Oq44Oz44Kv44KS6KGo56S644GZ44KL44Gf44KB44Gu44Oi44K444Ol44O844OrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ+OCteODvOODk+OCueODoeODi+ODpeODvOOBp+WNsOWIt+OCkuihqOekuuOBmeOCi+OBn+OCgeOBruODouOCuOODpeODvOODqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ1NMQeODoeODi+ODpeODvOOBp+WNsOWIt+OCkuihqOekuuOBmeOCi+OBn+OCgeOBruODouOCuOODpeODvOODqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfjgrXjg7zjg5Pjgrnjg6Hjg4vjg6Xjg7zjgafjgIzjg6rjg7Pjgq/jgI3jg6rjg7Pjgq/jgpLooajnpLrjgZnjgovjgZ/jgoHjga7jg6Ljgrjjg6Xjg7zjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICfpgJrluLjpgYvnlKgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ+ioreWumuODk+ODpeODvOOBp+OBruOCpOODs+OCt+ODh+ODs+ODiOOCueODhuODvOOCv+OCueOBruODkeODqeODoeODvOOCv+ODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnU0xBIOOBruWNsOWItyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICdTTEEg44K644O844OgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAn44K144O844OT44K544Gu5Y2w5Yi3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICfjgrXjg7zjg5Pjgrnjg7vjgrrjg7zjg6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAn44Kk44Oz44K344OH44Oz44OI44Gu54q25rOB44KS5Ymy44KK5Ye644GZ44Gf44KB44Gr44CB5Yip55So44GV44KM44KL44Oq44Oz44Kv44Gu44K/44Kk44OX44Go5pa55ZCR44KS6Kit5a6a44GX44Gm44GP44Gg44GV44GE44CCIOOCpOODs+OCt+ODh+ODs+ODiOOBrueKtuazgeOCkuWJsuOCiuWHuuOBmeOBn+OCgeOBq+OAgeODleOCqeODreODvOOBleOCjOOCi+OCreODvOOBr+ODquODs+OCr+OBruOCv+OCpOODl+WQjSAo44OH44OV44Kp44Or44OI44Gn44GvIExpbmtPYmplY3Q6OlR5cGUp44CB5YCk44GvSW5jaWRlbnRMaW5rVHlwZeOBruaWueWQkeOCkueUqOOBhOOCieOCjOOBvuOBmeOAguS+i+OBiOOBsEluY2lkZW50TGlua1R5cGXjgYxEZXBlbmRzT27jgIx+44Gr5L6d5a2Y44GZ44KL44CN44Gd44GX44Gm44CB5pa55ZCR44GM44K944O844K544Gu5pmC44Gv44CBRGVwZW5kc09u44Gg44GR44GM44OV44Kp44Ot44O844GV44KMKOOBneOBl+OBpuOAgeWPjeWvvuOBrlJlcXVpcmVkIGZvcuOAjH7jgavlv4XpoIjjgI3jgafjga/jgarjgYQp44CB44Kk44Oz44K344OH44Oz44OI44Gu54q25rOB44KS5Ymy44KK5Ye644GZ44Gu44Gr5Yip55So44GV44KM44G+44GZ44CCCuOBleOCieOBq+ODquODs+OCr+OCv+OCpOODl+OCkuW4jOacm+OBmeOCi+aWueWQkeOBq+i/veWKoOOBp+OBjeOBvuOBmeOAguS+iyBJbmNsdWRlc+OAjOWQq+OCgOOAjeOBruaWueWQkeOBqOOBl+OBplRhcmdldOOAjOWvvuixoeOAjeOAgkxpbmtPYmplY3Q6OlR5cGXjga7nrqHnkIbjgafkvZzmiJDjgZXjgozjgZ/jgZnjgbnjgabjga7jgr/jgqTjg5fjgYzliKnnlKjlj6/og73jgIHmlrnlkJHjga9cJ1NvdXJjZVwn44CM44K944O844K544CNIFwnVGFyZ2V0XCfjgIzjgr/jg7zjgrLjg4Pjg4jjgI0sIOOBvuOBn+OBryBcJ0JvdGhcJ+OAjOS4oeaWueOAjeOBjOWIqeeUqOWPr+iDveOBp+OBmeOAgumHjeimgTog44GT44Gu566h55CG6aCF55uu44Gu5aSJ5pu06KGM44Gj44Gf44GC44Go44Gr5b+F44GaIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsICDjgpLlrp/ooYzjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZnjgILlrp/ooYzlvozjgZnjgbnjgabjga7jgqTjg7Pjgrfjg4fjg7Pjg4jnirbms4HjgYzmlrDjgZfjgYToqK3lrprlgKTjgavmm7TmlrDjgZXjgozjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+KAmE5vcm1hbOKAmeODquODs+OCr+ODu+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeKAmElUU01DaGFuZ2XigJnjgqrjg5bjgrjjgqfjgq/jg4jjgYzku5bjga7igJhUaWNrZXTigJnjgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgZXjgozjgovjgojjgYbjgavjgIHlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfigJhOb3JtYWzigJnjg6rjg7Pjgq/jg7vjgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHigJhJVFNNQ2hhbmdl4oCZ44Kq44OW44K444Kn44Kv44OI44GM4oCYRkFR4oCZ44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44GV44KM44KL44KI44GG44Gr44CB5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfigJjopqrlrZDigJnjg6rjg7Pjgq/jg7vjgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHigJhJVFNNQ2hhbmdl4oCZ44Kq44OW44K444Kn44Kv44OI44GM4oCYRkFR4oCZ44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44GV44KM44KL44KI44GG44Gr44CB5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+KAmOmWoumAo+OBl+OBn+KAmeODquODs+OCr+ODu+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeKAmElUU01DaGFuZ2XigJnjgqrjg5bjgrjjgqfjgq/jg4jjgYzigJhGQVHigJnjgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgZXjgozjgovjgojjgYbjgavjgIHlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMQWx0ZXJuYXRpdmVUby9+44Gu5Luj5pu/44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CM44K144O844OT44K544CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMRGVwZW5kc09uL37jgavkvp3lrZjjgZnjgovjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIzjgrXjg7zjg5PjgrnjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMUmVsZXZhbnRUby9+44Go6Zai6YCj44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CM44K144O844OT44K544CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMQWx0ZXJuYXRpdmVUby9+44Gu5Luj5pu/44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CM44OB44Kx44OD44OI44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxEZXBlbmRzT24vfuOBq+S+neWtmOOBmeOCi+OAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjOODgeOCseODg+ODiOOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjFJlbGV2YW50VG8vfuOBqOmWoumAo+OBmeOCi+OAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjOODgeOCseODg+ODiOOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMQWx0ZXJuYXRpdmVUby9+44Gu5Luj5pu/44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB5LuW44Gu44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxDb25uZWN0ZWRUby9+44Go44Gk44Gq44GM44Gj44Gm44GE44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB5LuW44Gu44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMRGVwZW5kc09uL37jgavkvp3lrZjjgZnjgovjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHku5bjga7jgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjEluY2x1ZGVzL37jgpLlkKvjgoDjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHku5bjga7jgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMUmVsZXZhbnRUby9+44Go6Zai6YCj44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB5LuW44Gu44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTVdvcmtPcmRlcuOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjERlcGVuZHNPbi9+44Gr5L6d5a2Y44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTVdvcmtPcmRlcuOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjE5vcm1hbC/pgJrluLjjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Xb3JrT3JkZXLjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxEZXBlbmRzT24vfuOBq+S+neWtmOOBmeOCi+OAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjFNlcnZpY2XjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNV29ya09yZGVy44CN44Kq44OW44K444Kn44Kv44OI44GM44CMTm9ybWFsL+mAmuW4uOOAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjFNlcnZpY2XjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Xb3JrT3JkZXLjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxOb3JtYWwv6YCa5bi444CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMVGlja2V044CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxTZXJ2aWNl44CN44Kq44OW44K444Kn44Kv44OI44GM44CMTm9ybWFsL+mAmuW4uOOAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjEZBUeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxTZXJ2aWNl44CN44Kq44OW44K444Kn44Kv44OI44GM44CMUGFyZW50Q2hpbGQv6Kaq5a2Q44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMRkFR44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMU2VydmljZeOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjFJlbGV2YW50VG8vfuOBqOmWoumAo+OBmeOCi+OAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjEZBUeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfjg6rjg7Pjgq/jg7vjgr/jgqTjg5dcJ0FsdGVybmF0aXZlVG9cJ+OBruWumue+qeOBp+OBmeOAguOCguOBl+OCveODvOOCueWQjeOBiuOCiOOBs+OCv+ODvOOCsuODg+ODiOWQjeOBjOWQjOOBmOWApOOCkuWQq+OCk+OBp+OBhOOCi+WgtOWQiOOAgee1kOaenOOBruODquODs+OCr+OBr+mdnuebtOaOpeODquODs+OCr+OBq+OBquOCiuOAgeOBneOBhuOBp+OBquOBhOe1kOaenOOBr+ebtOaOpeODquODs+OCr+OBq+OBquOCiuOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn44Oq44Oz44Kv44O744K/44Kk44OXXCdDb25uZWN0ZWRUb1wn44Gu5a6a576p44Gn44GZ44CC44KC44GX44K944O844K55ZCN44GK44KI44Gz44K/44O844Ky44OD44OI5ZCN44GM5ZCM44GY5YCk44KS5ZCr44KT44Gn44GE44KL5aC05ZCI44CB57WQ5p6c44Gu44Oq44Oz44Kv44Gv6Z2e55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44CB44Gd44GG44Gn44Gq44GE57WQ5p6c44Gv55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn44Oq44Oz44Kv44O744K/44Kk44OXXCdEZXBlbmRzT25cJ+OBruWumue+qeOBp+OBmeOAguOCguOBl+OCveODvOOCueWQjeOBiuOCiOOBs+OCv+ODvOOCsuODg+ODiOWQjeOBjOWQjOOBmOWApOOCkuWQq+OCk+OBp+OBhOOCi+WgtOWQiOOAgee1kOaenOOBruODquODs+OCr+OBr+mdnuebtOaOpeODquODs+OCr+OBq+OBquOCiuOAgeOBneOBhuOBp+OBquOBhOe1kOaenOOBr+ebtOaOpeODquODs+OCr+OBq+OBquOCiuOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn44Oq44Oz44Kv44O744K/44Kk44OXXCdJbmNsdWRlc1wn44Gu5a6a576p44Gn44GZ44CC44KC44GX44K944O844K55ZCN44GK44KI44Gz44K/44O844Ky44OD44OI5ZCN44GM5ZCM44GY5YCk44KS5ZCr44KT44Gn44GE44KL5aC05ZCI44CB57WQ5p6c44Gu44Oq44Oz44Kv44Gv6Z2e55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44CB44Gd44GG44Gn44Gq44GE57WQ5p6c44Gv55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ+ODquODs+OCr+ODu+OCv+OCpOODl1wnUmVsZXZhbnRUb1wn44Gu5a6a576p44Gn44GZ44CC44KC44GX44K944O844K55ZCN44GK44KI44Gz44K/44O844Ky44OD44OI5ZCN44GM5ZCM44GY5YCk44KS5ZCr44KT44Gn44GE44KL5aC05ZCI44CB57WQ5p6c44Gu44Oq44Oz44Kv44Gv6Z2e55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44CB44Gd44GG44Gn44Gq44GE57WQ5p6c44Gv55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0lUU00g44OG44Kt44K544OI44Ko44Oq44Ki5bmFJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bXNfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGlmIGtlcGFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdWZXJmw7xnYmFya2VpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnRGlodW5na2FuIGtlcGFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAnU3RhdHVzIHNlZGlhIGFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb3N0cmFzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnQmVyZ2FudHVuZyBrZXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1BlbmdndW5hIEFraGlyIFNlcnZpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdLZXNpbGFwYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ1Blbmd1cnVzYW4gSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdPcGVyYXNpIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0tlc2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnaW5zaWRlbiBrZWFkYWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnVGVybWFzdWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdTZWxhaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1NlYmFoYWdpYW4gZGFyaXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2playc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnTWFzYSBTZW1idWhhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ0JlcmthaXRhbiBrZXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnTWVsYXBvcmthbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdEaXBlcmx1a2FuIHVudHVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ2thZGFyIFJlc29sdXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdNYXNhIFRpbmRhayBiYWxhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdMaWhhdCBzZW11bGEgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdMaWhhdCBzZW11bGEgc2VydmlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ0thd2FzYW4tU2VydmlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnTGF0aWhhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2Frc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnVW5kZXJwaW5uaW5nIENvbnRyYWN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICdNZW5lbXBhdGthbiBzZW11bGEnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ0tyaXRpa2FsIDwtPiBLZXNhbiA8LT4gS2V1dGFtYWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICdNZW5ndXJ1c2thbiBoYXNpbCBrZXV0YW1hYW4ga3JpdGlrYWwgZ2FidW5nYW4gPC0+IEtlc2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQmVyaWthbiBrZXV0YW1hYW4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNYXNhIG1pbmltYSBhbnRhcmEgaW5jaWRlbnQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0aWthbCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnU0xBLUluZm9ybWFzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdLYWxpIHRlcmFraGlyIGRpdWJhaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdLYWxpIHRlcmFraGlyIGRpdWJhaCBzZW1hc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1BlcmtoaWRtYXRhbiBCZXJzZWt1dHUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYXNpIFNlcnZpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnS2VqYWRpYW4ga2VhZGFhbiBzZW1hc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xBIEJlcnNla3V0dSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnSW5zaWRlbiBzdGF0dXMgc2VtYXNhJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJ0tlZHVhLWR1YW55YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdGcm9udGVuZCBwZW5kYWZ0YXJhbiBtb2R1bCB1bnR1ayBrb25maWd1cmFzaSBBZG1pbklUU01DSVBBbGxvY2F0ZSBkaSBrYXdhc2FuIGFkbWluLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgcGVuZGFmdGFyYW4gbW9kdWwgYmFnaSBvYmplayBBZ2VudElUU01TTEEgZGFsYW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgcGVuZGFmdGFyYW4gbW9kdWwgdW50dWsgb2JqZWsgQWdlbnRJVFNNU0xBUHJpbnQgZGFsYW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBwZW5kYWZ0YXJhbiBtb2R1bCB1bnR1ayBvYmplayBBZ2VudElUU01TTEFab29tIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgcGVuZGFmdGFyYW4gbW9kdWwgYmFnaSBvYmplayBBZ2VudElUU01TZXJ2aWNlIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBwZW5kYWZ0YXJhbiBtb2R1bCB1bnR1ayBvYmplayBBZ2VudElUU01TZXJ2aWNlUHJpbnQgZGFsYW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgcGVuZGFmdGFyYW4gbW9kdWwgdW50dWsgb2JqZWsgQWdlbnRJVFNNU2VydmljZVpvb20gZGFsYW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAndGluamF1YW4ga2VzZWx1cnVoYW4gSVRTTSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJ1RpbmphdWFuIFNlcnZpcyBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnaW5zaWRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnSmVuaXMgS2VhZGFhbiBLZWphZGlhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJ0plbmlzIEtlYWRhYW4gS2VqYWRpYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnTWVuZ3VydXMgbWF0cmlrcyBrZXV0YW1hYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVudW5qdWtrYW4ga2VtYmFsaSBwYXV0YW4gZGFsYW0gbWVudSBwZXJraGlkbWF0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICdNb2R1bCB1bnR1ayBtZW51bmp1a2thbiBrZW1iYWxpIHBhdXRhbiBkYWxhbSBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVudW5qdWtrYW4gcGF1dGFuIGNldGFrIGRhbGFtIG1lbnUgcGVya2hpZG1hdGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ01vZHVsIHVudHVrIG1lbnVuanVra2FuIHBhdXRhbiBjZXRhayBkYWxhbSBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVudW5qdWtrYW4gcGF1dGFuIHBhdXRhbiBkYWxhbSBtZW51IHBlcmtoaWRtYXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdvcGVyYXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXJhbWV0ZXIgdW50dWsga2VhZGFhbiBpbnNpZGVuIG1lbWFuZGFuZ2thbiBrZXV0YW1hYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICdDZXRha2FuIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnWnVtIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICdDZXRha2FuIFNlcnZpcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ1p1bSBTZXJ2aXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIFNDUklQVCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ01lbmV0YXBrYW4gamVuaXMgZGFuIGFyYWggcGF1dGFuIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbmdpcmEga2VhZGFhbiBpbnNpZGVuLiBLdW5jaW55YSBhZGFsYWggbmFtYSBqZW5pcyBsaW5rIChzZWJhZ2FpbWFuYSBkaXRha3JpZmthbiBkYWxhbSBQYXV0YW5PYmplazo6SmVuaXMpICwgZGFuIG5pbGFpIGFkYWxhaCBhcmFoIEplbmlzUGF1dGFuSW5zaWRlbiB5YW5nIHBlcmx1IGRpaWt1dGkgdW50dWsgbWVuZ2lyYSBrZWFkYWFuIGluc2lkZW4gaXR1LiBTZWJhZ2FpIGNvbnRvaCBqaWthIEplbmlzUGF1dGFuSW5zaWRlbiBkaXRldGFwa2FuIGtlcGFkYSBcJyBCZXJnYW50dW5nIEtlcGFkYSBcJywgZGFuIEFyYWggYWRhbGFoIFwnIFN1bWJlclwnICwgaGFueWEgXCcgQmVyZ2FudHVuZyBLZXBhZGEgXCcgcGF1dGFuIGFrYW4gZGlpa3V0aSAoZGFuIGJ1a2FuIHBhdXRhbiBiZXJ0ZW50YW5nYW4gXCcgWWFuZyBkaXBlcmx1a2FuIHVudHVrXCcgKSB1bnR1ayBtZW5naXJhIGtlYWRhYW4gaW5zaWRlbi4gQW5kYSBib2xlaCBtZW5hbWJhaCBsZWJpaCBiYW55YWsgYXJhaGFuIGplbmlzIHBhdXRhbiB5YW5nIGFuZGEgc3VrYSwgY29udG9obnlhIFwnIFRlcm1hc3VrXCcgZGVuZ2FuIGFyYWggXCcgU2FzYXJhbiBcJy4gU2VtdWEgamVuaXMgcGF1dGFuIHlhbmcgZGl0YWtyaWZrYW4gZGFsYW0gcGlsaWhhbiBrb25maWdzaXMgUGF1dGFuT2JqZWs6OkplbmlzIGFkYWxhaCBtdW5na2luIGRhbiBhcmFobnlhIG11bmdraW4gXCcgU3VtYmVyIFwnLCBcJyBTYXNhcmFuIFwnLCBhdGF1IFwnIEtlZHVhLWR1YVwnIC4gUEVOVElORzogU0VMRVBBUyBBTkRBIE1FTUJVQVQgUEVSVUJBSEFOIEtFUEFEQSBURVRBUEFOIEtPTkZJR1NJUyBBTkRBIFBFUkxVIE1FTkpBTEFOS0FOIFNLUklQIGJpbiAvIG90cnMuSVRTTUtvbmZpZ3VyYXNpS2lyYWFuc2VtdWxhS2VhZGFhbkluc2lkZW5JdGVtLnBsIFNVUEFZQSBTRU1VQSBLRUFEQUFOIElOU0lERU4gYWthbiBkaWtpcmEgc2VtdWxhIEJFUkRBU0FSS0FOIFRFVEFQQU4gQkFSVSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdVYmFoIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnVGlrZXQgXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdOb3JtYWxcJyAgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ0ZBUVwnIG9iamVrIG1lbmdndW5ha2FuIFwnTm9ybWFsXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnRkFRXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdJYnUgQmFwYSBBbmFrIEFuYWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ0ZBUVwnIG9iamVrIG1lbmdndW5ha2FuIFwnUmVsZXZhbiBVbnR1a1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1BlcmtoaWRtYXRhblwnIG9iamVrIG1lbmdndW5ha2FuIFwnQWx0ZXJuYXRpdmVUb1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnUGVya2hpZG1hdGFuXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdCZXJnYW50dW5nIFBhZGFcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1BlcmtoaWRtYXRhblwnIG9iamVrIG1lbmdndW5ha2FuIFwnUmVsZXZhbiBVbnR1a1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdUaWtldFwnIG9iamVrIG1lbmdndW5ha2FuIFwnQWx0ZXJuYXRpZiBVbnR1a1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1Rpa2V0IFwnIG9iamVrIG1lbmdndW5ha2FuIFwnQmVyZ2FudHVuZyBQYWRhXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1Rpa2V0XCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdSZWxldmFuIFVudHVrXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIGxhaW4gXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVrIG1lbmdndW5ha2FuIFwnQWx0ZXJuYXRpdmVUb1wnIHBhdXRhbiBqZW5pcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gbGFpbiBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdDb25uZWN0ZWRUb1wnIHBhdXRhbiBqZW5pcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIGxhaW4gXCdDb25maWdJdGVtIElUU01cJyBvYmplayBtZW5nZ3VuYWthbiBcJ0JlcmdhbnR1bmcgUGFkYVwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gbGFpbi1sYWluIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplayBtZW5nZ3VuYWthbiBcJ1Rlcm1hc3VrXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdJVFNNIENvbmZpZ0l0ZW1cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIG9iamVrIFwnQ29uZmlnSXRlbSBJVFNNXCdsYWluIHlhbmcgbWVuZ2d1bmFrYW4gXCdSZWxldmFuIFVudHVrXCcgeWFuZyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdQZXJpbnRhaCBLZXJqYSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdDb25maWdJdGVtIElUU01cJ29iamVrIG1lbmdndW5ha2FuIFwnQmVyZ2FudHVuZyBQYWRhXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnUGVyaW50YWggS2VyamEgSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdOb3JtYWxcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ1BlcmludGFoIEtlcmphIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1BlcmtoaWRtYXRhblwnIG9iamVrIG1lbmdndW5ha2FuIFwnQmVyZ2FudHVuZyBQYWRhXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdQZXJpbnRhaCBLZXJqYSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdQZXJraGlkbWF0YW4gXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdOb3JtYWwgXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ1BlcmludGFoIEtlcmphIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1Rpa2V0XCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdOb3JtYWxcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIG9iamVrIFwnUGVya2hpZG1hdGFuIFwnIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdGQVFcJyBvYmplayBtZW5nZ3VuYWthbiBcJ05vcm1hbFwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBvYmplayBcJ1BlcmtoaWRtYXRhbiBcJyBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnRkFRXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdJYnUgQmFwYSBLYW5hay1rYW5ha1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIG9iamVrIFwnUGVya2hpZG1hdGFuIFwnIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdGQVFcJyBvYmplayBtZW5nZ3VuYWthbiBcJ1JlbGV2YW4gVW50dWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBqZW5pcyBwYXV0YW4gXCdBbHRlcm5hdGl2ZVRvXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgc2FzYXJhbiBtZW5nYW5kdW5naSBuaWxhaSB5YW5nIHNhbWEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBidWthbiBzYXR1IGFyYWguIEppa2EgbmlsYWkgYmVyYmV6YSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIHBhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGplbmlzIHBhdXRhbiBcJ0Nvbm5lY3RlZFRvXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgc2FzYXJhbiBtZW5nYW5kdW5naSBuaWxhaSB5YW5nIHNhbWEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBidWthbiBzYXR1IGFyYWguIEppa2EgbmlsYWkgYmVyYmV6YSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIHBhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBqZW5pcyBwYXV0YW4gXCdCZXJnYW50dW5nIFBhZGFcJy4gSmlrYSBuYW1hIHN1bWJlciBkYW4gbmFtYSBzYXNhcmFuIG1lbmdhbmR1bmdpIG5pbGFpIHlhbmcgc2FtYSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIGJ1a2FuIHNhdHUgYXJhaC4gSmlrYSBuaWxhaSBiZXJiZXphLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggcGF1dGFuIGJlcmFyYWguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gamVuaXMgcGF1dGFuIFwnVGVybWFzdWtcJy4gSmlrYSBuYW1hIHN1bWJlciBkYW4gbmFtYSBzYXNhcmFuIG1lbmdhbmR1bmdpIG5pbGFpIHlhbmcgc2FtYSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIGJ1a2FuIHNhdHUgYXJhaC4gSmlrYSBuaWxhaSBiZXJiZXphLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggcGF1dGFuIGJlcmFyYWguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBqZW5pcyBwYXV0YW4gXCdSZWxldmFudFRvXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgc2FzYXJhbiBtZW5nYW5kdW5naSBuaWxhaSB5YW5nIHNhbWEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBidWthbiBzYXR1IGFyYWguIEppa2EgbmlsYWkgYmVyYmV6YSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIHBhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdMZWJhciBrYXdhc2FuIHRla3MgSVRTTS4nOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmJfTk9fSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2IHRpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdUaWxnamVuZ2VsaWdoZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0tvYmxldCB0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ07DpXbDpnJlbmRlIHRpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vbnN0cmFzam9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdBdmhlbmdlciBhdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnU2x1dHRicnVrZXItdGplbmVzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRmVpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdGcm9udGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVQtbGVkZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lULWRyaWZ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ09tZmFuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0hlbmRlbHNlc3RpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnSW5rbHVkZXJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0FuZHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdEZWwgYXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb3NqZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdHamVub3BwcmV0bmluZ3N0aWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdSZWxldmFudCBmb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmFwcG9ydGVyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1DDpWtyZXZkIGZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdPcHByZXR0aW5nc3JhdGlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdSZXNwb25zdGlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQS1vdmVyc2lrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnVGplbmVzdGUtb3ZlcnNpa3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnVGplbmVzdGVvbXLDpWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnVHJlbmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2Frc2pvbmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ1VuZGVybGlnZ2VuZGUga29udHJha3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ3RpbGRlbGluZyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAnS3JpdGlrYWxpdGV0IDwtPiBPbWZhbmcgPC0+IFByaW9yaXRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnQWRtaW5pc3RyZXIgcHJpb3JpdGV0c3Jlc3VsdGF0IHZlZCDDpSBrb21iaW5lcmUgS3JpdGlrYWxpdGV0IDwtPiBPbWZhbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1RpbGRlbGluZyBhdiBwcmlvcml0ZXQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNaW5pbXVtc3RpZCBtZWxsb20gSGVuZGVsc2VyJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnS3JpdGlrYWxpdGV0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hc2pvbiBvbSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnU2lzdCBlbmRyZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnU2lzdCBlbmRyZXQgYXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1RpbGtueXR0ZWRlIHRqZW5lc3Rlcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hc2pvbiBvbSBUamVuZXN0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnVGlsc3RhbmQgcMOlIG7DpXbDpnJlbmRlIGhlbmRlbHNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1RpbGtueXR0ZWRlIFNMQWVyJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdUaWxzdGFuZCBww6UgbsOldsOmcmVuZGUgaGVuZGVsc2UnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJlcmluZyBhdiBmcm9udGVuZC1tb2R1bCBmb3Iga29uZmlndXJhc2pvbiBhdiBBZG1pbklUU01DSVBBbGxvY2F0ZSBpIGFkbWluLW9tcsOlZGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kLW1vZHVsIGZvciBBZ2VudElUU01TTEEtb2JqZWt0ZXQgaSBzYWtzYmVoYW5kbGVyLWRlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJlcmluZyBhdiBmcm9udGVuZC1tb2R1bCBmb3IgQWdlbnRJVFNNU0xBUHJpbnQtb2JqZWt0ZXQgaSBzYWtzYmVoYW5kbGVyLWRlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kLW1vZHVsIGZvciBBZ2VudElUU01TTEFab29tLW9iamVrdGV0IGkgc2Frc2JlaGFuZGxlci1kZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJlcmluZyBhdiBmcm9udGVuZC1tb2R1bCBmb3IgQWdlbnRJVFNNU2VydmljZS1vYmpla3RldCBpIHNha3NiZWhhbmRsZXItZGVsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJlcmluZyBhdiBmcm9udGVuZC1tb2R1bCBmb3IgQWdlbnRJVFNNU2VydmljZVByaW50LW9iamVrdGV0IGkgc2Frc2JlaGFuZGxlci1kZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyZXJpbmcgYXYgZnJvbnRlbmQtbW9kdWwgZm9yIEFnZW50SVRTTVNlcnZpY2Vab29tLW9iamVrdGV0IGkgc2Frc2JlaGFuZGxlci1kZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnQWRtaW5pc3Ryw6lyIHByaW9yaXRldHNtYXRyaXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIHRpbGJha2UtbGVua2VuIGkgdGplbmVzdGVtZW55ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ01vZHVsIHNvbSB2aXNlciB0aWxiYWtlLWxlbmtlbiBpIFNMQS1tZW55ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIHNrcml2LXV0LWxlbmtlbiBpIHRqZW5lc3RlbWVueWVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIHNrcml2LXV0LWxlbmtlbiBpIFNMQS1tZW55ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIGxlbmtlLWxlbmtlbiBpIHRqZW5lc3RlLW1lbnllbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhdGl2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXJhbWV0cmUgZm9yIGhlbmRlbHNlc3RpbHN0YW5kZXIgaSB2YWxndmlzbmluZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnQnJlZGRlIHDDpSBJVFNNIHNpbmUgdGVrc3RvbXLDpWRlci4nOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmxfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGllZiB2b29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Jlc2NoaWtiYWFyaGVpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnVmVyYm9uZGVuIG1ldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAnSHVpZGlnZSBzdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9uc3RyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0FmaGFua2VsaWprIHZhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnRWluZGdlYnJ1aWtlciBzZXJ2aWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0ZvdXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdGcm9udGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVQgTWFuYWdlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lUIE9wZXJhdGlvbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnSW1wYWN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnSW5jaWRlbnQgc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnQmV2YXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdPdmVyaWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ09uZGVyZGVlbCB2YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2plY3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ0hlcnN0ZWx0aWpkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnVmFuIGJlbGFuZyB2b29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JhcHBvcnRhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnQmVub2RpZ2Qgdm9vcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdPcGxvc3RpamQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1Jlc3BvbnNpZXRpamQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xBLW92ZXJ6aWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnU2VydmljZS1vdmVyemljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnU2VydmljZS1BcmVhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnVHJhaW5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNhY3RpZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnVW5kZXJwaW5uaW5nIENvbnRyYWN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICd0b2VrZW5uZW4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ1VyZ2VudGllIDwtPiBJbXBhY3QgPC0+IFByaW9yaXRlaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnUHJpb3JpdGVpdCB0b2VrZW5uZW4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNaW5pbXVtdGlqZCB0dXNzZW4gaW5jaWRlbnRlbic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ1VyZ2VudGllJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEEgSW5mb3JtYXRpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdMYWF0c3QgYWFuZ2VwYXN0IG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ0xhYXRzdCBhYW5nZXBhc3QgZG9vcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnQmlqYmVob3JlbmRlIFNlcnZpY2VzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ1NlcnZpY2UgSW5mb3JtYXRpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnSHVpZGlnZSBpbmNpZGVudC1zdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnQmlqYmVob3JlbmRlIFNMQXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0h1aWRpZ2UgaW5jaWRlbnQgc3RhdHVzJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnQmVoZWVyIHByaW9yaXRlaXRlbi1tYXRyaXgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3BlcmF0aW9uZWVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cGxfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdHl3YSBkbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnRG9zdMSZcG5vxZvEhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ1phcGxlY3plJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ1BvxYLEhWN6b25lIHonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ0JpZcW8xIVjeSBTdGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vbnN0cmFjamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ1phbGXFvG5lIG9kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdVc8WCdWdhIFXFvHl0a293bmlrYSBLb8WEY293ZWdvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0LFgsSZZHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lUIHphcnrEhWR6YW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lUIG9wZXJhY3lqbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnV3DFgnl3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnU3RhbiB6ZGFyemVuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdaYXdpZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnSW5uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnQ3rEmcWbxIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2pla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ0N6YXMgb2R6eXNrYW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ09kcG93aWVkbmllIGRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JhcG9ydG93YW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdQb3RyemVibmUgZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnQ3phcyByb3p3acSFemFuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ0N6YXMgb2Rwb3dpZWR6aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdQcnplZ2zEhWQgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdQcnplZ2zEhWQgdXPFgnVnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1Nla2NqYSBzZXJ3aXNvd2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhaW5pbmcnfSA9ICdUcmVuaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWtjamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnUG9kc3Rhd3kgVW1vd3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ2Fsb2thY2phJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLcnl0eWN6bm/Fm8SHIDwtPiBXcMWCeXcgPC0+IFByaW9yeXRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnWmFyesSFZHphbmllIHdhcnRvxZtjacSFIHByaW9yeXRldHUgZGxhIGtvbWJpbmFjamkgS3J5dHljem5vxZvEhyA8LT4gV3DFgnl3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQWxva2FjamEgcHJpb3J5dGV0dSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ01pbmltYWxueSBjemFzIG1pxJlkenkgemRhcnplbmlhbWknOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcnl0eWN6bm/Fm8SHJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2plIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdPc3RhdG5pYSB6bWlhbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnT3N0YXRuaW8gem1pZW5pb25lIHByemV6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdQb8WCxIVjem9uZSB1c8WCdWdpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjamUgbyB1c8WCdWR6ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnQWt0dWFsbnkgc3RhbiBpbmN5ZGVudHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnUG/FgsSFY3pvbmUgU0xBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdBa3R1YWxueSBzdGFuIGluY3lkZW50dSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnWmRhcnplbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdaYXJ6xIVkemFqIG1hY2llcnrEhSBwcmlvcnl0ZXTDs3cuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdcWCIHBva2F6eXdhbmlhIGxpbmt1IHBvd3JvdHUgdyBtZW51IHNlcndpc293eW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICdNb2R1xYIgcG9rYXp5d2FuaWEgbGlua3UgcG93cm90dSB3IG1lbnUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1xYIgcG9rYXp5d2FuaWEgbGlua3UgZHJ1a293YW5pYSB3IG1lbnUgc2Vyd2lzb3d5bS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICdNb2R1xYIgcG9rYXp5d2FuaWEgbGlua3UgZHJ1a293YW5pYSB3IG1lbnUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1xYIgcG9rYXp5d2FuaWEgbGlua3UgdyBtZW51IHNlcndpc293eW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3BlcmFjeWpueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyYW1ldHJ5IGRsYSBzdGFuw7N3IHpkYXJ6ZcWEIHcgd2lkb2t1IHByZWZlcmVuY2ppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIFNDUklQVCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ1N6ZXJva2/Fm8SHIG9ic3phcsOzdyB0ZWtzdG93eWNoIElUU00uJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cHRfQlJfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2YSBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rpc3BvbmliaWxpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2sgRW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0NvbmVjdGFkbyBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICdFc3RhZG8gQXR1YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9uc3RyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdEZXBlbmRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdTZXJ2acOnbyBhIFVzdcOhcmlvIEZpbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0Vycm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250IEVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnR2VyZW5jaWFtZW50byBkZSBUSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ09wZXJhw6fDtWVzIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGFjdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGUgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnSW5jbHVpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnT3V0cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1BhcnRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdUZW1wbyBkZSBSZWN1cGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnRlIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmVsYXTDs3Jpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdSZXF1aXNpdGFkbyBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnVGF4YSBkZSBSZXNvbHXDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVGVtcG8gZGUgUmVzcG9zdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnVmlzw6NvIEdlcmFsIGRlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnVmlzw6NvIEdlcmFsIGRlIFNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ8OBcmVhIFNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnVHJlaW5hbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNhw6fDtWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ0NvbnRyYXRvIGNvbSBUZXJjZWlyb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ2F0cmlidWnDp8Ojbyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAnQ3JpdGljYWxpZGFkZSA8LT4gSW1wYWN0byA8LT4gUHJpb3JpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnR2VyZW5jaWFyIGEgcHJpb3JpZGFkZSByZXN1bHRhbnRlIGRhIGNvbWJpbmHDp8OjbyBDcml0aWNhbGlkYWRlIDwtPiBJbXBhY3RvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQXRyaWJ1acOnw6NvIGRlIHByaW9yaWRhZGUnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdUZW1wbyBNw61uaW1vIGVudHJlIEluY2lkZW50ZXMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdDcml0aWNhbGlkYWRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hw6fDo28gZGUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ8OabHRpbWEgYWx0ZXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnw5psdGltYSBhbHRlcmHDp8OjbyBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1NlcnZpw6dvcyBBc3NvY2lhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWHDp8OjbyBkZSBzZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnRXN0YWRvIEF0dWFsIGRlIEluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdTTEFzIEFzc29jaWFkb3MnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBdHVhbCBkZSBJbmNpZGVudGUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAnQW1ib3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIEFkbWluSVRTTUNJUEFsbG9jYXRlIG5hIMOhcmVhIGFkbWluaXN0cmF0aXZhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TTEEgbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TTEFQcmludCBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU0xBWm9vbSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU2VydmljZSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TZXJ2aWNlUHJpbnQgbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TZXJ2aWNlWm9vbSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICdWaXPDo28gR2VyYWwgZGUgU0xBIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdWaXPDo28gR2VyYWwgZGUgU2VydmnDp28gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ1RpcG8gZGUgRXN0YWRvIGRlIEluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJ1RpcG8gZGUgRXN0YWRvIGRlIEluY2lkZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdHZXJlbmNpYXIgbWF0cml6IGRlIHByaW9yaWRhZGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIHZvbHRhciBubyBtZW51IHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIHZvbHRhciBubyBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIGltcHJpbWlyIG5vIG1lbnUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIGltcHJpbWlyIG5vIG1lbnUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGxpbmsgYXNzb2NpYXIgbm8gbWVudSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYWNpb25hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyw6JtZXRyb3MgcGFyYSBvcyBlc3RhZG9zIGRlIGluY2lkZW50ZSBuYSB2aXPDo28gZGUgcHJlZmVyw6puY2lhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ0ltcHJpbWlyIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnRGV0YWxoZXMgZG8gU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ2ltcHJpbWlyIFNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnRGV0YWxoZSBkbyBTZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnQ29uZmlndXJhIG8gdGlwbyBlIGEgZGlyZcOnw6NvIGRlIGxpbmtzIHVzYWRvcyBwYXJhIGNhbGN1bGFyIG8gZXN0YWRvIGRlIGluY2lkZW50ZS4gQSBjaGF2ZSDDqSBvIG5vbWUgZG8gdGlwbyBkZSBsaW5rIChjb21vIGRlZmluaWRvIGVtIExpbmtPYmplY3Q6OlR5cGUpIGUgbyB2YWxvciDDqSBhIGRpcmXDp8OjbyBkbyBJbmNpZGVudExpbmtUeXBlIHF1ZSBkZXZlIHNlciBzZWd1aWRvIHBhcmEgY2FsY3VsYXIgbyBlc3RhZG8gZGUgaW5jaWRlbnRlLiBQb3IgZXhlbXBsbywgc2UgbyBJbmNpZGVudExpbmtUeXBlIMOpIGNvbmZpZ3VyYWRvIHBhcmEgXCdEZXBlbmRlIGRlXCcgZSBhIERpcmXDp8OjbyDDqSBcJ09yaWdlbVwnLCBhcGVuYXMgbGlua3MgXCdEZXBlbmRlIGRlXCcgc2Vyw6NvIHNlZ3VpZG9zIChlIG7Do28gbyBsaW5rIG9wb3N0byBcJ1JlcXVlcmlkbyBwb3JcJykgcGFyYSBjYWxjdWxhciBvIGVzdGFkbyBkZSBpbmNpZGVudGUuIFZvY8OqIHBvZGUgYWRpY2lvbmFyIG1haXMgZGUgdW0gdGlwbyBkZSBsaW5rIGUgZGlyZcOnw7Vlcy4gRXguIFwnSW5jbHVpXCcgY29tIGEgZGlyZcOnw6NvIFwnRGVzdGlub1wnLiBUb2RvcyBvcyB0aXBvcyBkZSBsaW5rcyBkZWZpbmlkb3MgbmFzIG9ww6fDtWVzIExpbmtPYmplY3Q6OlR5cGUgZG8gc3lzY29uZmlnIHPDo28gcG9zc8OtdmVpcyBlIGEgZGlyZcOnw6NvIHBvZGUgc2VyIFwnT3JpZ2VtXCcsIFwnRGVzdGlub1wnIG91IFwnQW1ib3NcJy4gSU1QT1JUQU5URTogQVDDk1MgVk9Dw4ogRkFaRVIgTVVEQU7Dh0FTIE5FU1RBIE9Qw4fDg08gU1lTQ09ORklHLCDDiSBORUNFU1PDgVJJTyBFWEVDVVRBUiBPIFNDUklQVCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBERSBGT1JNQSBRVUUgVE9ET1MgT1MgRVNUQURPUyBERSBJTkNJREVOVEVTIFNFSkFNIFJFQ0FMQ1VMQURPUyBDT00gQkFTRSBOQVMgTk9WQVMgQ09ORklHVVJBw4fDlUVTISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ011ZGFuw6dhSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0NoYW1hZG9cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ1BhaUZpbGhvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUmVsZXZhbnRlIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdBbHRlcm5hdGl2YSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUmVsZXZhbnRlIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnQ2hhbWFkb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0NoYW1hZG9cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnQ2hhbWFkb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUmVsZXZhbnRlIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG91dHJvcyBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0FsdGVybmF0aXZhIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdDb25lY3RhZG8gYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnSW5jbHVpXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdSZWxldmFudGUgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnRGVwZW5kZSBkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ09yZGVtU2VydmnDp29JVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdDaGFtYWRvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdTZXJ2acOnb1wnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdTZXJ2acOnb1wnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUGFpRmlsaG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnU2VydmnDp29cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ1JlbGV2YW50ZSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnQWx0ZXJuYXRpdmEgYVwnLiBTZSBvIG5vbWUgZGEgZm9udGUgZSBvIG5vbWUgZG8gYWx2byBjb250w6ptIG8gbWVzbW8gdmFsb3IsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ0NvbmVjdGFkbyBhXCcuIFNlIG8gbm9tZSBkYSBmb250ZSBlIG8gbm9tZSBkbyBhbHZvIGNvbnTDqm0gbyBtZXNtbyB2YWxvciwgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ0RlcGVuZGUgZGVcJy4gU2UgbyBub21lIGRhIGZvbnRlIGUgbyBub21lIGRvIGFsdm8gY29udMOqbSBvIG1lc21vIHZhbG9yLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdJbmNsdWlcJy4gU2UgbyBub21lIGRhIGZvbnRlIGUgbyBub21lIGRvIGFsdm8gY29udMOqbSBvIG1lc21vIHZhbG9yLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ1JlbGV2YW50ZSBhXCcuIFNlIG8gbm9tZSBkYSBmb250ZSBlIG8gbm9tZSBkbyBhbHZvIGNvbnTDqm0gbyBtZXNtbyB2YWxvciwgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTsO6bWVybyBkZSBjYXJhY3RlcmVzIHBvciBsaW5oYSBlbSDDoXJlYXMgZGUgdGV4dG8gSVRTTS4nOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cHRfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2YSBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rpc3BvbmliaWxBbnRpZ3VpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2sgRW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0xpZ2FkbyBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICdFc3RhZG8gQXR1YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9uc3RyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdEZXBlbmRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdTZXJ2acOnbyBhIHV0aWxpemFkb3IgZmluYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnQgRW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdHZXN0w6NvIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnT3BlcmHDp8O1ZXMgZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnSW1wYWN0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkZSBJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdJbmNsdWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdPdXRybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnUGFydGUgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2pldG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1RlbXBvIGRlIFJlY3VwZXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdSZWxldmFudGUgcGFyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSZWxhdMOzcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JlcXVpc2l0YWRvIHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdUYXhhIGRlIFJlc29sdcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdUZW1wbyBkZSBSZXNwb3N0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdWaXPDo28gR2VyYWwgZGUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdWaXPDo28gR2VyYWwgZGUgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnw4FyZWEgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhaW5pbmcnfSA9ICdGb3JtYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYcOnw7Vlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdDb250cmF0byBjb20gVGVyY2Vpcm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICdhdHJpYnVpw6fDo28nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ0NyaXRpY2lkYWRlIDwtPiBJbXBhY3RvIDwtPiBQcmlvcmlkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICdHZXJpciBhIFByaW9yaWRhZGUgcmVzdWx0YW50ZSBkYSBjb21iaW5hw6fDo28gQ3JpdGljaWRhZGUgPC0+IEltcGFjdG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBdHJpYnVpw6fDo28gZGUgUHJpb3JpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ1RlbXBvIE3DrW5pbW8gZW50cmUgSW5jaWRlbnRlcyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0NyaXRpY2lkYWRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hw6fDo28gZGUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ8OabHRpbWEgYWx0ZXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnw5psdGltYSBhbHRlcmHDp8OjbyBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1NlcnZpw6dvcyBBc3NvY2lhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWHDp8OjbyBkZSBzZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnRXN0YWRvIEF0dWFsIGRlIEluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdTTEFzIEFzc29jaWFkb3MnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBdHVhbCBkZSBJbmNpZGVudGUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdG8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIEFkbWluSVRTTUNJUEFsbG9jYXRlIG5hIMOhcmVhIGRlIGdlc3TDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU0xBIHBhcmEgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU0xBUHJpbnQgcGFyYSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0byBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNMQVpvb20gcGFyYSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0byBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNlcnZpY2UgcGFyYSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU2VydmljZVByaW50IHBhcmEgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU2VydmljZVpvb20gcGFyYSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdHZXJpciBhIG1hdHJpeiBkZSBQcmlvcmlkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIHZvbHRhciBubyBtZW51IHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIHZvbHRhciBubyBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIGltcHJpbWlyIG5vIG1lbnUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIGltcHJpbWlyIG5vIG1lbnUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGxpbmsgYXNzb2NpYXIgbm8gbWVudSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYXRpdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcsOibWV0cm9zIHBhcmEgb3MgZXN0YWRvcyBkZSBpbmNpZGVudGUgbmFzIHByZWZlcsOqbmNpYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnRGVmaW5hIG8gdGlwbyBlIG9yZGVtIGRhcyBsaWdhw6fDtWVzIGEgc2VyZW0gdXRpbGl6YWRvcyBwYXJhIGNhbGN1bGFyIG8gZXN0YWRvIGRlIGluY2lkZW50ZS4gQSBjaGF2ZSDDqSBvIG5vbWUgZG8gdGlwbyBkZSBsaW5rICggY29tbyBkZWZpbmlkbyBlbSBMaW5rT2JqZWN0OjpUeXBlKSwgZSBvIHZhbG9yIMOpIGEgb3JkZW0gZG8gSW5jaWRlbnRMaW5rVHlwZSBxdWUgZGV2ZSBzZXIgc2VndWlkYSBwYXJhIGNhbGN1bGFyIG8gZXN0YWRvIGRvIGluY2lkZW50ZS4gUG9yIGV4ZW1wbG8sIHNlIG8gSW5jaWRlbnRMaW5rVHlwZSBlc3TDoSBkZWZpbmlkbyBjb21vIFwnRGVwZW5kc09uXCcsIGUgYSBvcmRlbSDDqSBcJ1NvdXJjZVwnLCBhcGVuYXMgbGlnYcOnw7VlcyBcJ0RlcGVuZHNPblwnIHNlcsOjbyBjb25zaWRlcmFkYXMgKGUgbsOjbyBhIGxpZ2HDp8OjbyBvcG9zdGEgXCdSZXF1aXJlZCBmb3JcJykgcGFyYSBjYWxjdWxhciBvIGVzdGFkbyBkbyBpbmNpZGVudGUuClBvZGUgYWRpY2lvbmFyIG1haXMgdGlwb3MgZGUgbGlnYcOnw6NvIGUgb3JkZW5zIGRlc3RhIGNvbW8gcHJlZmVyaXIsIGV4ZW1wbG86IFwnSW5jbHVkZXNcJyBjb20gYSBvcmRlbSBcJ1RhcmdldFwnLiBUb2RvcyBvcyB0aXBvcyBkZSBsaWdhw6fDo28gZGVmaW5pZG9zIG5hIG9ww6fDo28gTGlua2tPYmplY3Q6OlR5cGUgbm8gc3lzY29uZmlnIHBvZGVtIHNlciB1dGlsaXphZGFzIGUgYSBzdWEgb3JkZW0gcG9kZSBzZXIgXCdTb3VyY2VcJyBcJ1RhcmdldFwnIG91IFwnQm90aFwnLiBJTVBPUlRBTlRFOiBBUMOTUyBFRkVDVFVBUiBBTFRFUkHDh8OVRVMgw4BTIE9Qw4fDlUVTIERPIFNZU0NPTkZJRyDDiSBORUNFU1NBUklPIEVYRUNVVEFSIE8gU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFBBUkEgUkVDQUxDVUxBUiBUT0RPUyBPUyBFU1RBRE9TIERFIElOQ0lERU5URVMgQ09NIEJBU0UgTkFTIE5PVkFTIERFRklOScOHw5VFUy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdNdWRhbsOnYUlUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdUaWNrZXRcJyBjb20gbGlnYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ1BhaUZpbGhvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIGNvbSBsaWdhw6fDo28gXCdSZWxldmFudGUgcGFyYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyBjb20gbGlnYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIGNvbSBsaWdhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIGNvbSBsaWdhw6fDo28gXCdSZWxldmFudGUgcGFyYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdUaWNrZXRcJyBjb20gbGlnYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1RpY2tldFwnIGNvbSBsaWdhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1RpY2tldFwnIGNvbSBsaWdhw6fDo28gXCdSZWxldmFudGUgcGFyYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdBbHRlcm5hdGl2YSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdMaWdhZG8gYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgY29tIGxpZ2HDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgY29tIGxpZ2HDp8OjbyBcJ0luY2x1aVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdSZWxldmFudGUgcGFyYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgY29tIGxpZ2HDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgY29tIGxpZ2HDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1RpY2tldFwnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdTZXJ2acOnb1wnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ1NlcnZpw6dvXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ1BhaUZpbGhvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ1NlcnZpw6dvXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ1JlbGV2YW50ZSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnQWx0ZXJuYXRpdmEgYVwnLiBTZSBvIG5vbWUgZGEgb3JpZ2VtIGUgbyBub21lIGRlIGRlc3Rpbm8gc8OjbyBpZ3VhaXMsIGEgYXNzb2NpYcOnw6NvIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnTGlnYWRvIGFcJy4gU2UgbyBub21lIGRhIG9yaWdlbSBlIG8gbm9tZSBkZSBkZXN0aW5vIHPDo28gaWd1YWlzLCBhIGFzc29jaWHDp8OjbyDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdEZXBlbmRlIGRlXCcuIFNlIG8gbm9tZSBkYSBvcmlnZW0gZSBvIG5vbWUgZGUgZGVzdGlubyBzw6NvIGlndWFpcywgYSBhc3NvY2lhw6fDo28gw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdJbmNsdWlcJy4gU2UgbyBub21lIGRhIG9yaWdlbSBlIG8gbm9tZSBkZSBkZXN0aW5vIHPDo28gaWd1YWlzLCBhIGFzc29jaWHDp8OjbyDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnUmVsZXZhbnRlIGFcJy4gU2UgbyBub21lIGRhIG9yaWdlbSBlIG8gbm9tZSBkZSBkZXN0aW5vIHPDo28gaWd1YWlzLCBhIGFzc29jaWHDp8OjbyDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ07Dum1lcm8gZGUgY2FyYWN0ZXJlcyBwb3IgbGluaGEgZW0gw6FyZWFzIGRlIHRleHRvIElUU00uJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cnVfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICfQl9Cw0LzQtdC90LAg0LTQu9GPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ9CU0L7RgdGC0YPQv9C90L7RgdGC0YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICfQodC10YDQstC10YDQvdCw0Y8g0YfQsNGB0YLRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfQodCy0Y/Qt9Cw0L0g0YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ9Ci0LXQutGD0YnQtdC1INGB0L7RgdGC0L7Rj9C90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAn0JTQtdC80L7QvdGB0YLRgNCw0YbQuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICfQl9Cw0LLQuNGB0LjRgiDQvtGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICfQmtC+0L3QtdGH0L3Ri9C5INGB0LXRgNCy0LjRgSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAn0J7RiNC40LHQutC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ9CY0L3RgtC10YDRhNC10LnRgdC90LDRjyDRh9Cw0YHRgtGMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDQmNCiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAn0K3QutGB0L/Qu9GD0LDRgtCw0YbQuNGPINCY0KInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAn0JLQu9C40Y/QvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICfQodC+0YHRgtC+0Y/QvdC40LUg0LjQvdGG0LjQtNC10L3RgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAn0JLQutC70Y7Rh9Cw0LXRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ9CU0YDRg9Cz0L7QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAn0KfQsNGB0YLRjCDQvtGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICfQn9C70LDQvdC40YDQvtCy0LDQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ9CS0YDQtdC80Y8g0LLQvtGB0YHRgtCw0L3QvtCy0LvQtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ9Ce0YLQvdC+0YHQuNGC0YHRjyDQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICfQodC+0YHRgtCw0LLQu9C10L3QuNC1INC+0YLRh9C10YLQvtCyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ9Ci0YDQtdCx0YPQtdGC0YHRjyDQtNC70Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAn0J7RgtC90L7RgdC40YLQtdC70YzQvdCw0Y8g0YHQutC+0YDQvtGB0YLRjCDRgNC10YjQtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAn0JLRgNC10LzRjyDRgNC10LDQutGG0LjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICfQodC/0LjRgdC+0LogU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICfQodC/0LjRgdC+0Log0YHQtdGA0LLQuNGB0L7Qsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfQntCx0LfQvtGAINGB0LXRgNCy0LjRgdC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhaW5pbmcnfSA9ICfQntCx0YPRh9C10L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ9Ck0LjQvdCw0L3RgdC+0LLRi9C1INC+0L/QtdGA0LDRhtC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAn0JrQvtC90YLRgNCw0LrRgiDQv9C+0LTQtNC10YDQttC60LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ9Cd0LDQt9C90LDRh9C10L3QuNC1INC/0YDQuNC+0YDQuNGC0LXRgtC+0LIgJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICfQmtGA0LjRgtC40YfQvdC+0YHRgtGMIDwtPiDQktC70LjRj9C90LjQtSA8LT4g0J/RgNC40L7RgNC40YLQtdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICfQmNC30LzQtdC90LXQvdC40LUg0YLQsNCx0LvQuNGG0Ysg0YDQsNGB0YfQtdGC0LAg0L/RgNC40L7RgNC40YLQtdGC0LAg0LIg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINC60L7QvNCx0LjQvdCw0YbQuNC4INCa0YDQuNGC0LjRh9C90L7RgdGC0YwgPC0+INCS0LvQuNGP0L3QuNC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAn0J3QsNC30L3QsNGH0LXQvdC40LUg0L/RgNC40L7RgNC40YLQtdGC0LAnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICfQnNC40L3QuNC80LDQu9GM0L3QvtC1INCy0YDQtdC80Y8g0LzQtdC20LTRgyDQuNC90YbQuNC00LXQvdGC0LDQvNC4JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn0JrRgNC40YLQuNGH0L3QvtGB0YLRjCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAn0JjQvdGE0L7RgNC80LDRhtC40Y8g0L7QsSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn0JTQsNGC0LAg0LjQt9C80LXQvdC10L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ9Ca0LXQvCDQuNC30LzQtdC90LXQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICfQodCy0Y/Qt9Cw0L3QvdGL0LUg0YHQtdGA0LLQuNGB0YsnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAn0JjQvdGE0L7RgNC80LDRhtC40Y8g0L4g0KHQtdGA0LLQuNGB0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ9Ci0LXQutGD0YnQtdC1INGB0L7RgdGC0L7Rj9C90LjQtSDQuNC90YbQuNC00LXQvdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAn0KHQstGP0LfQsNC90L3Ri9C1IFNMQSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn0KLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INC40L3RhtC40LTQtdC90YLQsCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0L/QsNGA0LDQvNC10YLRgNC+0LIgQWRtaW5JVFNNQ0lQQWxsb2NhdGUg0LIg0L/QsNC90LXQu9C4INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uINC00LvRjyDQvtCx0YrQtdC60YLQsCBBZ2VudElUU01TTEEg0LIg0L/QsNC90LXQu9C4INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24g0LTQu9GPINC+0LHRitC10LrRgtCwIEFnZW50SVRTTVNMQVByaW50INCyINC/0LDQvdC10LvQuCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24g0LTQu9GPINC+0LHRitC10LrRgtCwIEFnZW50SVRTTVNMQVpvb20g0LIg0L/QsNC90LXQu9C4INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0L7QsdGK0LXQutGC0LAgQWdlbnRJVFNNU2VydmljZSDQsiDQv9Cw0L3QtdC70Lgg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24g0LTQu9GPINC+0LHRitC10LrRgtCwIEFnZW50SVRTTVNlcnZpY2VQcmludCDQsiDQv9Cw0L3QtdC70Lgg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0L7QsdGK0LXQutGC0LAgQWdlbnRJVFNNU2VydmljZVpvb20g0LIg0L/QsNC90LXQu9C4INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJ9Ce0LHQt9C+0YAgSVRTTSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJ9Ce0LHQt9C+0YAgSVRTTSDRgdC10YDQstC40YHQvtCyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ9CY0L3RhtC40LTQtdC90YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ9Ci0LjQvyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQvdGG0LjQtNC10L3RgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAn0KLQuNC/INGB0L7RgdGC0L7Rj9C90LjRjyDQuNC90YbQuNC00LXQvdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDQvNCw0YLRgNC40YbQtdC5INC/0YDQuNC+0YDQuNGC0LXRgtC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfQn9C+0LrQsNC30LDRgtGMINC60L3QvtC/0LrRgyAi0L3QsNC30LDQtCIg0LIg0LzQtdC90Y4g0KHQtdGA0LLQuNGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICfQn9C+0LrQsNC30LDRgtGMINC60L3QvtC/0LrRgyAi0L3QsNC30LDQtCIg0LIg0LzQtdC90Y4gU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ9Cf0L7QutCw0LfQsNGC0Ywg0LrQvdC+0L/QutGDICLQn9C10YfQsNGC0YwiINCyINC80LXQvdGOINCh0LXRgNCy0LjRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ9Cf0L7QutCw0LfQsNGC0Ywg0LrQvdC+0L/QutGDICLQn9C10YfQsNGC0YwiINCyINC80LXQvdGOIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfQn9C+0LrQsNC30LDRgtGMINC60L3QvtC/0LrRgyDQodCy0Y/Qt9Cw0YLRjC9MaW5rINCyINC80LXQvdGOINCh0LXRgNCy0LjRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ9CSINGN0LrRgdC/0LvRg9Cw0YLQsNGG0LjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAn0J/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQvdGG0LjQtNC10L3RgtCwINCyIHByZWZlcmVuY2Ugdmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ9Cf0LXRh9Cw0YLRjCBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJ9Cf0L7QtNGA0L7QsdC90L7RgdGC0LggU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ9Cf0LXRh9Cw0YLRjCDRgdC10YDQstC40YHQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ9Cf0L7QtNGA0L7QsdC90L7RgdGC0Lgg0YHQtdGA0LLQuNGB0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIFNDUklQVCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgtC40L8g0Lgg0L3QsNC/0YDQsNCy0LvQtdC90LjQtSDRgdCy0Y/Qt9C4INC00LvRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDQv9GA0Lgg0LLRi9GH0LjRgdC70LXQvdC40Lgg0YHQvtGB0YLQvtGP0L3QuNGPINC40L3RhtC40LTQtdC90YLQsC4g0JrQu9GO0Ycg0Y3RgtC+INC40LzRjyDRgtC40L/QsCDRgdCy0Y/Qt9C4ICjQutCw0Log0Y3RgtC+INC30LDQtNCw0L3QviDQsiBMaW5rT2JqZWN0OjpUeXBlKSwg0LAg0JfQvdCw0YfQtdC90LjQtSDRjdGC0L4g0L3QsNC/0YDQsNCy0LvQtdC90LjQtSBJbmNpZGVudExpbmtUeXBlINC90LAg0L7RgdC90L7QstCw0L3QuNC4INC60L7RgtC+0YDQvtCz0L4g0LLRi9GH0LjRgdC70Y/QtdGC0YHRjyDRgdC+0YHRgtC+0Y/QvdC40LUg0LjQvdGG0LjQtNC10L3RgtCwLiDQndCw0L/RgNC40LzQtdGALCDQtdGB0LvQuCBJbmNpZGVudExpbmtUeXBlINGD0YHRgtCw0L3QvtCy0LvQtdC9INCyIFwnRGVwZW5kc09uXCcsINC4INCd0LDQv9GA0LDQstC70LXQvdC40LUgLSBcJ1NvdXJjZVwnLCDRgtC+INGC0L7Qu9GM0LrQviDRgdCy0Y/Qt9C4IFwnRGVwZW5kcyBvblwnINCx0YPQtNGD0YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyAo0LAg0L3QtSDQv9GA0L7RgtC40LLQvtC/0L7Qu9C+0LbQvdCw0Y8gXCdSZXF1aXJlZCBmb3JcJykg0LTQu9GPINCy0YvRh9C40YHQu9C10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDQuNC90YbQuNC00LXQvdGC0LAuINCS0Ysg0LzQvtC20LXRgtC1INC00L7QsdCw0LLQuNGC0Ywg0LTRgNGD0LPQuNC1INC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LUg0YLQuNC/0Ysg0YHQstGP0LfQuCDQuCDQvdCw0L/RgNCw0LLQu9C10L3QuNGPINC/0L4g0YHQstC+0LXQvNGDINC20LXQu9Cw0L3QuNGOLCDQvdCw0L/RgNC40LzQtdGALCAgXCdJbmNsdWRlc1wnINGBINC90LDQv9GA0LDQstC70LXQvdC40LXQvCBcJ1RhcmdldFwnLiDQtNC+0L/Rg9GB0LrQsNGO0YLRgdGPINCy0YHQtSDRgtC40L/RiyDRgdCy0Y/Qt9C4LCDQt9Cw0LTQsNC90L3Ri9C1INC/0LDRgNCw0LzQtdGC0YDQvtC8IExpbmtPYmplY3Q6OlR5cGUg0Lgg0L3QsNC/0YDQsNCy0LvQtdC90LjRjyDQvNC+0LPRg9GCINCx0YvRgtGMIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsINC40LvQuCBcJ0JvdGhcJy4g0JLQkNCW0J3Qnjog0J/QntCh0JvQlSDQmNCX0JzQldCd0JXQndCY0K8g0JfQndCQ0KfQldCd0JjQmSDQrdCi0J7Qk9CeINCf0JDQoNCQ0JzQldCi0KDQkNCd0JXQntCR0KXQntCU0JjQnNCeINCS0KvQn9Ce0JvQndCY0KLQrCDQodCa0KDQmNCf0KIgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwg0JTQm9CvINCf0JXQoNCV0KDQkNCh0KfQldCi0JAg0JLQodCV0KUg0KHQntCh0KLQntCv0J3QmNCZINCY0J3QptCY0JTQldCd0KLQkCDQndCQINCe0KHQndCe0JLQlSDQndCe0JLQq9ClINCX0J3QkNCn0JXQndCY0JkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNoYW5nZVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdUaWNrZXRcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdGQVFcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0ZBUVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1BhcmVudENoaWxkXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0ZBUVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1NlcnZpY2VcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdBbHRlcm5hdGl2ZVRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1NlcnZpY2VcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1NlcnZpY2VcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdSZWxldmFudFRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1RpY2tldFwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0FsdGVybmF0aXZlVG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdUaWNrZXRcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnVGlja2V0XCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUmVsZXZhbnRUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0lUU01Db25maWdJdGVtXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnQWx0ZXJuYXRpdmVUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdJVFNNQ29uZmlnSXRlbVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0Nvbm5lY3RlZFRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdJVFNNQ29uZmlnSXRlbVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0RlcGVuZHNPblwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdJVFNNQ29uZmlnSXRlbVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0luY2x1ZGVzXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdSZWxldmFudFRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Xb3JrT3JkZXJcINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdJVFNNQ29uZmlnSXRlbVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0RlcGVuZHNPblwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNV29ya09yZGVyXCDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNV29ya09yZGVyXCDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnU2VydmljZVwg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTVdvcmtPcmRlclwg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1NlcnZpY2VcINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTVdvcmtPcmRlclwg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1RpY2tldFwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnU2VydmljZVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdGQVFcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnU2VydmljZVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdGQVFcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdQYXJlbnRDaGlsZFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ1NlcnZpY2VcJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnRkFRXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUmVsZXZhbnRUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCINGC0LjQvyDRgdCy0Y/Qt9C4IFwnQWx0ZXJuYXRpdmVUb1wnLiDQldGB0LvQuCDQuNGB0YXQvtC00L3QvtC1INC40LzRjyDQuCDQuNC80Y8g0YbQtdC70Lgg0LjQvNC10Y7RgiDQvtC00LjQvdCw0LrQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1LCDRgNC10LfRg9C70YzRgtC40YDRg9GO0YnQsNGPINGB0LLRj9C30YwgLSDQvdC10L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPLCDQuNC90LDRh9C1INGN0YLQviDQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8g0YHQstGP0LfRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIg0YLQuNC/INGB0LLRj9C30LggXCdDb25uZWN0ZWRUb1wnLiDQldGB0LvQuCDQuNGB0YXQvtC00L3QvtC1INC40LzRjyDQuCDQuNC80Y8g0YbQtdC70Lgg0LjQvNC10Y7RgiDQvtC00LjQvdCw0LrQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1LCDRgNC10LfRg9C70YzRgtC40YDRg9GO0YnQsNGPINGB0LLRj9C30YwgLSDQvdC10L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPLCDQuNC90LDRh9C1INGN0YLQviDQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8g0YHQstGP0LfRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCINGC0LjQvyDRgdCy0Y/Qt9C4IFwnRGVwZW5kc09uXCcuINCV0YHQu9C4INC40YHRhdC+0LTQvdC+0LUg0LjQvNGPINC4INC40LzRjyDRhtC10LvQuCDQuNC80LXRjtGCINC+0LTQuNC90LDQutC+0LLQvtC1INC30L3QsNGH0LXQvdC40LUsINGA0LXQt9GD0LvRjNGC0LjRgNGD0Y7RidCw0Y8g0YHQstGP0LfRjCAtINC90LXQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8sINC40L3QsNGH0LUg0Y3RgtC+INC90LDQv9GA0LDQstC70LXQvdC90LDRjyDRgdCy0Y/Qt9GMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiDRgtC40L8g0YHQstGP0LfQuCBcJ0luY2x1ZGVzXCcuINCV0YHQu9C4INC40YHRhdC+0LTQvdC+0LUg0LjQvNGPINC4INC40LzRjyDRhtC10LvQuCDQuNC80LXRjtGCINC+0LTQuNC90LDQutC+0LLQvtC1INC30L3QsNGH0LXQvdC40LUsINGA0LXQt9GD0LvRjNGC0LjRgNGD0Y7RidCw0Y8g0YHQstGP0LfRjCAtINC90LXQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8sINC40L3QsNGH0LUg0Y3RgtC+INC90LDQv9GA0LDQstC70LXQvdC90LDRjyDRgdCy0Y/Qt9GMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUmVsZXZhbnRUb1wnLiDQldGB0LvQuCDQuNGB0YXQvtC00L3QvtC1INC40LzRjyDQuCDQuNC80Y8g0YbQtdC70Lgg0LjQvNC10Y7RgiDQvtC00LjQvdCw0LrQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1LCDRgNC10LfRg9C70YzRgtC40YDRg9GO0YnQsNGPINGB0LLRj9C30YwgLSDQvdC10L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPLCDQuNC90LDRh9C1INGN0YLQviDQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8g0YHQstGP0LfRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICfQqNC40YDQuNC90LAgSVRTTSDQv9C+0LvRjyDRgtC40L/QsCB0ZXh0YXJlYSc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6c3dfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdCYWRhbGEgeWEgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ1VwYXRpa2FuYWppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnTWF6aW5naXJhIHlhIG55dW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0ltZXVuZ2FuaXNod2EgbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ0hhbGkgeWEgc2FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnTWFvbnllc2hvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdJbmF0ZWdlbWVhbmEgbmEgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdIdWR1bWEgeWEgbXR1bWlhamkgd2EgbXdpaHNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ01ha29zYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdNYXppbmdpcmEgeWEgbWJlbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ1VzaW1hbWl6aSB3YSBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ1VlbmRlc2hhamkgd2EgSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnTWFkaGFyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0hhbGkgeWEgdHVraW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdJbmFodXNpc2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnRW5naW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdTZWhlbXUgeWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ01yYWRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdNdWRhIHdhIGt1cG9uYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ0h1c2lhbmEgbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnVWFyaWZ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ0luYWhpdGFqaWthIGt3YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdLaXdhbmdvIGNoYSBtdW9uZWthbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ011ZGEgd2EgbWFqaWJ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ01hcmVqZW8geWEgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdNYXJlamVvIHlhIGh1ZHVtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdFbmVvIGxhIGh1ZHVtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ01hZnVuem8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnTWlhbWFsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdNa2F0YWJhIHdhIGt1aW1hcmlzaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ1VnYXdhamknOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ1VtdWhpbXUgPC0+IE1hZGhhcmEgPC0+IEtpcGF1bWJlbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ1NpbWFtaWEgbWF0b2tlbyB5YSBraXBhdW1iZWxlIHlhIGt1dW5nYW5pc2hhIFVtdWhpbXUgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdLdXdla2Ega2lwYXVtYmVsZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ0tpbWEgY2hhIGNoaW5pIGNoYSBtdWRhIGthdGkgeWEgbWF0dWtpbyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ1VtdWhpbXUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1RhYXJpZmEgemEgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ013aXNobyBrdWJhZGlsaXNod2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnTXdzaG8ga3ViYWRpbGlzaHdhIG5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdIdWR1bWEgemluYXpvaHVzaWthJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ1RhYXJpZmEgemEgaHVkdW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdIYWxpIHlhIHR1a2lvIGxhIHNhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xBIHppbmF6b2h1c2lrYSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnSGFsaSB5YSB0dWtpbyBsYSBzYXNhJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdVc2FqaWxpIHdhIG1vZHVsaSB6YSBtYXppbmdpcmEgeWEgbWJlbGUga3dhIHVzYW5pZGkgd2EgQWRtaW5JVFNNQ0lQQWxsb2NhdGUga2F0aWthIGVuZW8gbGEga2lvbmdvemkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVc2FqaWxpIHdhIG1vZHVsaSB5YSBtYXppbmdpcmEgeWEgbWJlbGUga3dhIGtpcGVuZ2VlIGNoYSBJVFNNU0xBIGNoYSB3YWthbGEgIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVXNhamlsaSB3YSBtb2R1bGkgeWEgbWF6aW5naXJhIHlhIG1iZWxlIGt3YSBraXBlbmdlZSBjaGEgIHVjaGFwaXNod2FqaSBjaGEgSVRTTVNMQSBjaGEgd2FrYWxhIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHlhIG1hemluZ2lyYSB5YSBtYmVsZSBrd2Ega2lwZW5nZWUgY2hhIGt1a3V6d2EgY2hhIElUU01TTEEgY2hhIHdha2FsYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVc2FqaWxpIHdhIG1vZHVsaSB5YSBtYXppbmdpcmEgeWEgbWJlbGUga3dhIGtpcGVuZ2VlIGNoYSBodWR1bWEgY2hhIElUU01TTEEgY2hhIHdha2FsYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVc2FqaWxpIHdhIG1vZHVsaSB5YSBtYXppbmdpcmEgeWEgbWJlbGUga3dhIGtpcGVuZ2VlIGNoYSBrdWNoYXBpc2h3YSBrd2EgaHVkdW1hIGNoYSBJVFNNU0xBIGNoYSB3YWthbGEga2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVc2FqaWxpIHdhIG1vZHVsaSB5YSBtYXppbmdpcmEgeWEgbWJlbGUga3dhIGtpcGVuZ2VlIGNoYSBrdWt1endhIGt3YSBodWR1bWEgY2hhIElUU01TTEEgY2hhIHdha2FsYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnVHVraW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ1NpbWFtaWEgbWF0cmlraSB5YSBraXBhdW1iZWxlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsaSB5YSBrdW9ueWVzaGEga2l1bmdvIGNoYSBrdXJ1ZGkgbnl1bWEga2F0aWthIG1lbnl1IHlhIGh1ZHVtYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ01vZHVsaSB5YSBrdW9ueWVzaGEga2l1bmdvIGNoYSBrdXJ1ZGkgbnl1bWEga2F0aWthIG1lbnl1IHlhIHNsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWxpIHlhIGt1b255ZXNoYSBraXVuZ28gY2hhIGt1Y2hhcGlzaGEga2F0aWthIG1lbnl1IHlhIGh1ZHVtYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICdNb2R1bGkgeWEga3Vvbnllc2hhIGtpdW5nbyBjaGEga3VjaGFwaXNoYSBrYXRpa2EgbWVueXUgeWEgc2xhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bGkgeWEga3Vvbnllc2hhIGtpdW5nbyBjaGEga2l1bmdvIGthdGlrYSBtZW55dSB5YSBodWR1bWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnVWVuZGVzaGFqaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnVmlnZXpvIHlhIGhhbGkgeWEgbWF0dWtpbyBrYXRpa2EgbWFuZGhhcmkgeWEgbWFwZW5kZWxlby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICdXZWthIGFpbmEgbmEgbXdlbGVrZW8gd2Egdml1bmdvIHZpdGFrYXZ5b3R1bWlrYSBrdXRhZnV0YSBoYWxpIHlhIHR1a2lvLiBGdW5ndW8gbmkgamluYSBsYSBhaW5hIHlhIGtpdW5nbyAoa2FtYSBpbGl2eW9mYWZhbnVsaXdhIGthdGlrYSBLaXBlbmdlZSBjaGEgS2l1bmdvOjogQWluYSksIG5hIHRoYW1hbmkgbmkgbXdlbGVrbyB3YSBBaW5hIHlhIGtpdW5nbyBjaGEgdHVraW8gYW1iYWNobyBraWZhdHdlIGlsaSBrdXRhZnV0YSBoYWxpIHlhIHR1a2lvLiBLd2EgbWZhbm8ga2FtYSBBaW5hIHlhIGtpdW5nbyB5YSB0dWtpbyBpbWV3ZWt3YSBrd2VueWUgXCdJbmF0ZWdlbWVhbmEgbmFcJywgbmEgbXdlbGVrZW8gbmkgXCdDaGFuem9cJywgdml1bmdvIFwnSW5hdGVnZW1lYW5hIG5hXCcgdHUgdml0YWZ3YXRhIChuYSBzaW8ga2l1bmdvIGNoYSB0b2ZhdXRpIFwnSW5haGl0YWppa2Ega3dhXCcpa3V0YWZ1dGEgaGFsaWkgeWEgdHVraW8uIFVuYXdlemEga3VvbmdlemEgemFpZGkgYWluYSBuYSBtaWVsZWtlbyBrYW1hIHVwZW5kYXZ5byBtZmFubyBcJ0luYWh1c2lzaGFcJyBuYSBtd2VsZWtlbyBcJ0xlbmdvXCcuIFZpdW5nbyB2eW90ZSB2aWxpdnlvZmFmYW51bGl3YSBrYXRpa2EgY2hhZ3VvIGxhIG1mdW1vIGxhIHVzYW5pZGkgS2lwZW5nZWVLaXVuZ286OkFpbmEgdmluYXdlemVrYW5hIG5hIG13ZWxla2VvIHVuYXdlemEga3V3YSBcJ0NoYW56b1wnICwgXCdMZW5nb1wnIGF1IFwnWW90ZVwnLiBNVUhJTVU6IEJBQURBIFlBIEtVRkFOWUEgTUFCQURJTElLTyBLQVRJS0EgQ0hBR1VPIEhJTEkgTEEgVVNBTklESSBNRlVNTyAgVU5BSElUQUpJIEtVV0FTSEEgTUFBTkRJS08gYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgSUxJIEhBTEkgWUEgTUFUVUtJTyBZT1RFIFlBV0VaRSBLVVRBRlVUV0EgS1VURUdFTUVBTkEgTkEgTUlQQU5HSUxJTyBNSVBZQSEgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0JhZGlsaWtvIGxhIElUU01cJyBraW53ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdUaWtldGlcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0thd2FpZGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdNYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdLYXdhaWRhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdNYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdQYXJlbnRDaGlsZFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdNYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdJbmFodXNpYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdIdWR1bWFcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0JhZGFsYSB5YVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdIdWR1bWFcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0luYXRlZ2VtZWFuYSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnSHVkdW1hXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdIdXNpYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGNoYSBcJ1Rpa2V0aVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnQmFkYWxhIHlhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnVGlrZXRpXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdJbmF0ZWdlbWVhbmEgbmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnVGlrZXRpXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdIdXNpYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnICBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0JhZGFsYSB5YVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcgIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSW5hdW5nYW5pc2h3YSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnICBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0luYXRlZ2VtZWFuYSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcgIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSHVzaXNoYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGtpbmdpbmUgY2hhXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyAga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdIdXNpYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnTXBhbmdpbGlvIHdhIGthemkgd2EgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcgIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSW5hdGVnZW1lYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnTXBhbmdpbGlvIHdhIGthemkgd2EgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcgIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnS2F3YWlkYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnTXBhbmdpbGlvIHdhIGthemkgd2EgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnSHVkdW1hXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdJbmF0ZWdlbWVhbmEgbmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ01wYW5naWxpbyB3YSBrYXppIHdhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0h1ZHVtYVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnS2F3YWlkYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdNcGFuZ2lsaW8gd2Ega2F6aSB3YSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGtpbmdpbmUgY2hhXCdUaWtldGlcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0thd2FpZGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnSHVkdW1hXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGNoYSBcJ01hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmFcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0thd2FpZGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdIdWR1bWFcJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnTWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdIdXNpYW5hIG5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ01pcGFuZ2lsaW8gaGlpIGluYWZhZmFudWEgYWluYSB5YSBraXVuZ28gXCdCYWRhbGEgeWFcJy4gS2FtYSBqaW5hIGxhIGNoYW56byBuYSBqaW5hIGxlbmd3YSB5YW5hIHRoYW1hbmkgbW9qYSwga2l1bmdvIGtpbmFjaG90b2thbmEgbmkgaGFraW5hIHVlbGVrZW8uIEthbWEgdGhhbWFuaSBuaSB0b2ZhdXRpLCBraXVuZ28ga2lsaWNob3Rva2VhIGtpbmEgdWVsZWtlby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ01pcGFuZ2lsaW8gaGlpIGluYWZhZmFudWEgYWluYSB5YSBraXVuZ28gXCdJbWV1bmdhbmlzaHdhIG5hXCcuIEthbWEgamluYSBsYSBjaGFuem8gbmEgamluYSBsZW5nd2EgeWFuYSB0aGFtYW5pIG1vamEsIGtpdW5nbyBraW5hY2hvdG9rYW5hIG5pIGhha2luYSB1ZWxla2VvLiBLYW1hIHRoYW1hbmkgbmkgdG9mYXV0aSwga2l1bmdvIGtpbGljaG90b2tlYSBraW5hIHVlbGVrZW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnTWlwYW5naWxpbyBoaWkgaW5hZmFmYW51YSBhaW5hIHlhIGtpdW5nbyBcJ0luYXRlZ2VtZWFuYSBuYVwnLiBLYW1hIGppbmEgbGEgY2hhbnpvIG5hIGppbmEgbGVuZ3dhIHlhbmEgdGhhbWFuaSBtb2phLCBraXVuZ28ga2luYWNob3Rva2FuYSBuaSBoYWtpbmEgdWVsZWtlby4gS2FtYSB0aGFtYW5pIG5pIHRvZmF1dGksIGtpdW5nbyBraWxpY2hvdG9rZWEga2luYSB1ZWxla2VvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnTWlwYW5naWxpbyBoaWkgaW5hZmFmYW51YSBhaW5hIHlhIGtpdW5nbyBcJ0luYWh1c2lzaGFcJy4gS2FtYSBqaW5hIGxhIGNoYW56byBuYSBqaW5hIGxlbmd3YSB5YW5hIHRoYW1hbmkgbW9qYSwga2l1bmdvIGtpbGljaG90b2tlYSBuaSBoYWtpbmEgdWVsZWtlby4gS2FtYSB0aGFtYW5pIG5pIHRvZmF1dGksIGtpdW5nbyBraWxpY2hvdG9rZWEga2luYSB1ZWxla2VvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdNaXBhbmdpbGlvIGhpaSBpbmFmYWZhbnVhIGFpbmEgeWEga2l1bmdvIFwnSHVzaWFuYSBuYVwnLiBLYW1hIGppbmEgbGEgY2hhbnpvIG5hIGppbmEgbGVuZ3dhIHlhbmEgdGhhbWFuaSBtb2phLCBraXVuZ28ga2lsaWNob3Rva2VhIG5pIGhha2luYSB1ZWxla2VvLiBLYW1hIHRoYW1hbmkgbmkgdG9mYXV0aSwga2l1bmdvIGtpbGljaG90b2tlYSBraW5hIHVlbGVrZW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ1VwYW5hIHdhIGVuZW8gbGEgbWF0aW5pIGxhIElUU00gJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6emhfQ05fSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICfmm7/ku6MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAn5Y+v55So5oCnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAn5ZCO56uvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ+i/nuaOpeWIsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAn5b2T5YmN54q25oCBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICfmvJTnpLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ+S+nei1lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAn5pyA57uI55So5oi35pyN5YqhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ+mUmeivryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICfliY3nq68nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lU566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVTov5DokKUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAn5b2x5ZONJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAn5pWF6Zqc54q25oCBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAn5YyF5ousJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn5YW25a6DJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICflsZ7kuo4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ+mhueebric7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAn5oGi5aSN5pe26Ze0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAn5YWz6IGUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ+aKpeWRiic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfooqsuLi7pnIDopoEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAn6Kej5Yaz546HJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICflk43lupTml7bpl7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xB5qaC6KeIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICfmnI3liqHmpoLop4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAn5pyN5Yqh5Yy6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAn5Z+56K6tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ+S6pOaYkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICfmlK/mjIHlkIjlkIwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ+WIhumFjSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAn57Sn5oCl5bqmIDwtPiDlvbHlk40gPC0+IOS8mOWFiOe6pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnIue0p+aApeW6piA8LT4g5b2x5ZONIuS5i+mXtOeahOe7hOWQiOWGs+WumuS8mOWFiOe6pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAn5LyY5YWI57qn5YiG6YWNJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn5pWF6Zqc6Ze05pyA55+t5pe26Ze0JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn57Sn5oCl5bqmJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEHkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn5LiK5qyh5L+u5pS55LqOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+S4iuasoeS/ruaUueS6uic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn5YWz6IGU55qE5pyN5YqhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ+acjeWKoeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAn5b2T5YmN5pWF6Zqc54q25oCBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ+WFs+iBlOeahFNMQSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn5b2T5YmN5pWF6Zqc54q25oCBJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJ+WFvOWFtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfkuLrns7vnu5/nrqHnkIbljLrkuK3nmoQgQWRtaW5JVFNNQ0lQQWxsb2NhdGUg6YWN572u5rOo5YaM5YmN56uv5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfkuLrmnI3liqHkurrlkZjnlYzpnaLkuK3nmoQgQWdlbnRJVFNNU0xBIOWvueixoeazqOWGjOWJjeerr+aooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfkuLrmnI3liqHkurrlkZjnlYzpnaLkuK3nmoQgQWdlbnRJVFNNU0xBUHJpbnQg5a+56LGh5rOo5YaM5YmN56uv5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Li65pyN5Yqh5Lq65ZGY55WM6Z2i5Lit55qEIEFnZW50SVRTTVNMQVpvb20g5a+56LGh5rOo5YaM5YmN56uv5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Li65pyN5Yqh5Lq65ZGY55WM6Z2i5Lit55qEIEFnZW50SVRTTVNlcnZpY2Ug5a+56LGh5rOo5YaM5YmN56uv5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfkuLrmnI3liqHkurrlkZjnlYzpnaLkuK3nmoQgQWdlbnRJVFNNU2VydmljZVByaW50IOWvueixoeazqOWGjOWJjeerr+aooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfkuLrmnI3liqHkurrlkZjnlYzpnaLkuK3nmoQgQWdlbnRJVFNNU2VydmljZVpvb20g5a+56LGh5rOo5YaM5YmN56uv5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJ0lUU00gU0xB5qaC6KeIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdJVFNN5pyN5Yqh5qaC6KeIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAn5pWF6ZqcJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICfmlYXpmpznirbmgIHnsbvlnosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZS4nfSA9ICfmlYXpmpznirbmgIHnsbvlnovjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICfnrqHnkIbkvJjlhYjnuqfnn6npmLXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfmnI3liqHoj5zljZXkuK3mmL7npLrlkI7pgIDpk77mjqXnmoTmqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ1NMQeiPnOWNleS4reaYvuekuuWQjumAgOmTvuaOpeeahOaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfmnI3liqHoj5zljZXkuK3mmL7npLrmiZPljbDpk77mjqXnmoTmqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICdTTEHoj5zljZXkuK3mmL7npLrmiZPljbDpk77mjqXnmoTmqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn5pyN5Yqh6I+c5Y2V5Lit5pi+56S65b2T5YmN6ZO+5o6l55qE6ZO+5o6l55qE5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAn5q2j5bi4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICfpgInpobnop4blm77kuK3nlKjkuo7ooajnpLrmlYXpmpznirbmgIHnmoTlj4LmlbDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ1NMQeaJk+WNsOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICdTTEHor6bmg4XjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICfmnI3liqHmiZPljbDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ+acjeWKoeivpuaDheOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICforr7nva7pk77mjqXnmoTnsbvlnovlkozmlrnlkJHku6Xkvr/orqHnrpfmlYXpmpznirbmgIHjgILplK7mmK/pk77mjqXnsbvlnovnmoTlkI3np7DvvIjlnKhMaW5rT2JqZWN0OjpUeXBl5Lit5a6a5LmJ77yJ77yM5YC85pivSW5jaWRlbnRMaW5rVHlwZe+8iOaVhemanOmTvuaOpeexu+Wei++8ieeahOaWueWQkeS7peiuoeeul+aVhemanOeKtuaAgeOAguekuuS+i++8muWmguaenEluY2lkZW50TGlua1R5cGXvvIjmlYXpmpzpk77mjqXnsbvlnovvvInorr7kuLrigJxEZXBlbmRzT27vvIjkvp3otZbvvInigJ3vvIzmlrnlkJHmmK9Tb3VyY2XvvIjmupDvvInvvIzlj6rmnInigJzkvp3otZbigJ3pk77mjqXvvIjogIzkuI3mmK/pk77mjqXnsbvlnovkuLrigJzooqsuLi7pnIDopoHigJ3nmoTpk77mjqXvvInmiY3nlKjmnaXorqHnrpfmlYXpmpznirbmgIHjgILlj6/ku6XmoLnmja7pnIDopoHmt7vliqDmm7TlpJrnmoTpk77mjqXnsbvlnovlkozmlrnlkJHvvIzlpoLmlrnlkJHkuLrigJznm67moIfigJ3nmoTigJxJbmNsdWRlc++8iOWMheWQq++8ieKAnemTvuaOpeOAguaJgOacieWcqOezu+e7n+mFjee9rumAiemhueeahExpbmtPYmplY3Q6OlR5cGXkuK3lrprkuYnnmoTpk77mjqXnsbvlnovpg73lj6/ku6Xkvb/nlKjvvIzmlrnlkJHlj6rlj6/ku6XmmK/igJxTb3VyY2XvvIjmupDvvInigJ3jgIHigJxUYXJnZXTvvIjnm67moIfvvInigJ3miJbigJxCb3Ro77yI5rqQ5ZKM55uu5qCH6YO95piv77yJ4oCd44CC6YeN6KaB77ya5Zyo5pu05pS55LqG57O757uf6YWN572u6YCJ6aG55ZCO77yM6ZyA6KaB6L+Q6KGM6ISa5pysYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGzvvIzmiY3og73mjInmlrDnmoTorr7nva7ph43mlrDorqHnrpfmlYXpmpznirbmgIHjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4quKAnElUU01DaGFuZ2XvvIjlj5jmm7TvvInigJ3lr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzmma7pgJrigJ3pk77mjqXliLDlt6XljZXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOaZrumAmuKAnemTvuaOpeWIsEZBUeefpeivhuW6k+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzniLblrZDigJ3pk77mjqXliLBGQVHnn6Xor4blupPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzlhbPogZTigJ3pk77mjqXliLBGQVHnn6Xor4blupPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5aSH6YCJ4oCd6ZO+5o6l5YiwRkFR55+l6K+G5bqT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5L6d6LWW4oCd6ZO+5o6l5Yiw4oCc5pyN5Yqh4oCd44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOWFs+iBlOKAnemTvuaOpeWIsOKAnOacjeWKoeKAneOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOWkh+mAieKAnemTvuaOpeWIsOKAnOacjeWKoeKAneOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5L6d6LWW4oCd6ZO+5o6l5Yiw4oCc5pyN5Yqh4oCd44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5YWz6IGU4oCd6ZO+5o6l5Yiw5bel5Y2V44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzlpIfpgInigJ3pk77mjqXliLDlj6bkuIDphY3nva7pobnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzov57mjqXliLDigJ3pk77mjqXliLDlj6bkuIDphY3nva7pobnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5L6d6LWW4oCd6ZO+5o6l5Yiw5Y+m5LiA6YWN572u6aG544CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5YyF5ZCr4oCd6ZO+5o6l5Yiw5Y+m5LiA6YWN572u6aG544CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzlhbPogZTigJ3pk77mjqXliLDlj6bkuIDphY3nva7pobnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTVdvcmtPcmRlcu+8iOW3peS9nOaMh+S7pO+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOS+nei1luKAnemTvuaOpeWIsOmFjee9rumhueOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNV29ya09yZGVy77yI5bel5L2c5oyH5Luk77yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5pmu6YCa4oCd6ZO+5o6l5Yiw6YWN572u6aG544CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTVdvcmtPcmRlcu+8iOW3peS9nOaMh+S7pO+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOS+nei1luKAnemTvuaOpeWIsOKAnOacjeWKoeKAneOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Xb3JrT3JkZXLvvIjlt6XkvZzmjIfku6TvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzmma7pgJrigJ3pk77mjqXliLDigJzmnI3liqHigJ3jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Xb3JrT3JkZXLvvIjlt6XkvZzmjIfku6TvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzmma7pgJrigJ3pk77mjqXliLDlt6XljZXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4quKAnOacjeWKoeKAneWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOaZrumAmuKAnemTvuaOpeWIsEZBUeefpeivhuW6k+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKrigJzmnI3liqHigJ3lr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzniLblrZDigJ3pk77mjqXliLBGQVHnn6Xor4blupPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKrigJzmnI3liqHigJ3lr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzlhbPogZTigJ3pk77mjqXliLBGQVHnn6Xor4blupPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG6ZO+5o6l57G75Z6L4oCc5pu/5Luj4oCd44CC5aaC5p6c5rqQ5ZKM55uu5qCH5ZCN56ew55u45ZCM77yM5YiZ5Lqn55Sf55qE6ZO+5o6l5piv5peg5pa55ZCR5oCn55qE6ZO+5o6l44CC5aaC5p6c5rqQ5ZKM55uu5qCH55qE5YC85LiN5ZCM77yM5YiZ5Lqn55Sf55qE6ZO+5o6l5piv5pa55ZCR5oCn55qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobpk77mjqXnsbvlnovigJzov57mjqXliLDigJ3jgILlpoLmnpzmupDlkoznm67moIflkI3np7Dnm7jlkIzvvIzliJnkuqfnlJ/nmoTpk77mjqXmmK/ml6DmlrnlkJHmgKfnmoTpk77mjqXjgILlpoLmnpzmupDlkoznm67moIfnmoTlgLzkuI3lkIzvvIzliJnkuqfnlJ/nmoTpk77mjqXmmK/mlrnlkJHmgKfnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobpk77mjqXnsbvlnovigJzkvp3otZbigJ3jgILlpoLmnpzmupDlkoznm67moIflkI3np7Dnm7jlkIzvvIzliJnkuqfnlJ/nmoTpk77mjqXmmK/ml6DmlrnlkJHmgKfnmoTpk77mjqXjgILlpoLmnpzmupDlkoznm67moIfnmoTlgLzkuI3lkIzvvIzliJnkuqfnlJ/nmoTpk77mjqXmmK/mlrnlkJHmgKfnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6humTvuaOpeexu+Wei+KAnOWMheWQq+KAneOAguWmguaenOa6kOWSjOebruagh+WQjeensOebuOWQjO+8jOWImeS6p+eUn+eahOmTvuaOpeaYr+aXoOaWueWQkeaAp+eahOmTvuaOpeOAguWmguaenOa6kOWSjOebruagh+eahOWAvOS4jeWQjO+8jOWImeS6p+eUn+eahOmTvuaOpeaYr+aWueWQkeaAp+eahOmTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobpk77mjqXnsbvlnovigJzlhbPogZTigJ3jgILlpoLmnpzmupDlkoznm67moIflkI3np7Dnm7jlkIzvvIzliJnkuqfnlJ/nmoTpk77mjqXmmK/ml6DmlrnlkJHmgKfnmoTpk77mjqXjgILlpoLmnpzmupDlkoznm67moIfnmoTlgLzkuI3lkIzvvIzliJnkuqfnlJ/nmoTpk77mjqXmmK/mlrnlkJHmgKfnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnSVRTTeaooeWdl+S4reaWh+acrOi+k+WFpeWMuuWfn+eahOWuveW6puOAgic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6emhfVFdfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ29yZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICflj6/kvpvpgbjmk4cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAn5Y+v55So5oCnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAn5b6M56uvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ+mAo+aOpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAn55W25YmN54uA5oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICfmvJTnpLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ+S+neiztCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAn5pyA57WC55So5oi25pyN5YuZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ+mMr+iqpCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICfliY3nq68nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lU566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVTpgYvnh58nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAn5b2x6Z+/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAn5pWF6Zqc54uA5oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAn5YyF5ousJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn5YW25a6DJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICflsazmlrwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ+mgheebric7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAn5oGi5b6p5pmC6ZaTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAn55u46ZecJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ+WgseWRiic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfpnIDopoEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAn6Kej5rG6546HJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICfpn7/mh4nmmYLplpMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xB5qaC6L+wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICfmnI3li5nmpoLov7AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAn5pyN5YuZ5Y2AJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAn5Z+56KiTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ+S6pOaYkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICfkvp3mk5rlkIjlkIwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ+WIhumFjSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAn6YeN6KaBIDwtPiDlvbHpn78gPC0+IOWEquWFiOe0mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnIumHjeimgSA8LT4g5b2x6Z+/IuS5i+mWk+eahOe1hOWQiOaxuuWumuWEquWFiOe0mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAn5YSq5YWI57Sa5YiG6YWNJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn5pWF6Zqc6ZaT5pyA55+t5pmC6ZaTJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn6YeN6KaBJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEHkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn5LiK5qyh5L+u5pS55pa8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+S4iuasoeS/ruaUueS6uic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn6Zec6IGv55qE5pyN5YuZJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ+acjeWLmeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAn55W25YmN5pWF6Zqc54uA5oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ+mXnOiBr+eahFNMQXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ+eVtuWJjeaVhemanOeLgOaFiyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAn5pWF6ZqcJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICfnrqHnkIblhKrlhYjntJrnn6npmaMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAn5q2j5bi4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pbklUU01DSVBBbGxvY2F0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdGhlIHByaW9yaXR5IGxpc3QKICAgIG15ICVQcmlvcml0eUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKS0+UHJpb3JpdHlMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIElUU01Dcml0aWNhbGl0eSBhbmQgSVRTTUltcGFjdAogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWydUaWNrZXQnXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiB7CiAgICAgICAgICAgIElUU01Dcml0aWNhbGl0eSA9PiAxLAogICAgICAgICAgICBJVFNNSW1wYWN0ICAgICAgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgSVRTTUNyaXRpY2FsaXR5IGFuZCBJVFNNSW1wYWN0CiAgICBteSAlUG9zc2libGVWYWx1ZXM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9IHx8IHt9OwogICAgfQoKICAgICMgc2V0IHRoZSBjcml0aWNhbGl0eSBsaXN0CiAgICAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0gPSAkUG9zc2libGVWYWx1ZXN7SVRTTUNyaXRpY2FsaXR5fTsKCiAgICAjIHNldCB0aGUgaW1wYWN0IGxpc3QKICAgICRTZWxmLT57SW1wYWN0TGlzdH0gPSAkUG9zc2libGVWYWx1ZXN7SVRTTUltcGFjdH07CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdAogICAgbXkgJENJUEFsbG9jYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpOwogICAgbXkgJExheW91dE9iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkgYWxsb2NhdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NJUEFsbG9jYXRlJyApIHsKCiAgICAgICAgIyBnZXQgYWxsIFByaW9yaXR5SURzIG9mIHRoZSBtYXRyaXgKICAgICAgICBteSAkQWxsb2NhdGVEYXRhOwogICAgICAgIGZvciBteSAkSW1wYWN0ICggc29ydCBrZXlzICV7ICRTZWxmLT57SW1wYWN0TGlzdH0gfSApIHsKCiAgICAgICAgICAgIENSSVRJQ0FMSVRZOgogICAgICAgICAgICBmb3IgbXkgJENyaXRpY2FsaXR5ICggc29ydCBrZXlzICV7ICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fSB9ICkgewoKICAgICAgICAgICAgICAgICMgYnVpbGQgZmllbGQgbmFtZSBmb3IgcHJpb3JpdHkgaWQKICAgICAgICAgICAgICAgIG15ICRGaWVsZE5hbWUgPSAiUHJpb3JpdHlJRCIgLiAkSW1wYWN0IC4gJy0nIC4gJENyaXRpY2FsaXR5OwoKICAgICAgICAgICAgICAgICMgY2xlYW4gdXAgYWxsIHdoaXRlc3BhY2VzIGJlY2F1c2UgdGhleSBhcmUgbm90IGFsbG93ZWQgaW4gSFRNTCBJRC1BdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAkRmllbGROYW1lID1+IHN7IFxzKyB9e31neG1zOwoKICAgICAgICAgICAgICAgICMgZ2V0IGZvcm0gcGFyYW0gZm9yIHByaW9yaXR5IGlkCiAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICAgICAgUGFyYW0gPT4gJEZpZWxkTmFtZSwKICAgICAgICAgICAgICAgICkgfHwgJyc7CgogICAgICAgICAgICAgICAgbmV4dCBDUklUSUNBTElUWSBpZiAhJFByaW9yaXR5SUQ7CgogICAgICAgICAgICAgICAgJEFsbG9jYXRlRGF0YS0+eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fSA9ICRQcmlvcml0eUlEOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBhbGxvY2F0aW9ucwogICAgICAgICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVVcGRhdGUoCiAgICAgICAgICAgIEFsbG9jYXRlRGF0YSA9PiAkQWxsb2NhdGVEYXRhLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2UgewoKICAgICAgICAjIGdldCBhbGxvY2F0aW9uIGRhdGEKICAgICAgICBteSAkQWxsb2NhdGVEYXRhID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRBbGxvY2F0ZU1hdHJpeDsKICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlswXS0+WzBdLT57T2JqZWN0VHlwZX0gPQogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ltcGFjdCcpIC4gJyAvICcKICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NyaXRpY2FsaXR5Jyk7CiAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlswXS0+e0NsYXNzfSA9ICdIZWFkZXJDb2x1bW5EZXNjcmlwdGlvbic7CgogICAgICAgICMgZ2VuZXJhdGUgdGFibGUgZGVzY3JpcHRpb24gKEltcGFjdCkKICAgICAgICBteSAkQ291bnRlcjEgPSAxOwogICAgICAgIGZvciBteSAkSW1wYWN0ICgKICAgICAgICAgICAgc29ydCB7ICRTZWxmLT57SW1wYWN0TGlzdH0tPnskYX0gY21wICRTZWxmLT57SW1wYWN0TGlzdH0tPnskYn0gfQogICAgICAgICAgICBrZXlzICV7ICRTZWxmLT57SW1wYWN0TGlzdH0gfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntPYmplY3RUeXBlfSAgID0gJ0ltcGFjdCc7CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRDb3VudGVyMV0tPlswXS0+e0ltcGFjdEtleX0gICAgPSAkSW1wYWN0OwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntPYmplY3RPcHRpb259ID0gJFNlbGYtPntJbXBhY3RMaXN0fS0+eyRJbXBhY3R9OwogICAgICAgICAgICAkQ291bnRlcjErKzsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgdGFibGUgZGVzY3JpcHRpb24gKENyaXRpY2FsaXR5KQogICAgICAgIG15ICRDb3VudGVyMiA9IDE7CiAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoCiAgICAgICAgICAgIHNvcnQgeyAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0tPnskYX0gY21wICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fS0+eyRifSB9CiAgICAgICAgICAgIGtleXMgJXsgJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9IH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ291bnRlcjJdLT57T2JqZWN0VHlwZX0gICAgID0gJ0NyaXRpY2FsaXR5JzsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ291bnRlcjJdLT57Q3JpdGljYWxpdHlLZXl9ID0gJENyaXRpY2FsaXR5OwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlswXS0+WyRDb3VudGVyMl0tPntPYmplY3RPcHRpb259ICAgPSAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0tPnskQ3JpdGljYWxpdHl9OwogICAgICAgICAgICAkQ291bnRlcjIrKzsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgY29udGVudAogICAgICAgIGZvciBteSAkUm93ICggMSAuLiAoICRDb3VudGVyMSAtIDEgKSApIHsKICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKCAxIC4uICggJENvdW50ZXIyIC0gMSApICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCBrZXlzCiAgICAgICAgICAgICAgICBteSAkSW1wYWN0S2V5ICAgICAgPSAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WzBdLT57SW1wYWN0S2V5fTsKICAgICAgICAgICAgICAgIG15ICRDcml0aWNhbGl0eUtleSA9ICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvbHVtbl0tPntDcml0aWNhbGl0eUtleX07CgogICAgICAgICAgICAgICAgIyBidWlsZCBmaWVsZCBuYW1lIGZvciBwcmlvcml0eSBpZAogICAgICAgICAgICAgICAgbXkgJEZpZWxkTmFtZSA9ICJQcmlvcml0eUlEIiAuICRJbXBhY3RLZXkgLiAnLScgLiAkQ3JpdGljYWxpdHlLZXk7CgogICAgICAgICAgICAgICAgIyBjbGVhbiB1cCBhbGwgd2hpdGVzcGFjZXMgYmVjYXVzZSB0aGV5IGFyZSBub3QgYWxsb3dlZCBpbiBIVE1MIElELUF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICRGaWVsZE5hbWUgPX4gc3sgXHMrIH17fWd4bXM7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgb3B0aW9uIHN0cmluZwogICAgICAgICAgICAgICAgbXkgJE9wdGlvblN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICRGaWVsZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVByaW9yaXR5TGlzdCwKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEID0+ICRBbGxvY2F0ZURhdGEtPnskSW1wYWN0S2V5fS0+eyRDcml0aWNhbGl0eUtleX0gfHwgJycsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WyRDb2x1bW5dLT57T3B0aW9uU3RyZ30gPSAkT3B0aW9uU3RyZzsKICAgICAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0tPntDbGFzc30gICAgICA9ICdDb250ZW50JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRSb3cgKCAwIC4uICQjeyRBbGxvY2F0ZU1hdHJpeH0gKSB7CgogICAgICAgICAgICBpZiAoICRSb3cgIT0gMCApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdSb3cnICkKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKCAwIC4uICQjeyAkQWxsb2NhdGVNYXRyaXgtPlskUm93XSB9ICkgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIHJvdyBpcyBoZWFkZXIKICAgICAgICAgICAgICAgIGlmICggJFJvdyA9PSAwICkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICRDb2x1bW4gPT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdIZWFkZXJDb2x1bW5EZXNjcmlwdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckNlbGwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WyRDb2x1bW5dLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb2x1bW4gaXMgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgIGVsc2lmICggJENvbHVtbiA9PSAwICkgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdEZXNjcmlwdGlvbkNlbGwnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdDb250ZW50Q2VsbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJEFsbG9jYXRlTWF0cml4LT5bJFJvd10tPlskQ29sdW1uXSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbklUU01DSVBBbGxvY2F0ZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gS2VybmVsL01vZHVsZXMvQWRtaW5TZXJ2aWNlLnBtCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5TZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwojIC0tLQojIElUU01Db3JlCiMgLS0tCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKIyAtLS0KCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWyAnVGlja2V0JyBdLAogICAgICAgIEZpZWxkRmlsdGVyID0+IHsKICAgICAgICAgICAgSVRTTUNyaXRpY2FsaXR5ID0+IDEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZm9yIElUU01Dcml0aWNhbGl0eQogICAgbXkgJVBvc3NpYmxlVmFsdWVzOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9IHx8IHt9OwogICAgfQoKICAgICMgc2V0IHRoZSBjcml0aWNhbGl0eSBsaXN0CiAgICAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0gPSAkUG9zc2libGVWYWx1ZXN7SVRTTUNyaXRpY2FsaXR5fTsKIyAtLS0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNlcnZpY2UgZWRpdAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NlcnZpY2VFZGl0JyApIHsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzZXJ2aWNlIHNhdmUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZXJ2aWNlU2F2ZScgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJUdldFBhcmFtOwojIC0tLQojIElUU01Db3JlCiMgLS0tCiMgICAgICAgIGZvciAocXcoU2VydmljZUlEIFBhcmVudElEIE5hbWUgVmFsaWRJRCBDb21tZW50KSkgewogICAgICAgIGZvciAocXcoU2VydmljZUlEIFBhcmVudElEIE5hbWUgVmFsaWRJRCBDb21tZW50IFR5cGVJRCBDcml0aWNhbGl0eSkpIHsKIyAtLS0KICAgICAgICAgICAgJEdldFBhcmFteyRffSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRfICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICBteSAlRXJyb3I7CgogICAgICAgIGlmICggISRHZXRQYXJhbXtOYW1lfSApIHsKICAgICAgICAgICAgJEVycm9yeydOYW1lSW52YWxpZCd9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIGlmICggISVFcnJvciApIHsKCiAgICAgICAgICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgICAgICAgICAjIHNhdmUgdG8gZGF0YWJhc2UKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17U2VydmljZUlEfSBlcSAnTkVXJyApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtTZXJ2aWNlSUR9ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9ye01lc3NhZ2V9ID0gJExvZ09iamVjdC0+R2V0TG9nRW50cnkoCiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCA9PiAnTWVzc2FnZScsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9ye01lc3NhZ2V9ID0gJExvZ09iamVjdC0+R2V0TG9nRW50cnkoCiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCA9PiAnTWVzc2FnZScsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAhJUVycm9yICkgewoKICAgICAgICAgICAgICAgICMgdXBkYXRlIHByZWZlcmVuY2VzCiAgICAgICAgICAgICAgICBteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJEdldFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAoKTsKICAgICAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdTZXJ2aWNlUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAgICAgICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NlcnZpY2VQcmVmZXJlbmNlcycpIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgbXkgJEl0ZW0gKCBzb3J0IGtleXMgJVByZWZlcmVuY2VzICkgewogICAgICAgICAgICAgICAgICAgIG15ICRNb2R1bGUgPSAkUHJlZmVyZW5jZXN7JEl0ZW19LT57TW9kdWxlfQogICAgICAgICAgICAgICAgICAgICAgICB8fCAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlNlcnZpY2VQcmVmZXJlbmNlczo6R2VuZXJpYyc7CgogICAgICAgICAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgICAgICAgICBpZiAoICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCRNb2R1bGUpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNb2R1bGUtPm5ldygKICAgICAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gJFByZWZlcmVuY2VzeyRJdGVtfSwKICAgICAgICAgICAgICAgICAgICAgICAgRGVidWcgICAgICA9PiAkU2VsZi0+e0RlYnVnfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIG15ICROb3RlOwogICAgICAgICAgICAgICAgICAgIG15IEBQYXJhbXMgPSAkT2JqZWN0LT5QYXJhbSggU2VydmljZURhdGEgPT4gXCVTZXJ2aWNlRGF0YSApOwogICAgICAgICAgICAgICAgICAgIGlmIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVHZXRQYXJhbSA9ICgpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFBhcmFtSXRlbSAoQFBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgQEFycmF5ID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJFBhcmFtSXRlbS0+e05hbWV9ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRQYXJhbUl0ZW0tPntOYW1lfSB9ID0gXEBBcnJheTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFBhcmFtICAgID0+IFwlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZURhdGEgPT4gXCVTZXJ2aWNlRGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTm90ZSAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoIEluZm8gPT4gJE9iamVjdC0+RXJyb3IoKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gb3ZlcnZpZXcKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc29tZXRoaW5nIHdlbnQgd3JvbmcKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkRXJyb3J7TWVzc2FnZX0KICAgICAgICAgICAgPyAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgIEluZm8gICAgID0+ICRFcnJvcntNZXNzYWdlfSwKICAgICAgICAgICAgKQogICAgICAgICAgICA6ICcnOwoKICAgICAgICAjIGh0bWwgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tOZXcoCiAgICAgICAgICAgICVFcnJvciwKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNlcnZpY2Ugb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2UgewoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgY2hlY2sgaWYgc2VydmljZSBpcyBlbmFibGVkIHRvIHVzZSBpdCBoZXJlCiAgICAgICAgaWYgKCAhJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSApIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAiUGxlYXNlIGFjdGl2YXRlICVzIGZpcnN0ISIsICJTZXJ2aWNlIiApLAogICAgICAgICAgICAgICAgTGluayA9PgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWRtaW5TeXNDb25maWc7U3ViYWN0aW9uPUVkaXQ7U3lzQ29uZmlnR3JvdXA9VGlja2V0O1N5c0NvbmZpZ1N1Ykdyb3VwPUNvcmU6OlRpY2tldCNUaWNrZXQ6OlNlcnZpY2UnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCB9LAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25BZGQnICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJlc3VsdAogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3QnLAogICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCB9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNlcnZpY2UgbGlzdAogICAgICAgIG15ICRTZXJ2aWNlTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdEdldCgKICAgICAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBpZiB0aGVyZSBhcmUgYW55IHNlcnZpY2VzIGRlZmluZWQsIHRoZXkgYXJlIHNob3duCiAgICAgICAgaWYgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgogICAgICAgICAgICAjIGdldCB2YWxpZCBsaXN0CiAgICAgICAgICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CgogICAgICAgICAgICAjIHNvcnQgdGhlIHNlcnZpY2UgbGlzdCBieSBsb25nIHNlcnZpY2UgbmFtZQogICAgICAgICAgICBAeyRTZXJ2aWNlTGlzdH0gPSBzb3J0IHsgJGEtPntOYW1lfSAuICc6OicgY21wICRiLT57TmFtZX0gLiAnOjonIH0gQHskU2VydmljZUxpc3R9OwoKICAgICAgICAgICAgZm9yIG15ICRTZXJ2aWNlRGF0YSAoIEB7JFNlcnZpY2VMaXN0fSApIHsKCiAgICAgICAgICAgICAgICAjIG91dHB1dCByb3cKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TGlzdFJvdycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICV7JFNlcnZpY2VEYXRhfSwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgPT4gJFZhbGlkTGlzdHsgJFNlcnZpY2VEYXRhLT57VmFsaWRJRH0gfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBmb3VuZCBtc2cgaXMgZGlzcGxheWVkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TZXJ2aWNlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9NYXNrTmV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwogICAgbXkgJVNlcnZpY2VEYXRhOwoKICAgICMgZ2V0IHBhcmFtcwogICAgJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAiU2VydmljZUlEIiApOwogICAgaWYgKCAkU2VydmljZURhdGF7U2VydmljZUlEfSBuZSAnTkVXJyApIHsKICAgICAgICAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIG91dHB1dCBvdmVydmlldwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4geyAlUGFyYW0sIH0sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JyApOwoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGxpc3QgdHlwZQogICAgbXkgJExpc3RUeXBlID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpOwoKICAgICMgZ2VuZXJhdGUgUGFyZW50T3B0aW9uU3RyZwogICAgbXkgJVNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0KAogICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgJFNlcnZpY2VEYXRhe1BhcmVudE9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgICAgPT4gXCVTZXJ2aWNlTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnUGFyZW50SUQnLAogICAgICAgIFNlbGVjdGVkSUQgICAgID0+ICRQYXJhbXtQYXJlbnRJRH0gfHwgJFNlcnZpY2VEYXRhe1BhcmVudElEfSwKICAgICAgICBQb3NzaWJsZU5vbmUgICA9PiAxLAogICAgICAgIFRyZWVWaWV3ICAgICAgID0+ICggJExpc3RUeXBlIGVxICd0cmVlJyApID8gMSA6IDAsCiAgICAgICAgRGlzYWJsZWRCcmFuY2ggPT4gJFNlcnZpY2VEYXRhe05hbWV9LAogICAgICAgIFRyYW5zbGF0aW9uICAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAjIGdlbmVyYXRlIFR5cGVPcHRpb25TdHJnCiAgICBteSAkVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgKTsKCiAgICAjIGJ1aWxkIHRoZSB0eXBlIGRyb3Bkb3duCiAgICAkU2VydmljZURhdGF7VHlwZU9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiAkVHlwZUxpc3QsCiAgICAgICAgTmFtZSAgICAgICA9PiAnVHlwZUlEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtUeXBlSUR9IHx8ICRTZXJ2aWNlRGF0YXtUeXBlSUR9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgYnVpbGQgdGhlIGNyaXRpY2FsaXR5IGRyb3Bkb3duCiAgICAkU2VydmljZURhdGF7Q3JpdGljYWxpdHlPcHRpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9LAogICAgICAgIE5hbWUgICAgICAgPT4gJ0NyaXRpY2FsaXR5JywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtDcml0aWNhbGl0eX0gfHwgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKIyAtLS0KCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICRTZXJ2aWNlRGF0YXtWYWxpZE9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRTZXJ2aWNlRGF0YXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBvdXRwdXQgc2VydmljZSBlZGl0CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTZXJ2aWNlRWRpdCcsCiAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJVNlcnZpY2VEYXRhLCB9LAogICAgKTsKCiAgICAjIHNob3dzIGhlYWRlcgogICAgaWYgKCAkU2VydmljZURhdGF7U2VydmljZUlEfSBuZSAnTkVXJyApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyRWRpdCcsCiAgICAgICAgICAgIERhdGEgPT4geyVTZXJ2aWNlRGF0YX0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJBZGQnICk7CiAgICB9CgogICAgIyBzaG93IGVhY2ggcHJlZmVyZW5jZXMgc2V0dGluZwogICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnU2VydmljZVByZWZlcmVuY2VzJykgKSB7CiAgICAgICAgJVByZWZlcmVuY2VzID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdTZXJ2aWNlUHJlZmVyZW5jZXMnKSB9OwogICAgfQogICAgZm9yIG15ICRJdGVtICggc29ydCBrZXlzICVQcmVmZXJlbmNlcyApIHsKICAgICAgICBteSAkTW9kdWxlID0gJFByZWZlcmVuY2VzeyRJdGVtfS0+e01vZHVsZX0KICAgICAgICAgICAgfHwgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpTZXJ2aWNlUHJlZmVyZW5jZXM6OkdlbmVyaWMnOwoKICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICB9CiAgICAgICAgbXkgJE9iamVjdCA9ICRNb2R1bGUtPm5ldygKICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gJFByZWZlcmVuY2VzeyRJdGVtfSwKICAgICAgICAgICAgRGVidWcgICAgICA9PiAkU2VsZi0+e0RlYnVnfSwKICAgICAgICApOwogICAgICAgIG15IEBQYXJhbXMgPSAkT2JqZWN0LT5QYXJhbSggU2VydmljZURhdGEgPT4gXCVTZXJ2aWNlRGF0YSApOwogICAgICAgIGlmIChAUGFyYW1zKSB7CiAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJdGVtJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICByZWYoICRQYXJhbUl0ZW0tPntEYXRhfSApIGVxICdIQVNIJwogICAgICAgICAgICAgICAgICAgIHx8IHJlZiggJFByZWZlcmVuY2VzeyRJdGVtfS0+e0RhdGF9ICkgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICVCdWlsZFNlbGVjdGlvblBhcmFtcyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFByZWZlcmVuY2VzeyRJdGVtfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAleyRQYXJhbUl0ZW19LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJEJ1aWxkU2VsZWN0aW9uUGFyYW1ze0NsYXNzfSA9IGpvaW4oICcgJywgJEJ1aWxkU2VsZWN0aW9uUGFyYW1ze0NsYXNzfSAvLyAnJywgJ01vZGVybml6ZScgKTsKCiAgICAgICAgICAgICAgICAgICAgJFBhcmFtSXRlbS0+eydPcHRpb24nfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAlQnVpbGRTZWxlY3Rpb25QYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFtSXRlbS0+e0Jsb2NrfSB8fCAkUHJlZmVyZW5jZXN7JEl0ZW19LT57QmxvY2t9IHx8ICdPcHRpb24nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAleyAkUHJlZmVyZW5jZXN7JEl0ZW19IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFBhcmFtSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblNlcnZpY2UnLAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtCiAgICApOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gS2VybmVsL01vZHVsZXMvQWRtaW5TTEEucG0KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pblNMQTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRTTEFPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwojIC0tLQogICAgbXkgJUVycm9yICAgICAgICA9ICgpOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2xhIGVkaXQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTTEFFZGl0JyApIHsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzbGEgc2F2ZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NMQVNhdmUnICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAlR2V0UGFyYW07CiAgICAgICAgZm9yIG15ICRQYXJhbSAoCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyAgICAgICAgICAgIHF3KFNMQUlEIE5hbWUgQ2FsZW5kYXIgRmlyc3RSZXNwb25zZVRpbWUgRmlyc3RSZXNwb25zZU5vdGlmeSBTb2x1dGlvblRpbWUgU29sdXRpb25Ob3RpZnkgVXBkYXRlVGltZSBVcGRhdGVOb3RpZnkgVmFsaWRJRCBDb21tZW50KQogICAgICAgICAgICBxdyhTTEFJRCBOYW1lIENhbGVuZGFyIEZpcnN0UmVzcG9uc2VUaW1lIEZpcnN0UmVzcG9uc2VOb3RpZnkgU29sdXRpb25UaW1lIFNvbHV0aW9uTm90aWZ5IFVwZGF0ZVRpbWUgVXBkYXRlTm90aWZ5IFZhbGlkSUQgQ29tbWVudCBUeXBlSUQgTWluVGltZUJldHdlZW5JbmNpZGVudHMpCiMgLS0tCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW19ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgICAgICVFcnJvciA9ICgpOwogICAgICAgIGlmICggISRHZXRQYXJhbXtOYW1lfSApIHsKICAgICAgICAgICAgJEVycm9yeydOYW1lSW52YWxpZCd9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgICAgICMgaWYgbm8gZXJyb3JzIG9jY3VycmVkCiAgICAgICAgaWYgKCAhJUVycm9yICkgewoKICAgICAgICAgICAgIyBnZXQgc2VydmljZSBpZHMKICAgICAgICAgICAgbXkgQFNlcnZpY2VJRHMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnU2VydmljZUlEcycgKTsKICAgICAgICAgICAgJEdldFBhcmFte1NlcnZpY2VJRHN9ID0gXEBTZXJ2aWNlSURzOwoKICAgICAgICAgICAgIyBzYXZlIHRvIGRhdGFiYXNlCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtTTEFJRH0gKSB7CgogICAgICAgICAgICAgICAgIyBhZGQgYSBuZXcgc2xhCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17U0xBSUR9ID0gJFNMQU9iamVjdC0+U0xBQWRkKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtTTEFJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9ye01lc3NhZ2V9ID0gJExvZ09iamVjdC0+R2V0TG9nRW50cnkoCiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCA9PiAnTWVzc2FnZScsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgc2xhCiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTTEFPYmplY3QtPlNMQVVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TWVzc2FnZX0gPSAkTG9nT2JqZWN0LT5HZXRMb2dFbnRyeSgKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBXaGF0ID0+ICdNZXNzYWdlJywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICElRXJyb3IgKSB7CgogICAgICAgICAgICAgICAgIyB1cGRhdGUgcHJlZmVyZW5jZXMKICAgICAgICAgICAgICAgIG15ICVTTEFEYXRhID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICAgICAgICAgIFNMQUlEICA9PiAkR2V0UGFyYW17U0xBSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICAgICAgICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnU0xBUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAgICAgICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NMQVByZWZlcmVuY2VzJykgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciBteSAkSXRlbSAoIHNvcnQga2V5cyAlUHJlZmVyZW5jZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJE1vZHVsZSA9ICRQcmVmZXJlbmNlc3skSXRlbX0tPntNb2R1bGV9CiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6U0xBUHJlZmVyZW5jZXM6OkdlbmVyaWMnOwoKICAgICAgICAgICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIG15ICRPYmplY3QgPSAkTW9kdWxlLT5uZXcoCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtID0+ICRQcmVmZXJlbmNlc3skSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnICAgICAgPT4gJFNlbGYtPntEZWJ1Z30sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBteSAkTm90ZTsKICAgICAgICAgICAgICAgICAgICBteSBAUGFyYW1zID0gJE9iamVjdC0+UGFyYW0oIFNMQURhdGEgPT4gXCVTTEFEYXRhICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKEBQYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUdldFBhcmFtID0gKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSBAQXJyYXkgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW1JdGVtLT57TmFtZX0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFBhcmFtSXRlbS0+e05hbWV9IH0gPSBcQEFycmF5OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICEkT2JqZWN0LT5SdW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0gPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTEFEYXRhICA9PiBcJVNMQURhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5vdGUgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBJbmZvID0+ICRPYmplY3QtPkVycm9yKCkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkRXJyb3J7TWVzc2FnZX0KICAgICAgICAgICAgPyAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgIEluZm8gICAgID0+ICRFcnJvcntNZXNzYWdlfSwKICAgICAgICAgICAgKQogICAgICAgICAgICA6ICcnOwoKICAgICAgICAjIGh0bWwgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tOZXcoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAlRXJyb3IsCiAgICAgICAgKTsKCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNsYSBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjaGVjayBpZiBzZXJ2aWNlIGlzIGVuYWJsZWQgdG8gdXNlIGl0IGhlcmUKICAgICAgICBpZiAoICEkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpICkgewogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICJQbGVhc2UgYWN0aXZhdGUgJXMgZmlyc3QhIiwgIlNlcnZpY2UiICksCiAgICAgICAgICAgICAgICBMaW5rID0+CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj1BZG1pblN5c0NvbmZpZztTdWJhY3Rpb249RWRpdDtTeXNDb25maWdHcm91cD1UaWNrZXQ7U3lzQ29uZmlnU3ViR3JvdXA9Q29yZTo6VGlja2V0I1RpY2tldDo6U2VydmljZScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25BZGQnICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJlc3VsdAogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3QnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgICAgICBteSAlU2VydmljZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTGlzdCgKICAgICAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdmFsaWQgbGlzdAogICAgICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CgogICAgICAgICMgZ2V0IHNsYSBsaXN0CiAgICAgICAgbXkgJVNMQUxpc3QgPSAkU0xBT2JqZWN0LT5TTEFMaXN0KAogICAgICAgICAgICBWYWxpZCAgPT4gMCwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGlmIHRoZXJlIGFyZSBhbnkgU0xBJ3MgZGVmaW5lZCwgdGhleSBhcmUgc2hvd24KICAgICAgICBpZiAoJVNMQUxpc3QpIHsKICAgICAgICAgICAgU0xBSUQ6CiAgICAgICAgICAgIGZvciBteSAkU0xBSUQgKCBzb3J0IHsgbGMgJFNMQUxpc3R7JGF9IGNtcCBsYyAkU0xBTGlzdHskYn0gfSBrZXlzICVTTEFMaXN0ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBzbGEgZGF0YQogICAgICAgICAgICAgICAgbXkgJVNMQURhdGEgPSAkU0xBT2JqZWN0LT5TTEFHZXQoCiAgICAgICAgICAgICAgICAgICAgU0xBSUQgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIHRoZSBzZXJ2aWNlIGxpc3QKICAgICAgICAgICAgICAgIG15IEBTZXJ2aWNlTGlzdDsKICAgICAgICAgICAgICAgIGZvciBteSAkU2VydmljZUlEICgKICAgICAgICAgICAgICAgICAgICBzb3J0IHsgbGMgJFNlcnZpY2VMaXN0eyRhfSBjbXAgbGMgJFNlcnZpY2VMaXN0eyRifSB9CiAgICAgICAgICAgICAgICAgICAgQHsgJFNMQURhdGF7U2VydmljZUlEc30gfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBTZXJ2aWNlTGlzdCwgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9IHx8ICctJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyBsaXN0IHJvdwogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVNMQURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gJFNlcnZpY2VMaXN0WzBdIHx8ICctJywKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgPT4gJFZhbGlkTGlzdHsgJFNMQURhdGF7VmFsaWRJRH0gfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IFNMQUlEIGlmIHNjYWxhciBAU2VydmljZUxpc3QgPD0gMTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSB0aGUgZmlyc3Qgc2VydmljZSBpZAogICAgICAgICAgICAgICAgc2hpZnQgQFNlcnZpY2VMaXN0OwoKICAgICAgICAgICAgICAgIGZvciBteSAkU2VydmljZU5hbWUgKEBTZXJ2aWNlTGlzdCkgewoKICAgICAgICAgICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyBsaXN0IHJvdwogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3RSb3cnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBmb3VuZCBtc2cgaXMgZGlzcGxheWVkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TTEEnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgpzdWIgX01hc2tOZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAlU0xBRGF0YTsKICAgICRTTEFEYXRhe1NMQUlEfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTTEFJRCcgKSB8fCAnJzsKCiAgICBpZiAoICRTTEFEYXRhe1NMQUlEfSApIHsKCiAgICAgICAgIyBnZXQgc2xhIGRhdGEKICAgICAgICAlU0xBRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKS0+U0xBR2V0KAogICAgICAgICAgICBTTEFJRCAgPT4gJFNMQURhdGF7U0xBSUR9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU0xBRGF0YXtTZXJ2aWNlSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlcnZpY2VJRCcgKTsKICAgIH0KCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBsaXN0IHR5cGUKICAgIG15ICRMaXN0VHlwZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKTsKCiAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgIG15ICVTZXJ2aWNlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VMaXN0KAogICAgICAgIFZhbGlkICAgICAgICA9PiAxLAogICAgICAgIEtlZXBDaGlsZHJlbiA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZTo6S2VlcENoaWxkcmVuJykgLy8gMCwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2VuZXJhdGUgU2VydmljZU9wdGlvblN0cmcKICAgICRQYXJhbXtTZXJ2aWNlT3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcJVNlcnZpY2VMaXN0LAogICAgICAgIE5hbWUgICAgICAgID0+ICdTZXJ2aWNlSURzJywKICAgICAgICBTZWxlY3RlZElEICA9PiAkU0xBRGF0YXtTZXJ2aWNlSURzfSB8fCBbXSwKICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgICAgIFNpemUgICAgICAgID0+IDUsCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICBUcmVlVmlldyAgICA9PiAoICRMaXN0VHlwZSBlcSAndHJlZScgKSA/IDEgOiAwLAogICAgICAgIE1heCAgICAgICAgID0+IDIwMCwKICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAjIGdlbmVyYXRlIFR5cGVPcHRpb25TdHJnCiAgICAgICAgbXkgJFR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKICAgICAgICApOwogICAgICAgICRQYXJhbXtUeXBlT3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICA9PiAkVHlwZUxpc3QsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFNMQURhdGF7VHlwZUlEfSwKICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICApOwojIC0tLQoKICAgICMgZ2VuZXJhdGUgQ2FsZW5kYXJPcHRpb25TdHJnCiAgICBteSAlQ2FsZW5kYXJMaXN0OwoKICAgIG15ICRNYXhpbXVtID0gJENvbmZpZ09iamVjdC0+R2V0KCJNYXhpbXVtQ2FsZW5kYXJOdW1iZXIiKSB8fCA1MDsKCiAgICBmb3IgbXkgJENhbGVuZGFyTnVtYmVyICggJycsIDEgLi4gJE1heGltdW0gKSB7CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpbWVWYWNhdGlvbkRheXM6OkNhbGVuZGFyJENhbGVuZGFyTnVtYmVyIikgKSB7CiAgICAgICAgICAgICRDYWxlbmRhckxpc3R7JENhbGVuZGFyTnVtYmVyfSA9ICJDYWxlbmRhciAkQ2FsZW5kYXJOdW1iZXIgLSAiCiAgICAgICAgICAgICAgICAuICRDb25maWdPYmplY3QtPkdldCggIlRpbWVab25lOjpDYWxlbmRhciIgLiAkQ2FsZW5kYXJOdW1iZXIgLiAiTmFtZSIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU0xBRGF0YXtDYWxlbmRhck9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlQ2FsZW5kYXJMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAnQ2FsZW5kYXInLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17Q2FsZW5kYXJ9IHx8ICRTTEFEYXRhe0NhbGVuZGFyfSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwogICAgbXkgJU5vdGlmeUxldmVsTGlzdCA9ICgKICAgICAgICAxMCA9PiAnMTAlJywKICAgICAgICAyMCA9PiAnMjAlJywKICAgICAgICAzMCA9PiAnMzAlJywKICAgICAgICA0MCA9PiAnNDAlJywKICAgICAgICA1MCA9PiAnNTAlJywKICAgICAgICA2MCA9PiAnNjAlJywKICAgICAgICA3MCA9PiAnNzAlJywKICAgICAgICA4MCA9PiAnODAlJywKICAgICAgICA5MCA9PiAnOTAlJywKICAgICk7CiAgICAkU0xBRGF0YXtGaXJzdFJlc3BvbnNlTm90aWZ5T3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVOb3RpZnlMZXZlbExpc3QsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdGaXJzdFJlc3BvbnNlTm90aWZ5JywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte0ZpcnN0UmVzcG9uc2VOb3RpZnl9IHx8ICRTTEFEYXRhe0ZpcnN0UmVzcG9uc2VOb3RpZnl9LAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgKTsKICAgICRTTEFEYXRhe1VwZGF0ZU5vdGlmeU9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlTm90aWZ5TGV2ZWxMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAnVXBkYXRlTm90aWZ5JywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1VwZGF0ZU5vdGlmeX0gfHwgJFNMQURhdGF7VXBkYXRlTm90aWZ5fSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICk7CiAgICAkU0xBRGF0YXtTb2x1dGlvbk5vdGlmeU9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlTm90aWZ5TGV2ZWxMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAnU29sdXRpb25Ob3RpZnknLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17U29sdXRpb25Ob3RpZnl9IHx8ICRTTEFEYXRhe1NvbHV0aW9uTm90aWZ5fSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICk7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAkU0xBRGF0YXtWYWxpZE9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtWYWxpZElEfSB8fCAkU0xBRGF0YXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBvdXRwdXQgc2xhIGVkaXQKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtCiAgICAgICAgfSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU0xBRWRpdCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJVNMQURhdGEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBzaG93cyBoZWFkZXIKICAgIGlmICggJFNMQURhdGF7U0xBSUR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJFZGl0JyApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0hlYWRlckFkZCcgKTsKICAgIH0KCiAgICAjIHNob3cgZWFjaCBwcmVmZXJlbmNlcyBzZXR0aW5nCiAgICBteSAlUHJlZmVyZW5jZXMgPSAoKTsKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdTTEFQcmVmZXJlbmNlcycpICkgewogICAgICAgICVQcmVmZXJlbmNlcyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnU0xBUHJlZmVyZW5jZXMnKSB9OwogICAgfQogICAgZm9yIG15ICRJdGVtICggc29ydCBrZXlzICVQcmVmZXJlbmNlcyApIHsKICAgICAgICBteSAkTW9kdWxlID0gJFByZWZlcmVuY2VzeyRJdGVtfS0+e01vZHVsZX0KICAgICAgICAgICAgfHwgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpTTEFQcmVmZXJlbmNlczo6R2VuZXJpYyc7CgogICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICBpZiAoICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCRNb2R1bGUpICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgIH0KICAgICAgICBteSAkT2JqZWN0ID0gJE1vZHVsZS0+bmV3KAogICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAkUHJlZmVyZW5jZXN7JEl0ZW19LAogICAgICAgICAgICBEZWJ1ZyAgICAgID0+ICRTZWxmLT57RGVidWd9LAogICAgICAgICk7CiAgICAgICAgbXkgQFBhcmFtcyA9ICRPYmplY3QtPlBhcmFtKCBTTEFEYXRhID0+IFwlU0xBRGF0YSApOwogICAgICAgIGlmIChAUGFyYW1zKSB7CiAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTTEFJdGVtJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICByZWYoICRQYXJhbUl0ZW0tPntEYXRhfSApIGVxICdIQVNIJwogICAgICAgICAgICAgICAgICAgIHx8IHJlZiggJFByZWZlcmVuY2VzeyRJdGVtfS0+e0RhdGF9ICkgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICVCdWlsZFNlbGVjdGlvblBhcmFtcyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFByZWZlcmVuY2VzeyRJdGVtfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAleyRQYXJhbUl0ZW19LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJEJ1aWxkU2VsZWN0aW9uUGFyYW1ze0NsYXNzfSA9IGpvaW4oICcgJywgJEJ1aWxkU2VsZWN0aW9uUGFyYW1ze0NsYXNzfSAvLyAnJywgJ01vZGVybml6ZScgKTsKCiAgICAgICAgICAgICAgICAgICAgJFBhcmFtSXRlbS0+eydPcHRpb24nfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAlQnVpbGRTZWxlY3Rpb25QYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFtSXRlbS0+e0Jsb2NrfSB8fCAkUHJlZmVyZW5jZXN7JEl0ZW19LT57QmxvY2t9IHx8ICdPcHRpb24nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAleyAkUHJlZmVyZW5jZXN7JEl0ZW19IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFBhcmFtSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgb3V0cHV0IGJhY2sKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblNMQScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0KICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyBnZXQgc2VydmljZSBsaXN0CiAgICBteSAkU2VydmljZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTGlzdEdldCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNldCBpbmNpZGVudCBzaWduYWwKICAgIG15ICVJbmNpU2lnbmFscyA9ICgKICAgICAgICBvcGVyYXRpb25hbCA9PiAnZ3JlZW5sZWQnLAogICAgICAgIHdhcm5pbmcgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgICAgIGluY2lkZW50ICAgID0+ICdyZWRsZWQnLAogICAgKTsKCiAgICBpZiAoIEB7JFNlcnZpY2VMaXN0fSApIHsKCiAgICAgICAgIyBzb3J0IHRoZSBzZXJ2aWNlIGxpc3QgYnkgbG9uZyBzZXJ2aWNlIG5hbWUKICAgICAgICBAeyRTZXJ2aWNlTGlzdH0gPSBzb3J0IHsgJGEtPntOYW1lfSAuICc6OicgY21wICRiLT57TmFtZX0gLiAnOjonIH0gQHskU2VydmljZUxpc3R9OwoKICAgICAgICBmb3IgbXkgJFNlcnZpY2VEYXRhICggQHskU2VydmljZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcgcm93CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJXskU2VydmljZURhdGF9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgPT4gJFNlcnZpY2VEYXRhLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVNpZ25hbCA9PiAkSW5jaVNpZ25hbHN7ICRTZXJ2aWNlRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9IH0sCiAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkU2VydmljZURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGl0IGRpc3BsYXlzIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlCiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICk7CiAgICB9CgogICAgIyBpbnZlc3RpZ2F0ZSByZWZyZXNoCiAgICBteSAkUmVmcmVzaCA9ICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA/IDYwICogJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9IDogdW5kZWY7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgIFRpdGxlICAgPT4gJ092ZXJ2aWV3JywKICAgICAgICBSZWZyZXNoID0+ICRSZWZyZXNoLAogICAgKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVNlcnZpY2UnLAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TZXJ2aWNlUHJpbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJFNlcnZpY2VJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZXJ2aWNlSUQnICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFNlcnZpY2VJRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNlcnZpY2UKICAgIG15ICVTZXJ2aWNlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUdldCgKICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLAogICAgKTsKICAgIGlmICggISRTZXJ2aWNle1NlcnZpY2VJRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJTZXJ2aWNlSUQgJFNlcnZpY2VJRCBub3QgZm91bmQgaW4gZGF0YWJhc2UhIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzbGEgbGlzdAogICAgbXkgJVNMQUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUxpc3QoCiAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNle1NlcnZpY2VJRH0sCiAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgdXNlciBvYmplY3QKICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAjIGdldCB1c2VyIGRhdGEgKGNyZWF0ZSBieSkKICAgICRTZXJ2aWNle0NyZWF0ZUJ5TmFtZX0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTZXJ2aWNle0NyZWF0ZUJ5fSwKICAgICk7CgogICAgIyBnZXQgdXNlciBkYXRhIChjaGFuZ2UgYnkpCiAgICAkU2VydmljZXtDaGFuZ2VCeU5hbWV9ID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU2VydmljZXtDaGFuZ2VCeX0sCiAgICApOwoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBnZW5lcmF0ZSBwZGYgb3V0cHV0CiAgICBteSAlUGFnZTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBtYXhpbXVtIG51bWJlciBvZiBwYWdlcwogICAgJFBhZ2V7TWF4UGFnZXN9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdQREY6Ok1heFBhZ2VzJyk7CiAgICBpZiAoICEkUGFnZXtNYXhQYWdlc30gfHwgJFBhZ2V7TWF4UGFnZXN9IDwgMSB8fCAkUGFnZXtNYXhQYWdlc30gPiAxMDAwICkgewogICAgICAgICRQYWdle01heFBhZ2VzfSA9IDEwMDsKICAgIH0KICAgICRQYWdle01hcmdpblRvcH0gICAgPSAzMDsKICAgICRQYWdle01hcmdpblJpZ2h0fSAgPSA0MDsKICAgICRQYWdle01hcmdpbkJvdHRvbX0gPSA0MDsKICAgICRQYWdle01hcmdpbkxlZnR9ICAgPSA0MDsKICAgICRQYWdle0hlYWRlclJpZ2h0fSAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1NlcnZpY2UnKTsKICAgICRQYWdle1BhZ2VUZXh0fSAgICAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1BhZ2UnKTsKICAgICRQYWdle1BhZ2VDb3VudH0gICAgPSAxOwoKICAgICMgY3JlYXRlIG5ldyBwZGYgZG9jdW1lbnQKICAgICRQREZPYmplY3QtPkRvY3VtZW50TmV3KAogICAgICAgIFRpdGxlICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Byb2R1Y3QnKSAuICc6ICcgLiAkU2VydmljZXtOYW1lU2hvcnR9LAogICAgICAgIEVuY29kZSA9PiAkTGF5b3V0T2JqZWN0LT57VXNlckNoYXJzZXR9LAogICAgKTsKCiAgICAjIGNyZWF0ZSBmaXJzdCBwZGYgcGFnZQogICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAlUGFnZSwKICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZXtQYWdlVGV4dH0gLiAnICcgLiAkUGFnZXtQYWdlQ291bnR9LAogICAgKTsKICAgICRQYWdle1BhZ2VDb3VudH0rKzsKCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC02LAogICAgKTsKCiAgICAjIG91dHB1dCB0aXRsZQogICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICBUZXh0ICAgICA9PiAkU2VydmljZXtOYW1lU2hvcnR9LAogICAgICAgIEZvbnRTaXplID0+IDEzLAogICAgKTsKCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC02LAogICAgKTsKCiAgICAjIG91dHB1dCAicHJpbnRlZCBieSIKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ3ByaW50ZWQgYnknKSAuICcgJwogICAgICAgICAgICAuICRTZWxmLT57VXNlckZ1bGxuYW1lfSAuICcgJwogICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntUaW1lfSwKICAgICAgICBGb250U2l6ZSA9PiA5LAogICAgKTsKCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC0xNCwKICAgICk7CgogICAgIyBvdXRwdXQgZ2VuZXJhbCBpbmZvcwogICAgJFNlbGYtPl9QREZPdXRwdXRHZW5lcmFsSW5mb3MoCiAgICAgICAgUGFnZSAgICA9PiBcJVBhZ2UsCiAgICAgICAgU2VydmljZSA9PiBcJVNlcnZpY2UsCiAgICApOwoKICAgICMgb3V0cHV0IGFzc29jaWF0ZWQgc2xhcwogICAgaWYgKCVTTEFMaXN0KSB7CiAgICAgICAgJFNlbGYtPl9QREZPdXRwdXRBc3NvY2lhdGVkU0xBcygKICAgICAgICAgICAgUGFnZSAgICA9PiBcJVBhZ2UsCiAgICAgICAgICAgIFNMQUxpc3QgPT4gXCVTTEFMaXN0LAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgZGV0YWlsZWQgaW5mb3MKICAgICRTZWxmLT5fUERGT3V0cHV0RGV0YWlsZWRJbmZvcygKICAgICAgICBQYWdlICAgID0+IFwlUGFnZSwKICAgICAgICBTZXJ2aWNlID0+IFwlU2VydmljZSwKICAgICk7CgogICAgIyBjcmVhdGUgZmlsZSBuYW1lCiAgICBteSAkRmlsZW5hbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5GaWxlbmFtZUNsZWFuVXAoCiAgICAgICAgRmlsZW5hbWUgPT4gJFNlcnZpY2V7TmFtZVNob3J0fSwKICAgICAgICBUeXBlICAgICA9PiAnQXR0YWNobWVudCcsCiAgICApOwoKICAgICMgZ2V0IHRpbWUgb2JqZWN0CiAgICBteSAkVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyk7CgogICAgbXkgKCAkcywgJG0sICRoLCAkRCwgJE0sICRZICkgPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSwKICAgICk7CiAgICAkTSA9IHNwcmludGYoICIlMDJkIiwgJE0gKTsKICAgICREID0gc3ByaW50ZiggIiUwMmQiLCAkRCApOwogICAgJGggPSBzcHJpbnRmKCAiJTAyZCIsICRoICk7CiAgICAkbSA9IHNwcmludGYoICIlMDJkIiwgJG0gKTsKCiAgICAjIHJldHVybiB0aGUgcGRmIGRvY3VtZW50CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBGaWxlbmFtZSAgICA9PiAnc2VydmljZV8nIC4gJEZpbGVuYW1lIC4gIl8kWS0kTS0kRFxfJGgtJG0ucGRmIiwKICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vcGRmJywKICAgICAgICBDb250ZW50ICAgICA9PiAkUERGT2JqZWN0LT5Eb2N1bWVudE91dHB1dCgpLAogICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgKTsKfQoKc3ViIF9QREZPdXRwdXRHZW5lcmFsSW5mb3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBTZXJ2aWNlKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNyZWF0ZSBsZWZ0IHRhYmxlCiAgICBteSAkVGFibGVMZWZ0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdTZXJ2aWNlJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtTZXJ2aWNlfS0+e05hbWVTaG9ydH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3VycmVudCBJbmNpZGVudCBTdGF0ZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U2VydmljZX0tPntDdXJJbmNpU3RhdGV9LAogICAgICAgIH0sCiAgICBdOwoKICAgICMgY3JlYXRlIHJpZ2h0IHRhYmxlCiAgICBteSAkVGFibGVSaWdodCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3JlYXRlZCcpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9PiAnWyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gXCV7ICRQYXJhbXtTZXJ2aWNlfSB9LAogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NyZWF0ZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NlcnZpY2V9LT57Q3JlYXRlQnlOYW1lfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdMYXN0IGNoYW5nZWQnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwleyAkUGFyYW17U2VydmljZX0gfSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdMYXN0IGNoYW5nZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NlcnZpY2V9LT57Q3JlYXRlQnlOYW1lfSwKICAgICAgICB9LAogICAgXTsKCiAgICBteSAkUm93cyA9IEB7JFRhYmxlTGVmdH07CiAgICBpZiAoIEB7JFRhYmxlUmlnaHR9ID4gJFJvd3MgKSB7CiAgICAgICAgJFJvd3MgPSBAeyRUYWJsZVJpZ2h0fTsKICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57VmFsdWV9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtDb250ZW50fSAgICAgICAgID0gJyAnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNGRkZGRkYnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzRde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57VmFsdWV9OwogICAgfQogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSAxNzAuNTsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzJde1dpZHRofSA9IDQ7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVszXXtXaWR0aH0gPSA4MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzRde1dpZHRofSA9IDE3MC41OwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvckV2ZW59ICA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICAgICAgID0gMzsKCiAgICAjIGdldCBQREYgb2JqZWN0CiAgICBteSAkUERGT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpOwoKICAgICMgb3V0cHV0IHRhYmxlCiAgICBQQUdFOgogICAgZm9yICggJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSAuLiAkUGFyYW17UGFnZX0tPntNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFBERk9iamVjdC0+VGFibGUoJVRhYmxlUGFyYW0pOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBsYXN0IFBBR0UgaWYgJFRhYmxlUGFyYW17U3RhdGV9OwoKICAgICAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICAgICAleyAkUGFyYW17UGFnZX0gfSwKICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhcmFte1BhZ2V9LT57UGFnZVRleHR9IC4gJyAnIC4gJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fQogICAgICAgICk7CiAgICAgICAgJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSsrOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91dHB1dERldGFpbGVkSW5mb3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBTZXJ2aWNlKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgUERGIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE1LAogICAgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgIFRleHQgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU2VydmljZScpLAogICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgY3JlYXRlIHRhYmxlCiAgICBteSAkVGFibGUgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1NlcnZpY2UnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NlcnZpY2V9LT57TmFtZX0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVHlwZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRQYXJhbXtTZXJ2aWNlfS0+e1R5cGV9ICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3JpdGljYWxpdHknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkUGFyYW17U2VydmljZX0tPntDcml0aWNhbGl0eX0gKSwKICAgICAgICB9LAogICAgXTsKICAgIG15ICVUYWJsZVBhcmFtOwogICAgbXkgJFJvd3MgPSBAeyRUYWJsZX07CiAgICBmb3IgbXkgJFJvdyAoIDEgLi4gJFJvd3MgKSB7CiAgICAgICAgJFJvdy0tOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtDb250ZW50fSA9ICRUYWJsZS0+WyRSb3ddLT57S2V5fTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzFde0NvbnRlbnR9ID0gJFRhYmxlLT5bJFJvd10tPntWYWx1ZX07CiAgICB9CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA4MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDQzMTsKICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgICAgICA9IDY7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ICAgICAgPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgKCAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9IC4uICRQYXJhbXtQYWdlfS0+e01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGxhc3QgUEFHRSBpZiAkVGFibGVQYXJhbXtTdGF0ZX07CgogICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfUERGT3V0cHV0QXNzb2NpYXRlZFNMQXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBTTEFMaXN0KSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJVRhYmxlUGFyYW07CiAgICBteSAkUm93ID0gMDsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2VuZXJhdGUgdGFibGUgZGF0YQogICAgZm9yIG15ICRTTEFJRCAoIHNvcnQga2V5cyAleyAkUGFyYW17U0xBTGlzdH0gfSApIHsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1NMQScpIC4gJzonOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMV17Q29udGVudH0gPSAkUGFyYW17U0xBTGlzdH0tPnskU0xBSUR9OwogICAgICAgICRSb3crKzsKICAgIH0KICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gNDMxOwoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC0xNSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdBc3NvY2lhdGVkIFNMQXMnKSwKICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC00LAogICAgKTsKCiAgICAjIHRhYmxlIHBhcmFtcwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICA9IDA7CiAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvcn0gPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgKCAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9IC4uICRQYXJhbXtQYWdlfS0+e01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGxhc3QgUEFHRSBpZiAkVGFibGVQYXJhbXtTdGF0ZX07CgogICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TZXJ2aWNlWm9vbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkU2VydmljZUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlcnZpY2VJRCcgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkU2VydmljZUlEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTm8gU2VydmljZUlEIGlzIGdpdmVuIScsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbi4nLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgc2VydmljZQogICAgbXkgJVNlcnZpY2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCAhJFNlcnZpY2V7U2VydmljZUlEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlNlcnZpY2VJRCAkU2VydmljZUlEIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEiLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgcnVuIGNvbmZpZyBpdGVtIG1lbnUgbW9kdWxlcwogICAgaWYgKCByZWYgJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNU2VydmljZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSBlcSAnSEFTSCcgKSB7CiAgICAgICAgbXkgJU1lbnVzICAgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01TZXJ2aWNlOjpGcm9udGVuZDo6TWVudU1vZHVsZScpIH07CiAgICAgICAgbXkgJENvdW50ZXIgPSAwOwogICAgICAgIGZvciBteSAkTWVudSAoIHNvcnQga2V5cyAlTWVudXMgKSB7CgogICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSggJE1lbnVzeyRNZW51fS0+e01vZHVsZX0gKSApIHsKICAgICAgICAgICAgICAgIG15ICRPYmplY3QgPSAkTWVudXN7JE1lbnV9LT57TW9kdWxlfS0+bmV3KAogICAgICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VsZi0+e1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2V0IGNsYXNzZXMKICAgICAgICAgICAgICAgIGlmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnUG9wVXAnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnV9LT57TWVudUNsYXNzfSA9ICdBc1BvcHVwJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnQmFjaycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntNZW51Q2xhc3N9ID0gJ0hpc3RvcnlCYWNrJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBydW4gbW9kdWxlCiAgICAgICAgICAgICAgICAkQ291bnRlciA9ICRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiBcJVNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgQ291bnRlciA9PiAkQ291bnRlciwKICAgICAgICAgICAgICAgICAgICBDb25maWcgID0+ICRNZW51c3skTWVudX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBzbGEgb2JqZWN0CiAgICBteSAkU0xBT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwoKICAgICMgZ2V0IHNsYSBsaXN0CiAgICBteSAlU0xBTGlzdCA9ICRTTEFPYmplY3QtPlNMQUxpc3QoCiAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoJVNMQUxpc3QpIHsKCiAgICAgICAgIyBvdXRwdXQgcm93CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NMQScsCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRTTEFJRCAoIHNvcnQgeyAkU0xBTGlzdHskYX0gY21wICRTTEFMaXN0eyRifSB9IGtleXMgJVNMQUxpc3QgKSB7CgogICAgICAgICAgICAjIGdldCBzbGEgZGF0YQogICAgICAgICAgICBteSAlU0xBID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICAgICAgU0xBSUQgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCByb3cKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTTEFSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVNMQSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGxpbmtlZCBvYmplY3RzCiAgICBteSAkTGlua0xpc3RXaXRoRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JyktPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgT2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBLZXkgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICBTdGF0ZSAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBsaW5rIHRhYmxlIHZpZXcgbW9kZQogICAgbXkgJExpbmtUYWJsZVZpZXdNb2RlID0gJENvbmZpZ09iamVjdC0+R2V0KCdMaW5rT2JqZWN0OjpWaWV3TW9kZScpOwoKICAgICMgY3JlYXRlIHRoZSBsaW5rIHRhYmxlCiAgICBteSAkTGlua1RhYmxlU3RyZyA9ICRMYXlvdXRPYmplY3QtPkxpbmtPYmplY3RUYWJsZUNyZWF0ZSgKICAgICAgICBMaW5rTGlzdFdpdGhEYXRhID0+ICRMaW5rTGlzdFdpdGhEYXRhLAogICAgICAgIFZpZXdNb2RlICAgICAgICAgPT4gJExpbmtUYWJsZVZpZXdNb2RlLAogICAgICAgIE9iamVjdCAgICAgICAgICAgPT4gJ1NlcnZpY2UnLAogICAgICAgIEtleSAgICAgICAgICAgICAgPT4gJFNlcnZpY2VJRCwKICAgICk7CgogICAgIyBvdXRwdXQgdGhlIGxpbmsgdGFibGUKICAgIGlmICgkTGlua1RhYmxlU3RyZykgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMaW5rVGFibGUnIC4gJExpbmtUYWJsZVZpZXdNb2RlLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIExpbmtUYWJsZVN0cmcgPT4gJExpbmtUYWJsZVN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBpbmNpZGVudCBzaWduYWwKICAgIG15ICVJbmNpU2lnbmFscyA9ICgKICAgICAgICBvcGVyYXRpb25hbCA9PiAnZ3JlZW5sZWQnLAogICAgICAgIHdhcm5pbmcgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgICAgIGluY2lkZW50ICAgID0+ICdyZWRsZWQnLAogICAgKTsKCiAgICAjIGdldCB1c2VyIG9iamVjdAogICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgICMgZ2V0IGNyZWF0ZSB1c2VyIGRhdGEKICAgICRTZXJ2aWNle0NyZWF0ZUJ5TmFtZX0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTZXJ2aWNle0NyZWF0ZUJ5fSwKICAgICk7CgogICAgIyBnZXQgY2hhbmdlIHVzZXIgZGF0YQogICAgJFNlcnZpY2V7Q2hhbmdlQnlOYW1lfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICBVc2VySUQgPT4gJFNlcnZpY2V7Q2hhbmdlQnl9LAogICAgKTsKCiAgICAjIHN0b3JlIGxhc3Qgc2NyZWVuCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0aFNlc3Npb24nKS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuVmlldycsCiAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01TZXJ2aWNlWm9vbScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlU2VydmljZSwKICAgICAgICAgICAgQ3VySW5jaVNpZ25hbCA9PiAkSW5jaVNpZ25hbHN7ICRTZXJ2aWNle0N1ckluY2lTdGF0ZVR5cGV9IH0sCiAgICAgICAgfSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TTEE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIGdldCBzbGEgb2JqZWN0CiAgICBteSAkU0xBT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwoKICAgICMgZ2V0IHNsYSBsaXN0CiAgICBteSAlU0xBTGlzdCA9ICRTTEFPYmplY3QtPlNMQUxpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgaWYgKCVTTEFMaXN0KSB7CiAgICAgICAgZm9yIG15ICRTTEFJRCAoIHNvcnQgeyAkU0xBTGlzdHskYX0gY21wICRTTEFMaXN0eyRifSB9IGtleXMgJVNMQUxpc3QgKSB7CgogICAgICAgICAgICAjIGdldCBzbGEgZGF0YQogICAgICAgICAgICBteSAlU0xBID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICAgICAgU0xBSUQgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyByb3cKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1JvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlU0xBLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2UgaXQgZGlzcGxheXMgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UKICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGludmVzdGlnYXRlIHJlZnJlc2gKICAgIG15ICRSZWZyZXNoID0gJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9ID8gNjAgKiAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gOiB1bmRlZjsKCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgICA9PiAnT3ZlcnZpZXcnLAogICAgICAgIFJlZnJlc2ggPT4gJFJlZnJlc2gsCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU0xBJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TTEFQcmludDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkU0xBSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAiU0xBSUQiICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFNMQUlEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAiTm8gU0xBSUQgaXMgZ2l2ZW4hIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzbGEKICAgIG15ICVTTEEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUdldCgKICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCAhJFNMQXtTTEFJRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJTTEFJRCAkU0xBSUQgbm90IGZvdW5kIGluIGRhdGFiYXNlISIsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbi4nLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgY2FsZW5kYXIgbmFtZQogICAgaWYgKCAkU0xBe0NhbGVuZGFyfSApIHsKICAgICAgICAkU0xBe0NhbGVuZGFyTmFtZX0gPSAiQ2FsZW5kYXIgJFNMQXtDYWxlbmRhcn0gLSAiCiAgICAgICAgICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCAiVGltZVpvbmU6OkNhbGVuZGFyIiAuICRTTEF7Q2FsZW5kYXJ9IC4gIk5hbWUiICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU0xBe0NhbGVuZGFyTmFtZX0gPSAnQ2FsZW5kYXIgRGVmYXVsdCc7CiAgICB9CgogICAgIyBnZXQgdXNlciBvYmplY3QKICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAjIGdldCB1c2VyIGRhdGEgKGNyZWF0ZSBieSkKICAgICRTTEF7Q3JlYXRlQnlOYW1lfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICBVc2VySUQgPT4gJFNMQXtDcmVhdGVCeX0sCiAgICApOwoKICAgICMgZ2V0IHVzZXIgZGF0YSAoY2hhbmdlIGJ5KQogICAgJFNMQXtDaGFuZ2VCeU5hbWV9ID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU0xBe0NoYW5nZUJ5fSwKICAgICk7CgogICAgIyBnZXQgUERGIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIGdlbmVyYXRlIFBERiBvdXRwdXQKICAgIG15ICVQYWdlOwoKICAgICMgZ2V0IG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzCiAgICAkUGFnZXtNYXhQYWdlc30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1BERjo6TWF4UGFnZXMnKTsKICAgIGlmICggISRQYWdle01heFBhZ2VzfSB8fCAkUGFnZXtNYXhQYWdlc30gPCAxIHx8ICRQYWdle01heFBhZ2VzfSA+IDEwMDAgKSB7CiAgICAgICAgJFBhZ2V7TWF4UGFnZXN9ID0gMTAwOwogICAgfQogICAgJFBhZ2V7TWFyZ2luVG9wfSAgICA9IDMwOwogICAgJFBhZ2V7TWFyZ2luUmlnaHR9ICA9IDQwOwogICAgJFBhZ2V7TWFyZ2luQm90dG9tfSA9IDQwOwogICAgJFBhZ2V7TWFyZ2luTGVmdH0gICA9IDQwOwogICAgJFBhZ2V7SGVhZGVyUmlnaHR9ICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU0xBJyk7CiAgICAkUGFnZXtQYWdlVGV4dH0gICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdQYWdlJyk7CiAgICAkUGFnZXtQYWdlQ291bnR9ICAgID0gMTsKCiAgICAjIGNyZWF0ZSBuZXcgUERGIGRvY3VtZW50CiAgICAkUERGT2JqZWN0LT5Eb2N1bWVudE5ldygKICAgICAgICBUaXRsZSAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9kdWN0JykgLiAnOiAnIC4gJFNMQXtOYW1lfSwKICAgICAgICBFbmNvZGUgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICk7CgogICAgIyBjcmVhdGUgZmlyc3QgUERGIHBhZ2UKICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgJVBhZ2UsCiAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICk7CiAgICAkUGFnZXtQYWdlQ291bnR9Kys7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNiwKICAgICk7CgogICAgIyBvdXRwdXQgdGl0bGUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFNMQXtOYW1lfSwKICAgICAgICBGb250U2l6ZSA9PiAxMywKICAgICk7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNiwKICAgICk7CgogICAgIyBvdXRwdXQgInByaW50ZWQgYnkiCiAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgIFRleHQgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdwcmludGVkIGJ5JykgLiAnICcKICAgICAgICAgICAgLiAkU2VsZi0+e1VzZXJGdWxsbmFtZX0gLiAnICcKICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57VGltZX0sCiAgICAgICAgRm9udFNpemUgPT4gOSwKICAgICk7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTQsCiAgICApOwoKICAgICMgb3V0cHV0IGdlbmVyYWwgaW5mb3MKICAgICRTZWxmLT5fUERGT3V0cHV0R2VuZXJhbEluZm9zKAogICAgICAgIFBhZ2UgPT4gXCVQYWdlLAogICAgICAgIFNMQSAgPT4gXCVTTEEsCiAgICApOwoKICAgICMgb3V0cHV0IGRldGFpbGVkIGluZm9zCiAgICAkU2VsZi0+X1BERk91dHB1dERldGFpbGVkSW5mb3MoCiAgICAgICAgUGFnZSA9PiBcJVBhZ2UsCiAgICAgICAgU0xBICA9PiBcJVNMQSwKICAgICk7CgogICAgIyBjcmVhdGUgZmlsZSBuYW1lCiAgICBteSAkRmlsZW5hbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5GaWxlbmFtZUNsZWFuVXAoCiAgICAgICAgRmlsZW5hbWUgPT4gJFNMQXtOYW1lfSwKICAgICAgICBUeXBlICAgICA9PiAnQXR0YWNobWVudCcsCiAgICApOwoKICAgICMgZ2V0IHRpbWUgb2JqZWN0CiAgICBteSAkVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyk7CgogICAgbXkgKCAkcywgJG0sICRoLCAkRCwgJE0sICRZICkgPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSwKICAgICk7CiAgICAkTSA9IHNwcmludGYoICIlMDJkIiwgJE0gKTsKICAgICREID0gc3ByaW50ZiggIiUwMmQiLCAkRCApOwogICAgJGggPSBzcHJpbnRmKCAiJTAyZCIsICRoICk7CiAgICAkbSA9IHNwcmludGYoICIlMDJkIiwgJG0gKTsKCiAgICAjIHJldHVybiB0aGUgUERGIGRvY3VtZW50CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBGaWxlbmFtZSAgICA9PiAnc2xhXycgLiAkRmlsZW5hbWUgLiAiXyRZLSRNLSREXF8kaC0kbS5wZGYiLAogICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9wZGYnLAogICAgICAgIENvbnRlbnQgICAgID0+ICRQREZPYmplY3QtPkRvY3VtZW50T3V0cHV0KCksCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICApOwp9CgpzdWIgX1BERk91dHB1dEdlbmVyYWxJbmZvcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhQYWdlIFNMQSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjcmVhdGUgbGVmdCB0YWJsZQogICAgbXkgJFRhYmxlTGVmdCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU0xBJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtTTEF9LT57TmFtZX0sCiAgICAgICAgfSwKICAgIF07CgogICAgIyBjcmVhdGUgcmlnaHQgdGFibGUKICAgIG15ICRUYWJsZVJpZ2h0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDcmVhdGVkJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXScsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiBcJXsgJFBhcmFte1NMQX0gfSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDcmVhdGVkIGJ5JykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtTTEF9LT57Q2hhbmdlQnlOYW1lfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdMYXN0IGNoYW5nZWQnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwleyAkUGFyYW17U0xBfSB9LAogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0xhc3QgY2hhbmdlZCBieScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U0xBfS0+e0NoYW5nZUJ5TmFtZX0sCiAgICAgICAgfSwKICAgIF07CgogICAgbXkgJFJvd3MgPSBAeyRUYWJsZUxlZnR9OwogICAgaWYgKCBAeyRUYWJsZVJpZ2h0fSA+ICRSb3dzICkgewogICAgICAgICRSb3dzID0gQHskVGFibGVSaWdodH07CiAgICB9CgogICAgbXkgJVRhYmxlUGFyYW07CiAgICBmb3IgbXkgJFJvdyAoIDEgLi4gJFJvd3MgKSB7CiAgICAgICAgJFJvdy0tOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57S2V5fTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Rm9udH0gICAgICAgICAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMV17Q29udGVudH0gICAgICAgICA9ICRUYWJsZUxlZnQtPlskUm93XS0+e1ZhbHVlfTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMl17Q29udGVudH0gICAgICAgICA9ICcgJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMl17QmFja2dyb3VuZENvbG9yfSA9ICcjRkZGRkZGJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bM117Q29udGVudH0gICAgICAgICA9ICRUYWJsZVJpZ2h0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVs0XXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e1ZhbHVlfTsKICAgIH0KICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDUwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gMjAwLjU7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsyXXtXaWR0aH0gPSA0OwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bM117V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVs0XXtXaWR0aH0gPSAxNzAuNTsKICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgICAgICA9IDY7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3JFdmVufSAgPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgICA9IDM7CgogICAgIyBnZXQgUERGIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciAoICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0gLi4gJFBhcmFte1BhZ2V9LT57TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRQREZPYmplY3QtPlRhYmxlKCVUYWJsZVBhcmFtKTsKCiAgICAgICAgIyBzdG9wIG91dHB1dCBvciBvdXRwdXQgbmV4dCBwYWdlCiAgICAgICAgbGFzdCBQQUdFIGlmICRUYWJsZVBhcmFte1N0YXRlfTsKCiAgICAgICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAgICAgJXsgJFBhcmFte1BhZ2V9IH0sCiAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYXJhbXtQYWdlfS0+e1BhZ2VUZXh0fSAuICcgJyAuICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0KICAgICAgICApOwogICAgICAgICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0rKzsKICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91dHB1dERldGFpbGVkSW5mb3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBTTEEpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBQREYgb2JqZWN0CiAgICBteSAkUERGT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpOwoKICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTUsCiAgICApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdTTEEnKSwKICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC00LAogICAgKTsKCiAgICAjIGNyZWF0ZSB0YWJsZQogICAgbXkgJFRhYmxlID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdTTEEnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NMQX0tPntOYW1lfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdUeXBlJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJFBhcmFte1NMQX0tPntUeXBlfSApLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NhbGVuZGFyJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJFBhcmFte1NMQX0tPntDYWxlbmRhck5hbWV9ICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZpcnN0IFJlc3BvbnNlIFRpbWUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJFBhcmFte1NMQX0tPntGaXJzdFJlc3BvbnNlVGltZX0gKQogICAgICAgICAgICAgICAgLiAnICcKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdtaW51dGVzJyksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVXBkYXRlIFRpbWUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkUGFyYW17U0xBfS0+e1VwZGF0ZVRpbWV9ICkgLiAnICcKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdtaW51dGVzJyksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU29sdXRpb24gVGltZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRQYXJhbXtTTEF9LT57U29sdXRpb25UaW1lfSApCiAgICAgICAgICAgICAgICAuICcgJwogICAgICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ21pbnV0ZXMnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJykKICAgICAgICAgICAgICAgIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAkUGFyYW17U0xBfS0+e01pblRpbWVCZXR3ZWVuSW5jaWRlbnRzfSwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC4gJyAnCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnbWludXRlcycpLAogICAgICAgIH0sCiAgICBdOwogICAgbXkgJVRhYmxlUGFyYW07CiAgICBteSAkUm93cyA9IEB7JFRhYmxlfTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ID0gJFRhYmxlLT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMV17Q29udGVudH0gPSAkVGFibGUtPlskUm93XS0+e1ZhbHVlfTsKICAgIH0KICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDEyMDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDM5MTsKICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgICAgICA9IDY7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ICAgICAgPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgKCAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9IC4uICRQYXJhbXtQYWdlfS0+e01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGxhc3QgUEFHRSBpZiAkVGFibGVQYXJhbXtTdGF0ZX07CgogICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TTEFab29tOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICRTTEFJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTTEFJRCIgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkU0xBSUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJObyBTTEFJRCBpcyBnaXZlbiEiLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNsYQogICAgbXkgJVNMQSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKS0+U0xBR2V0KAogICAgICAgIFNMQUlEICA9PiAkU0xBSUQsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoICEkU0xBe1NMQUlEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlNMQUlEICRTTEFJRCBub3QgZm91bmQgaW4gZGF0YWJhc2UhIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBjYWxlbmRhciBuYW1lCiAgICBpZiAoICRTTEF7Q2FsZW5kYXJ9ICkgewogICAgICAgICRTTEF7Q2FsZW5kYXJOYW1lfSA9ICJDYWxlbmRhciAkU0xBe0NhbGVuZGFyfSAtICIKICAgICAgICAgICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoICJUaW1lWm9uZTo6Q2FsZW5kYXIiIC4gJFNMQXtDYWxlbmRhcn0gLiAiTmFtZSIgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTTEF7Q2FsZW5kYXJOYW1lfSA9ICdDYWxlbmRhciBEZWZhdWx0JzsKICAgIH0KCiAgICAjIHJ1biBjb25maWcgaXRlbSBtZW51IG1vZHVsZXMKICAgIGlmICggcmVmICRDb25maWdPYmplY3QtPkdldCgnSVRTTVNMQTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSBlcSAnSEFTSCcgKSB7CiAgICAgICAgbXkgJU1lbnVzICAgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01TTEE6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgfTsKICAgICAgICBteSAkQ291bnRlciA9IDA7CiAgICAgICAgZm9yIG15ICRNZW51ICggc29ydCBrZXlzICVNZW51cyApIHsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAkTWVudXN7JE1lbnV9LT57TW9kdWxlfSApICkgewogICAgICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNZW51c3skTWVudX0tPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNlbGYtPntTTEFJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2V0IGNsYXNzZXMKICAgICAgICAgICAgICAgIGlmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnUG9wVXAnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnV9LT57TWVudUNsYXNzfSA9ICdBc1BvcHVwJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnQmFjaycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntNZW51Q2xhc3N9ID0gJ0hpc3RvcnlCYWNrJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBydW4gbW9kdWxlCiAgICAgICAgICAgICAgICAkQ291bnRlciA9ICRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgU0xBICAgICA9PiBcJVNMQSwKICAgICAgICAgICAgICAgICAgICBDb3VudGVyID0+ICRDb3VudGVyLAogICAgICAgICAgICAgICAgICAgIENvbmZpZyAgPT4gJE1lbnVzeyRNZW51fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJFNMQXtTZXJ2aWNlSURzfSAmJiByZWYgJFNMQXtTZXJ2aWNlSURzfSBlcSAnQVJSQVknICYmIEB7ICRTTEF7U2VydmljZUlEc30gfSApIHsKCiAgICAgICAgIyBvdXRwdXQgcm93CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NlcnZpY2UnLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHNlcnZpY2UgbGlzdAogICAgICAgIG15ICVTZXJ2aWNlTGlzdDsKICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIEB7ICRTTEF7U2VydmljZUlEc30gfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHNlcnZpY2UgZGF0YQogICAgICAgICAgICBteSAlU2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIHNlcnZpY2UgdG8gaGFzaAogICAgICAgICAgICAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0gPSBcJVNlcnZpY2U7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBpbmNpZGVudCBzaWduYWwKICAgICAgICBteSAlSW5jaVNpZ25hbHMgPSAoCiAgICAgICAgICAgIG9wZXJhdGlvbmFsID0+ICdncmVlbmxlZCcsCiAgICAgICAgICAgIHdhcm5pbmcgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgICAgICAgICBpbmNpZGVudCAgICA9PiAncmVkbGVkJywKICAgICAgICApOwoKICAgICAgICBteSAkQ3NzQ2xhc3MgPSAnJzsKICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoCiAgICAgICAgICAgIHNvcnQgeyAkU2VydmljZUxpc3R7JGF9LT57TmFtZX0gY21wICRTZXJ2aWNlTGlzdHskYn0tPntOYW1lfSB9CiAgICAgICAgICAgIGtleXMgJVNlcnZpY2VMaXN0CiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIHNldCBvdXRwdXQgb2JqZWN0CiAgICAgICAgICAgICRDc3NDbGFzcyA9ICRDc3NDbGFzcyBlcSAnc2VhcmNocGFzc2l2ZScgPyAnc2VhcmNoYWN0aXZlJyA6ICdzZWFyY2hwYXNzaXZlJzsKCiAgICAgICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NlcnZpY2VSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJXsgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9IH0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVNpZ25hbCA9PiAkSW5jaVNpZ25hbHN7ICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfS0+e0N1ckluY2lTdGF0ZVR5cGV9IH0sCiAgICAgICAgICAgICAgICAgICAgQ3NzQ2xhc3MgICAgICA9PiAkQ3NzQ2xhc3MsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB1c2VyIG9iamVjdAogICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgICMgZ2V0IGNyZWF0ZSB1c2VyIGRhdGEKICAgICRTTEF7Q3JlYXRlQnlOYW1lfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICBVc2VySUQgPT4gJFNMQXtDcmVhdGVCeX0sCiAgICApOwoKICAgICMgZ2V0IGNoYW5nZSB1c2VyIGRhdGEKICAgICRTTEF7Q2hhbmdlQnlOYW1lfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICBVc2VySUQgPT4gJFNMQXtDaGFuZ2VCeX0sCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU0xBWm9vbScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlU0xBLAogICAgICAgIH0sCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01TZXJ2aWNlTWVudTo6R2VuZXJpYzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBVc2VySUQgcGFyYW0KICAgICRTZWxmLT57VXNlcklEfSA9ICRQYXJhbXtVc2VySUR9IHx8IGRpZSAiR290IG5vIFVzZXJJRCEiOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U2VydmljZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFNlcnZpY2UhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGdyb3VwcwogICAgbXkgJEdyb3Vwc1JvID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnsgJFBhcmFte0NvbmZpZ30tPntBY3Rpb259IH0tPntHcm91cFJvfQogICAgICAgIHx8IFtdOwogICAgbXkgJEdyb3Vwc1J3ID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnsgJFBhcmFte0NvbmZpZ30tPntBY3Rpb259IH0tPntHcm91cH0KICAgICAgICB8fCBbXTsKCiAgICAjIHNldCBhY2Nlc3MKICAgIG15ICRBY2Nlc3MgPSAxOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBwZXJtaXNzaW9uCiAgICBpZiAoICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSAmJiAoIEB7JEdyb3Vwc1JvfSB8fCBAeyRHcm91cHNSd30gKSApIHsKCiAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgJEFjY2VzcyA9IDA7CgogICAgICAgICMgZmluZCByZWFkIG9ubHkgZ3JvdXBzCiAgICAgICAgUk9HUk9VUDoKICAgICAgICBmb3IgbXkgJFJvR3JvdXAgKCBAeyRHcm91cHNSb30gKSB7CgogICAgICAgICAgICBuZXh0IFJPR1JPVVAgaWYgISRMYXlvdXRPYmplY3QtPnsiVXNlcklzR3JvdXBSb1skUm9Hcm91cF0ifTsKICAgICAgICAgICAgbmV4dCBST0dST1VQIGlmICRMYXlvdXRPYmplY3QtPnsiVXNlcklzR3JvdXBSb1skUm9Hcm91cF0ifSBuZSAnWWVzJzsKCiAgICAgICAgICAgICMgc2V0IGFjY2VzcwogICAgICAgICAgICAkQWNjZXNzID0gMTsKICAgICAgICAgICAgbGFzdCBST0dST1VQOwogICAgICAgIH0KCiAgICAgICAgIyBmaW5kIHJlYWQgd3JpdGUgZ3JvdXBzCiAgICAgICAgUldHUk9VUDoKICAgICAgICBmb3IgbXkgJFJ3R3JvdXAgKCBAeyRHcm91cHNSd30gKSB7CgogICAgICAgICAgICBuZXh0IFJXR1JPVVAgaWYgISRMYXlvdXRPYmplY3QtPnsiVXNlcklzR3JvdXBbJFJ3R3JvdXBdIn07CiAgICAgICAgICAgIG5leHQgUldHUk9VUCBpZiAkTGF5b3V0T2JqZWN0LT57IlVzZXJJc0dyb3VwWyRSd0dyb3VwXSJ9IG5lICdZZXMnOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJXR1JPVVA7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBvdXRwdXQgbWVudSBpdGVtCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZW51SXRlbScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXsgJFBhcmFte1NlcnZpY2V9IH0sCiAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWd9IH0sCiAgICAgICAgfSwKICAgICk7CiAgICAkUGFyYW17Q291bnRlcn0rKzsKCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01TZXJ2aWNlTWVudTo6TGluazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgVXNlcklEIHBhcmFtCiAgICAkU2VsZi0+e1VzZXJJRH0gPSAkUGFyYW17VXNlcklEfSB8fCBkaWUgIkdvdCBubyBVc2VySUQhIjsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1NlcnZpY2V9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTZXJ2aWNlIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBncm91cHMKICAgIG15ICRHcm91cHNSdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57ICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSB9LT57R3JvdXB9CiAgICAgICAgfHwgW107CgogICAgIyBzZXQgYWNjZXNzCiAgICBteSAkQWNjZXNzID0gMTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbgogICAgaWYgKCAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0gJiYgQHskR3JvdXBzUnd9ICkgewoKICAgICAgICAjIHNldCBhY2Nlc3MKICAgICAgICAkQWNjZXNzID0gMDsKCiAgICAgICAgIyBmaW5kIHJlYWQgd3JpdGUgZ3JvdXBzCiAgICAgICAgUldHUk9VUDoKICAgICAgICBmb3IgbXkgJFJ3R3JvdXAgKCBAeyRHcm91cHNSd30gKSB7CgogICAgICAgICAgICBuZXh0IFJXR1JPVVAgaWYgISRMYXlvdXRPYmplY3QtPnsiVXNlcklzR3JvdXBbJFJ3R3JvdXBdIn07CiAgICAgICAgICAgIG5leHQgUldHUk9VUCBpZiAkTGF5b3V0T2JqZWN0LT57IlVzZXJJc0dyb3VwWyRSd0dyb3VwXSJ9IG5lICdZZXMnOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJXR1JPVVA7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBjaGVjayBpZiBzZXJ2aWNlcyBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgb2JqZWN0cwogICAgbXkgJVBvc3NpYmxlT2JqZWN0cyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JyktPlBvc3NpYmxlT2JqZWN0c0xpc3QoCiAgICAgICAgT2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGRvbid0IHNob3cgbGluayBtZW51IGl0ZW0gaWYgdGhlcmUgYXJlIG5vIGxpbmthYmxlIG9iamVjdHMKICAgIHJldHVybiBpZiAhJVBvc3NpYmxlT2JqZWN0czsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZW51SXRlbScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXsgJFBhcmFte1NlcnZpY2V9IH0sCiAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWd9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgJFBhcmFte0NvdW50ZXJ9Kys7CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01TTEFNZW51OjpHZW5lcmljOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIFVzZXJJRCBwYXJhbQogICAgJFNlbGYtPntVc2VySUR9ID0gJFBhcmFte1VzZXJJRH0gfHwgZGllICJHb3Qgbm8gVXNlcklEISI7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtTTEF9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTTEEhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGdyb3VwcwogICAgbXkgJEdyb3Vwc1JvID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnsgJFBhcmFte0NvbmZpZ30tPntBY3Rpb259IH0tPntHcm91cFJvfQogICAgICAgIHx8IFtdOwogICAgbXkgJEdyb3Vwc1J3ID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnsgJFBhcmFte0NvbmZpZ30tPntBY3Rpb259IH0tPntHcm91cH0KICAgICAgICB8fCBbXTsKCiAgICAjIHNldCBhY2Nlc3MKICAgIG15ICRBY2Nlc3MgPSAxOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBwZXJtaXNzaW9uCiAgICBpZiAoICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSAmJiAoIEB7JEdyb3Vwc1JvfSB8fCBAeyRHcm91cHNSd30gKSApIHsKCiAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgJEFjY2VzcyA9IDA7CgogICAgICAgICMgZmluZCByZWFkIG9ubHkgZ3JvdXBzCiAgICAgICAgUk9HUk9VUDoKICAgICAgICBmb3IgbXkgJFJvR3JvdXAgKCBAeyRHcm91cHNSb30gKSB7CgogICAgICAgICAgICBuZXh0IFJPR1JPVVAgaWYgISRMYXlvdXRPYmplY3QtPnsiVXNlcklzR3JvdXBSb1skUm9Hcm91cF0ifTsKICAgICAgICAgICAgbmV4dCBST0dST1VQIGlmICRMYXlvdXRPYmplY3QtPnsiVXNlcklzR3JvdXBSb1skUm9Hcm91cF0ifSBuZSAnWWVzJzsKCiAgICAgICAgICAgICMgc2V0IGFjY2VzcwogICAgICAgICAgICAkQWNjZXNzID0gMTsKICAgICAgICAgICAgbGFzdCBST0dST1VQOwogICAgICAgIH0KCiAgICAgICAgIyBmaW5kIHJlYWQgd3JpdGUgZ3JvdXBzCiAgICAgICAgUldHUk9VUDoKICAgICAgICBmb3IgbXkgJFJ3R3JvdXAgKCBAeyRHcm91cHNSd30gKSB7CgogICAgICAgICAgICBuZXh0IFJXR1JPVVAgaWYgISRMYXlvdXRPYmplY3QtPnsiVXNlcklzR3JvdXBbJFJ3R3JvdXBdIn07CiAgICAgICAgICAgIG5leHQgUldHUk9VUCBpZiAkTGF5b3V0T2JqZWN0LT57IlVzZXJJc0dyb3VwWyRSd0dyb3VwXSJ9IG5lICdZZXMnOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJXR1JPVVA7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBvdXRwdXQgbWVudSBpdGVtCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZW51SXRlbScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXsgJFBhcmFte1NMQX0gfSwKICAgICAgICAgICAgJXsgJFBhcmFte0NvbmZpZ30gfSwKICAgICAgICB9LAogICAgKTsKICAgICRQYXJhbXtDb3VudGVyfSsrOwoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn07Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3Q6OlNlcnZpY2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6TGFuZ3VhZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpKU09OJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VXNlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3Q6OlNlcnZpY2UgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgbGluayBvYmplY3QgKHNlcnZpY2UpCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3Q6OlNlcnZpY2UtPm5ldygKICAgICAgICBVc2VyTGFuZ3VhZ2UgPT4gJ2VuJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkTmVlZGVkIChxdyhVc2VyTGFuZ3VhZ2UgVXNlcklEKSkgewogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH0gfHwgZGllICJHb3Qgbm8gJE5lZWRlZCEiOwogICAgfQoKICAgICMgd2UgbmVlZCBvdXIgb3duIExheW91dE9iamVjdCBpbnN0YW5jZSB0byBhdm9pZCBibG9ja2RhdGEgY29sbGlzaW9ucwogICAgIyB3aXRoIHRoZSBtYWluIHBhZ2UuCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0gPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0LT5uZXcoICV7JFNlbGZ9ICk7CgogICAgIyBkZWZpbmUgbmVlZGVkIHZhcmlhYmxlcwogICAgJFNlbGYtPntPYmplY3REYXRhfSA9IHsKICAgICAgICBPYmplY3QgICAgID0+ICdTZXJ2aWNlJywKICAgICAgICBSZWFsbmFtZSAgID0+ICdTZXJ2aWNlJywKICAgICAgICBPYmplY3ROYW1lID0+ICdTb3VyY2VPYmplY3RJRCcsCiAgICB9OwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gVGFibGVDcmVhdGVDb21wbGV4KCkKCnJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBibG9jayBkYXRhCgpSZXR1cm4KCiAgICBAQmxvY2tEYXRhID0gKAoKICAgICAgICBPYmplY3ROYW1lICA9PiAnU2VydmljZUlEJywKICAgICAgICBPYmplY3RJRCAgICA9PiAnMTIzJywKCiAgICAgICAgT2JqZWN0ICAgID0+ICdTZXJ2aWNlJywKICAgICAgICBCbG9ja25hbWUgPT4gJ1NlcnZpY2UnLAogICAgICAgIEhlYWRsaW5lICA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJycsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDIwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVHlwZScsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDEwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ3JpdGljYWxpdHknLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NoYW5nZWQnLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAxNTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgICAgICBJdGVtTGlzdCA9PiBbCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdJbmNpU2lnbmFsJywKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgICAgICAgID0+IDEyMywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnU2VydmljZSBCbGEnLAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgICA9PiAnQWN0aW9uPUFnZW50SVRTTVNlcnZpY2Vab29tO1NlcnZpY2VJRD0xMjMnLAogICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA3MCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnT3RoZXInLAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdIaWdoJywKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGltZUxvbmcnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzIwMDgtMDEtMDEgMTI6MTI6MDAnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0luY2lTaWduYWwnLAogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgICAgICAgPT4gMzIxLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgICAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICdTZXJ2aWNlIEJsYScsCiAgICAgICAgICAgICAgICAgICAgTGluayAgICAgID0+ICdBY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPTMyMScsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDcwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdPdGhlcicsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0xvdycsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RpbWVMb25nJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcyMDA3LTAyLTAyIDIyOjEyOjAwJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgXSwKICAgICk7CgogICAgQEJsb2NrRGF0YSA9ICRMaW5rT2JqZWN0LT5UYWJsZUNyZWF0ZUNvbXBsZXgoCiAgICAgICAgT2JqZWN0TGlua0xpc3RXaXRoRGF0YSA9PiAkT2JqZWN0TGlua0xpc3RSZWYsCiAgICApOwoKPWN1dAoKc3ViIFRhYmxlQ3JlYXRlQ29tcGxleCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfHwgcmVmICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE9iamVjdExpbmtMaXN0V2l0aERhdGEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNvbnZlcnQgdGhlIGxpc3QKICAgIG15ICVMaW5rTGlzdDsKICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXsgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IH0gKSB7CgogICAgICAgICMgZXh0cmFjdCBsaW5rIHR5cGUgTGlzdAogICAgICAgIG15ICRMaW5rVHlwZUxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9OwoKICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoIHNvcnQga2V5cyAleyRMaW5rVHlwZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IGRpcmVjdGlvbiBsaXN0CiAgICAgICAgICAgIG15ICREaXJlY3Rpb25MaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259OwoKICAgICAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IGtleXMgJXskRGlyZWN0aW9uTGlzdH0gKSB7CgogICAgICAgICAgICAgICAgJExpbmtMaXN0eyRTZXJ2aWNlSUR9LT57RGF0YX0gPSAkRGlyZWN0aW9uTGlzdC0+eyRTZXJ2aWNlSUR9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIG15ICRDb21wbGV4VGFibGVEYXRhID0gJENvbmZpZ09iamVjdC0+R2V0KCJMaW5rT2JqZWN0OjpDb21wbGV4VGFibGUiKTsKICAgIG15ICREZWZhdWx0Q29sdW1uczsKICAgIGlmICgKICAgICAgICAkQ29tcGxleFRhYmxlRGF0YQogICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCRDb21wbGV4VGFibGVEYXRhKQogICAgICAgICYmICRDb21wbGV4VGFibGVEYXRhLT57U2VydmljZX0KICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJENvbXBsZXhUYWJsZURhdGEtPntTZXJ2aWNlfSApCiAgICAgICAgKQogICAgewogICAgICAgICREZWZhdWx0Q29sdW1ucyA9ICRDb21wbGV4VGFibGVEYXRhLT57IlNlcnZpY2UifS0+eyJEZWZhdWx0Q29sdW1ucyJ9OwogICAgfQoKICAgIG15IEBUaW1lTG9uZ1R5cGVzID0gKAogICAgICAgICdDcmVhdGVUaW1lJywKICAgICAgICAnQ2hhbmdlVGltZScsCiAgICApOwoKICAgIG15IEBUcmFuc2xhdGVUeXBlcyA9ICgKICAgICAgICAnVHlwZScsCiAgICAgICAgJ0NyaXRpY2FsaXR5JywKICAgICk7CgogICAgIyBhbHdheXMgc2hvdyB0aGUgaW5jaWRlbnQgc3RhdGUgZmxhZyBhbmQgdGhlIHNlcnZpY2UgbmFtZQogICAgbXkgQEhlYWRsaW5lID0gKAogICAgICAgIHsKICAgICAgICAgICAgQ29udGVudCA9PiAnSW5jaWRlbnQgU3RhdGUnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBDb250ZW50ID0+ICdTZXJ2aWNlJywKICAgICAgICB9LAogICAgKTsKCiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyBMb2FkIHVzZXIgcHJlZmVyZW5jZXMuCiAgICBteSAlUHJlZmVyZW5jZXMgPSAkVXNlck9iamVjdC0+R2V0UHJlZmVyZW5jZXMoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgaWYgKCAhJERlZmF1bHRDb2x1bW5zIHx8ICFJc0hhc2hSZWZXaXRoRGF0YSgkRGVmYXVsdENvbHVtbnMpICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTWlzc2luZyBjb25maWd1cmF0aW9uIGZvciBMaW5rT2JqZWN0OjpDb21wbGV4VGFibGUjIyNTZXJ2aWNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBHZXQgZGVmYXVsdCBjb2x1bW4gcHJpb3JpdHkgZnJvbSBTeXNDb25maWcuCiAgICAjIEVhY2ggY29sdW1uIGluIHRhYmxlIChUaXRsZSwgU3RhdGUsLi4uKSBoYXMgZGVmaW5lZCBQcmlvcml0eSBpbiBTeXNDb25maWcuIFN5c3RlbSB1c2UgdGhpcwogICAgIyAgIHByaW9yaXR5IHRvIHNvcnQgY29sdW1ucywgaWYgdXNlciBkb2Vzbid0IGhhdmUgb3duIHNldHRpbmdzLgogICAgbXkgJVNvcnRPcmRlcjsKICAgIGlmICgKICAgICAgICAkQ29tcGxleFRhYmxlRGF0YS0+eyJTZXJ2aWNlIn0tPnsiUHJpb3JpdHkifQogICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQ29tcGxleFRhYmxlRGF0YS0+eyJTZXJ2aWNlIn0tPnsiUHJpb3JpdHkifSApCiAgICAgICAgKQogICAgewogICAgICAgICVTb3J0T3JkZXIgPSAleyAkQ29tcGxleFRhYmxlRGF0YS0+eyJTZXJ2aWNlIn0tPnsiUHJpb3JpdHkifSB9OwogICAgfQoKICAgIG15ICVVc2VyQ29sdW1ucyA9ICV7JERlZmF1bHRDb2x1bW5zfTsKCiAgICBpZiAoICRQcmVmZXJlbmNlc3snTGlua09iamVjdDo6Q29tcGxleFRhYmxlLVNlcnZpY2UnfSApIHsKCiAgICAgICAgbXkgJENvbHVtbnNFbmFibGVkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkpTT04nKS0+RGVjb2RlKAogICAgICAgICAgICBEYXRhID0+ICRQcmVmZXJlbmNlc3snTGlua09iamVjdDo6Q29tcGxleFRhYmxlLVNlcnZpY2UnfSwKICAgICAgICApOwoKICAgICAgICBpZiAoCiAgICAgICAgICAgICRDb2x1bW5zRW5hYmxlZAogICAgICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSgkQ29sdW1uc0VuYWJsZWQpCiAgICAgICAgICAgICYmICRDb2x1bW5zRW5hYmxlZC0+e09yZGVyfQogICAgICAgICAgICAmJiBJc0FycmF5UmVmV2l0aERhdGEoICRDb2x1bW5zRW5hYmxlZC0+e09yZGVyfSApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICMgQ2xlYXIgc29ydCBvcmRlci4KICAgICAgICAgICAgJVNvcnRPcmRlciA9ICgpOwoKICAgICAgICAgICAgREVGQVVMVENPTFVNTjoKICAgICAgICAgICAgZm9yIG15ICREZWZhdWx0Q29sdW1uICggc29ydCBrZXlzICVVc2VyQ29sdW1ucyApIHsKICAgICAgICAgICAgICAgIG15ICRJbmRleCA9IDA7CgogICAgICAgICAgICAgICAgZm9yIG15ICRVc2VyU2V0dGluZyAoIEB7ICRDb2x1bW5zRW5hYmxlZC0+e09yZGVyfSB9ICkgewogICAgICAgICAgICAgICAgICAgICRJbmRleCsrOwogICAgICAgICAgICAgICAgICAgIGlmICggJERlZmF1bHRDb2x1bW4gZXEgJFVzZXJTZXR0aW5nICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVXNlckNvbHVtbnN7JERlZmF1bHRDb2x1bW59ID0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgJFNvcnRPcmRlcnskRGVmYXVsdENvbHVtbn0gICA9ICRJbmRleDsKCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgREVGQVVMVENPTFVNTjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBOb3QgZm91bmQsIG1lYW5zIHVzZXIgY2hvc2UgdG8gaGlkZSB0aGlzIGl0ZW0uCiAgICAgICAgICAgICAgICBpZiAoICRVc2VyQ29sdW1uc3skRGVmYXVsdENvbHVtbn0gPT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAkVXNlckNvbHVtbnN7JERlZmF1bHRDb2x1bW59ID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICEkU29ydE9yZGVyeyREZWZhdWx0Q29sdW1ufSApIHsKICAgICAgICAgICAgICAgICAgICAkU29ydE9yZGVyeyREZWZhdWx0Q29sdW1ufSA9IDA7ICAgICMgU2V0IDAsIGl0IHN5c3RlbSB3aWxsIGhpZGUgdGhpcyBpdGVtIGFueXdheXMKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIFVzZXIgaGFzIG5vIG93biBzZXR0aW5ncy4KICAgICAgICBmb3IgbXkgJENvbHVtbiAoIHNvcnQga2V5cyAlVXNlckNvbHVtbnMgKSB7CiAgICAgICAgICAgIGlmICggISRTb3J0T3JkZXJ7JENvbHVtbn0gKSB7CiAgICAgICAgICAgICAgICAkU29ydE9yZGVyeyRDb2x1bW59ID0gMDsgICAgICAgICAgICAgICAjIFNldCAwLCBpdCBzeXN0ZW0gd2lsbCBoaWRlIHRoaXMgaXRlbSBhbnl3YXlzCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBEZWZpbmUgSGVhZGxpbmUgY29sdW1ucy4KICAgIENPTFVNTjoKICAgIGZvciBteSAkQ29sdW1uICggc29ydCB7ICRTb3J0T3JkZXJ7JGF9IDw9PiAkU29ydE9yZGVyeyRifSB9IGtleXMgJVVzZXJDb2x1bW5zICkgewoKICAgICAgICAjIGlmIGVuYWJsZWQgYnkgZGVmYXVsdC4KICAgICAgICBpZiAoICRVc2VyQ29sdW1uc3skQ29sdW1ufSA9PSAyICkgewogICAgICAgICAgICBteSAkQ29sdW1uTmFtZSA9ICcnOwoKICAgICAgICAgICAgaWYgKCAkQ29sdW1uIGVxICdDdXJJbmNpU3RhdGUnICkgewogICAgICAgICAgICAgICAgJENvbHVtbk5hbWUgPSAnSW5jaWRlbnQgU3RhdGUnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJENvbHVtbiBlcSAnQ3JlYXRlVGltZScgKSB7CiAgICAgICAgICAgICAgICAkQ29sdW1uTmFtZSA9ICdDcmVhdGVkJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRDb2x1bW4gZXEgJ0NoYW5nZVRpbWUnICkgewogICAgICAgICAgICAgICAgJENvbHVtbk5hbWUgPSAnQ2hhbmdlZCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWxsIG90aGVyIGZpZWxkcwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRDb2x1bW5OYW1lID0gJENvbHVtbjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHVzaCBASGVhZGxpbmUsIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJENvbHVtbk5hbWUsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIHRoZSBpdGVtIGxpc3QgKHRhYmxlIGNvbnRlbnQpCiAgICBteSBASXRlbUxpc3Q7CiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoCiAgICAgICAgc29ydCB7IGxjICRMaW5rTGlzdHskYX17RGF0YX0tPntOYW1lfSBjbXAgbGMgJExpbmtMaXN0eyRifXtEYXRhfS0+e05hbWV9IH0KICAgICAgICBrZXlzICVMaW5rTGlzdAogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBleHRyYWN0IHNlcnZpY2UgZGF0YQogICAgICAgIG15ICRTZXJ2aWNlID0gJExpbmtMaXN0eyRTZXJ2aWNlSUR9LT57RGF0YX07CgogICAgICAgICMgQ3VySW5jaVNpZ25hbCBtdXN0IGFsd2F5cyBiZSBwcmVzZW50LCBhcyB3ZWxsIGFzIHNlcnZpY2UgbmFtZQogICAgICAgICMgKGJlY2F1c2UgaXQgY29udGFpbnMgdGhlIG1hc3RlciBsaW5rIHRvIHRoZSBTZXJ2aWNlKS4KICAgICAgICBteSBASXRlbUNvbHVtbnMgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0N1ckluY2lTaWduYWwnLAogICAgICAgICAgICAgICAgS2V5ICAgICAgICAgICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICA9PiAkU2VydmljZS0+e0N1ckluY2lTdGF0ZX0sCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICRTZXJ2aWNlLT57Q3VySW5jaVN0YXRlVHlwZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgQ29udGVudCA9PiAkU2VydmljZS0+e05hbWV9LAogICAgICAgICAgICAgICAgTGluayAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPScKICAgICAgICAgICAgICAgICAgICAuICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgPT4gIlNlcnZpY2U6ICRTZXJ2aWNlLT57TmFtZX0iLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDcwLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIENPTFVNTjoKICAgICAgICBmb3IgbXkgJENvbHVtbiAoIHNvcnQgeyAkU29ydE9yZGVyeyRhfSA8PT4gJFNvcnRPcmRlcnskYn0gfSBrZXlzICVVc2VyQ29sdW1ucyApIHsKCiAgICAgICAgICAgICMgaWYgZW5hYmxlZCBieSBkZWZhdWx0CiAgICAgICAgICAgIGlmICggJFVzZXJDb2x1bW5zeyRDb2x1bW59ID09IDIgKSB7CgogICAgICAgICAgICAgICAgbXkgJUhhc2g7CiAgICAgICAgICAgICAgICBpZiAoIGdyZXAgeyAkXyBlcSAkQ29sdW1uIH0gQFRpbWVMb25nVHlwZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgJEhhc2h7J1R5cGUnfSA9ICdUaW1lTG9uZyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkSGFzaHsnVHlwZSd9ID0gJ1RleHQnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggJENvbHVtbiBlcSAnQ29tbWVudCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJEhhc2h7TWF4TGVuZ3RofSA9IDMwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZ3JlcCB7ICRfIGVxICRDb2x1bW4gfSBAVHJhbnNsYXRlVHlwZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgJEhhc2h7J1RyYW5zbGF0ZSd9ID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkSGFzaHsnQ29udGVudCd9ID0gJFNlcnZpY2UtPnskQ29sdW1ufTsKCiAgICAgICAgICAgICAgICBwdXNoIEBJdGVtQ29sdW1ucywgXCVIYXNoOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwdXNoIEBJdGVtTGlzdCwgXEBJdGVtQ29sdW1uczsKICAgIH0KCiAgICByZXR1cm4gaWYgIUBJdGVtTGlzdDsKCiAgICAjIERlZmluZSB0aGUgYmxvY2sgZGF0YS4KICAgIG15ICVCbG9jayA9ICgKICAgICAgICBPYmplY3QgICAgID0+ICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3R9LAogICAgICAgIEJsb2NrbmFtZSAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0sCiAgICAgICAgT2JqZWN0TmFtZSA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0TmFtZX0sCiAgICAgICAgT2JqZWN0SUQgICA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgICAgIEhlYWRsaW5lICAgPT4gXEBIZWFkbGluZSwKICAgICAgICBJdGVtTGlzdCAgID0+IFxASXRlbUxpc3QsCiAgICApOwoKICAgIHJldHVybiAoIFwlQmxvY2sgKTsKCn0KCj1pdGVtIFRhYmxlQ3JlYXRlU2ltcGxlKCkKCnJldHVybiBhIGhhc2ggd2l0aCB0aGUgbGluayBvdXRwdXQgZGF0YQoKUmV0dXJuCgogICAgJUxpbmtPdXRwdXREYXRhID0gKAogICAgICAgIE5vcm1hbDo6U291cmNlID0+IHsKICAgICAgICAgICAgU2VydmljZSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnUzpUaGUgc2VydmljWy4uXScsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnU2VydmljZTogVGhlIHNlcnZpY2UgbmFtZScsCiAgICAgICAgICAgICAgICAgICAgQ3NzICAgICA9PiAnc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoIicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1M6TmFtZSBvZiBzZXJ2aWNbLi5dJywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgID0+ICdTZXJ2aWNlOiBOYW1lIG9mIHNlcnZpY2UgMicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUGFyZW50Q2hpbGQ6OlRhcmdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2UgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1M6U2VydmljZSBuYW1bLi5dJywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgID0+ICdTZXJ2aWNlOiBTZXJ2aWNlIG5hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgKTsKCiAgICAlTGlua091dHB1dERhdGEgPSAkTGlua09iamVjdC0+VGFibGVDcmVhdGVTaW1wbGUoCiAgICAgICAgT2JqZWN0TGlua0xpc3RXaXRoRGF0YSA9PiAkT2JqZWN0TGlua0xpc3RSZWYsCiAgICApOwoKPWN1dAoKc3ViIFRhYmxlQ3JlYXRlU2ltcGxlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSB8fCByZWYgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgT2JqZWN0TGlua0xpc3RXaXRoRGF0YSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICVMaW5rT3V0cHV0RGF0YTsKICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXsgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IH0gKSB7CgogICAgICAgICMgZXh0cmFjdCBsaW5rIHR5cGUgTGlzdAogICAgICAgIG15ICRMaW5rVHlwZUxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9OwoKICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoIHNvcnQga2V5cyAleyRMaW5rVHlwZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IGRpcmVjdGlvbiBsaXN0CiAgICAgICAgICAgIG15ICREaXJlY3Rpb25MaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259OwoKICAgICAgICAgICAgbXkgQEl0ZW1MaXN0OwogICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoCiAgICAgICAgICAgICAgICBzb3J0IHsKICAgICAgICAgICAgICAgICAgICBsYyAkRGlyZWN0aW9uTGlzdC0+eyRhfS0+e05hbWVTaG9ydH0gY21wIGxjICREaXJlY3Rpb25MaXN0LT57JGJ9LT57TmFtZVNob3J0fQogICAgICAgICAgICAgICAgfSBrZXlzICV7JERpcmVjdGlvbkxpc3R9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGV4dHJhY3Qgc2VydmljZSBkYXRhCiAgICAgICAgICAgICAgICBteSAkU2VydmljZSA9ICREaXJlY3Rpb25MaXN0LT57JFNlcnZpY2VJRH07CgogICAgICAgICAgICAgICAgIyBkZWZpbmUgaXRlbSBkYXRhCiAgICAgICAgICAgICAgICBteSAlSXRlbSA9ICgKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICJTOiRTZXJ2aWNlLT57TmFtZVNob3J0fSIsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAiU2VydmljZTogJFNlcnZpY2UtPntOYW1lfSIsCiAgICAgICAgICAgICAgICAgICAgTGluayAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAgICAgLiAnQWN0aW9uPUFnZW50SVRTTVNlcnZpY2Vab29tO1NlcnZpY2VJRD0nCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMjAsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW1MaXN0LCBcJUl0ZW07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIGl0ZW0gbGlzdCB0byBsaW5rIG91dHB1dCBkYXRhCiAgICAgICAgICAgICRMaW5rT3V0cHV0RGF0YXsgJExpbmtUeXBlIC4gJzo6JyAuICREaXJlY3Rpb24gfS0+e1NlcnZpY2V9ID0gXEBJdGVtTGlzdDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVMaW5rT3V0cHV0RGF0YTsKfQoKPWl0ZW0gQ29udGVudFN0cmluZ0NyZWF0ZSgpCgpyZXR1cm4gYSBvdXRwdXQgc3RyaW5nCgogICAgbXkgJFN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkNvbnRlbnRTdHJpbmdDcmVhdGUoCiAgICAgICAgQ29udGVudERhdGEgPT4gJEhhc2hSZWYsCiAgICApOwoKPWN1dAoKc3ViIENvbnRlbnRTdHJpbmdDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NvbnRlbnREYXRhfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ29udGVudERhdGEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGV4dHJhY3QgY29udGVudAogICAgbXkgJENvbnRlbnQgPSAkUGFyYW17Q29udGVudERhdGF9OwoKICAgIHJldHVybiBpZiAkQ29udGVudC0+e1R5cGV9IG5lICdDdXJJbmNpU2lnbmFsJzsKCiAgICAjIHNldCBpbmNpZGVudCBzaWduYWwKICAgIG15ICVJbmNpU2lnbmFscyA9ICgKICAgICAgICBpbmNpZGVudCAgICA9PiAncmVkbGVkJywKICAgICAgICBvcGVyYXRpb25hbCA9PiAnZ3JlZW5sZWQnLAogICAgICAgIHVua25vd24gICAgID0+ICdncmF5bGVkJywKICAgICAgICB3YXJuaW5nICAgICA9PiAneWVsbG93bGVkJywKICAgICk7CgogICAgIyBpbnZlc3RpZ2F0ZSBjdXJyZW50IGluY2lkZW50IHNpZ25hbAogICAgJENvbnRlbnQtPntDdXJJbmNpU3RhdGVUeXBlfSB8fD0gJ3Vua25vd24nOwogICAgbXkgJEN1ckluY2lTaWduYWwgPSAkSW5jaVNpZ25hbHN7ICRDb250ZW50LT57Q3VySW5jaVN0YXRlVHlwZX0gfTsKICAgICRDdXJJbmNpU2lnbmFsIHx8PSAkSW5jaVNpZ25hbHN7dW5rbm93bn07CgogICAgbXkgJFN0cmluZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlID0+ICc8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIiB0aXRsZT0iWyUgRGF0YS5DdXJJbmNpU3RhdGUgfCBodG1sICVdIj4gJwogICAgICAgICAgICAuICc8c3BhbiBjbGFzcz0iWyUgRGF0YS5DdXJJbmNpU2lnbmFsIHwgaHRtbCAlXSI+PC9zcGFuPiA8L2Rpdj4nLAoKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgQ3VySW5jaVNpZ25hbCA9PiAkQ3VySW5jaVNpZ25hbCwKICAgICAgICAgICAgQ3VySW5jaVN0YXRlICA9PiAkQ29udGVudC0+e0NvbnRlbnR9IHx8ICcnLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9aXRlbSBTZWxlY3RhYmxlT2JqZWN0TGlzdCgpCgpyZXR1cm4gYW4gYXJyYXkgaGFzaCB3aXRoIHNlbGVjdGFibGUgb2JqZWN0cwoKUmV0dXJuCgogICAgQFNlbGVjdGFibGVPYmplY3RMaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICBWYWx1ZSA9PiAnU2VydmljZScsCiAgICAgICAgfSwKICAgICk7CgogICAgQFNlbGVjdGFibGVPYmplY3RMaXN0ID0gJExpbmtPYmplY3QtPlNlbGVjdGFibGVPYmplY3RMaXN0KAogICAgICAgIFNlbGVjdGVkID0+ICRJZGVudGlmaWVyLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIFNlbGVjdGFibGVPYmplY3RMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGVjdGVkOwogICAgaWYgKCAkUGFyYW17U2VsZWN0ZWR9ICYmICRQYXJhbXtTZWxlY3RlZH0gZXEgJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0gKSB7CiAgICAgICAgJFNlbGVjdGVkID0gMTsKICAgIH0KCiAgICAjIG9iamVjdCBzZWxlY3QgbGlzdAogICAgbXkgQE9iamVjdFNlbGVjdExpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0fSwKICAgICAgICAgICAgVmFsdWUgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e1JlYWxuYW1lfSwKICAgICAgICAgICAgU2VsZWN0ZWQgPT4gJFNlbGVjdGVkLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiBAT2JqZWN0U2VsZWN0TGlzdDsKfQoKPWl0ZW0gU2VhcmNoT3B0aW9uTGlzdCgpCgpyZXR1cm4gYW4gYXJyYXkgaGFzaCB3aXRoIHNlYXJjaCBvcHRpb25zCgpSZXR1cm4KCiAgICBAU2VhcmNoT3B0aW9uTGlzdCA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnU2VydmljZScsCiAgICAgICAgICAgIElucHV0U3RyZyA9PiAkRm9ybVN0cmluZywKICAgICAgICAgICAgRm9ybURhdGEgID0+ICdTZXJ2aWNlIE5hbWUnLAogICAgICAgIH0sCiAgICApOwoKICAgIEBTZWFyY2hPcHRpb25MaXN0ID0gJExpbmtPYmplY3QtPlNlYXJjaE9wdGlvbkxpc3QoKTsKCj1jdXQKCnN1YiBTZWFyY2hPcHRpb25MaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZWFyY2ggb3B0aW9uIGxpc3QKICAgIG15IEBTZWFyY2hPcHRpb25MaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICA9PiAnTmFtZScsCiAgICAgICAgICAgIE5hbWUgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb3Jta2V5CiAgICBmb3IgbXkgJFJvdyAoQFNlYXJjaE9wdGlvbkxpc3QpIHsKICAgICAgICAkUm93LT57Rm9ybUtleX0gPSAnU0VBUkNIOjonIC4gJFJvdy0+e0tleX07CiAgICB9CgogICAgIyBhZGQgZm9ybSBkYXRhIGFuZCBpbnB1dCBzdHJpbmcKICAgIFJPVzoKICAgIGZvciBteSAkUm93IChAU2VhcmNoT3B0aW9uTGlzdCkgewoKICAgICAgICAjIGdldCBmb3JtIGRhdGEKICAgICAgICAkUm93LT57Rm9ybURhdGF9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJFJvdy0+e0Zvcm1LZXl9ICk7CgogICAgICAgICMgcGFyc2UgdGhlIGlucHV0IHRleHQgYmxvY2sKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdJbnB1dFRleHQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICRSb3ctPntGb3JtS2V5fSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRSb3ctPntGb3JtRGF0YX0gfHwgJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgdGhlIGlucHV0IHN0cmluZwogICAgICAgICRSb3ctPntJbnB1dFN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnTGlua09iamVjdCcsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBST1c7CiAgICB9CgogICAgcmV0dXJuIEBTZWFyY2hPcHRpb25MaXN0Owp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMgQ29tbW9uClslIFRyYW5zbGF0ZSgiQWx0ZXJuYXRpdmUgdG8iKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJBdmFpbGFiaWxpdHkiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJCYWNrIEVuZCIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkNvbm5lY3RlZCB0byIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkN1cnJlbnQgU3RhdGUiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJEZW1vbnN0cmF0aW9uIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiRGVwZW5kcyBvbiIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkVuZCBVc2VyIFNlcnZpY2UiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJFcnJvcnMiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJGcm9udCBFbmQiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJJVCBNYW5hZ2VtZW50IikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiSVQgT3BlcmF0aW9uYWwiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJJbXBhY3QiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJJbmNpZGVudCBTdGF0ZSIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkluY2x1ZGVzIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiT3RoZXIiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJQYXJ0IG9mIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiUHJvamVjdCIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlY292ZXJ5IFRpbWUiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJSZWxldmFudCB0byIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlcG9ydGluZyIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlcXVpcmVkIGZvciIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlc29sdXRpb24gUmF0ZSIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlc3BvbnNlIFRpbWUiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJTTEEgT3ZlcnZpZXciKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJTZXJ2aWNlIE92ZXJ2aWV3IikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiU2VydmljZS1BcmVhIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiVHJhaW5pbmciKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJUcmFuc2FjdGlvbnMiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJVbmRlcnBpbm5pbmcgQ29udHJhY3QiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJhbGxvY2F0aW9uIikgfCBodG1sICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJIZWFkZXIiPlslIFRyYW5zbGF0ZSgiQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHkiKSB8IGh0bWwgJV08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+PGgyPlslIFRyYW5zbGF0ZSgiTm90ZSIpIHwgaHRtbCAlXTwvaDI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiUHJpb3JpdHkgYWxsb2NhdGlvbiIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkNJUEFsbG9jYXRlIi8+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgRGF0YVRhYmxlTm9IaWdobGlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckNvbHVtbkRlc2NyaXB0aW9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLk9iamVjdFR5cGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJDb2x1bW5EZXNjcmlwdGlvbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckNlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuT2JqZWN0T3B0aW9uKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiSGVhZGVyQ2VsbCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEZXNjcmlwdGlvbkNlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuT2JqZWN0T3B0aW9uKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiRGVzY3JpcHRpb25DZWxsIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29udGVudENlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5PcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIkNvbnRlbnRDZWxsIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iUHJpbWFyeSI+WyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CgoKICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKPC9kaXY+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pblNlcnZpY2UudHQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDE+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIE1hbmFnZW1lbnQiKSB8IGh0bWwgJV08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkxpc3QiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWN0aW9ucyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1sZWZ0Ij48L2k+WyUgVHJhbnNsYXRlKCJHbyB0byBvdmVydmlldyIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uQWRkIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1TZXJ2aWNlRWRpdDtTZXJ2aWNlSUQ9TkVXIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiQWRkIHNlcnZpY2UiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25BZGQiKSAlXQogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25MaXN0IikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TGlzdCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJMaXN0IikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0xpc3RSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgWyUgSUYgRGF0YS5WYWxpZElEICE9IDElXWNsYXNzPSJJbnZhbGlkIlslIEVORCAlXT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgRGF0YS5MZXZlbFNwYWNlIHwgaHRtbCAlXTxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249U2VydmljZUVkaXQ7U2VydmljZUlEPVslIERhdGEuU2VydmljZUlEIHwgdXJpICVdIj5bJSBEYXRhLk5hbWUgfCB0cnVuY2F0ZSg4MCkgfCBodG1sICVdPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iPlslIERhdGEuQ29tbWVudCB8IHRydW5jYXRlKDIwKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlZhbGlkKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TGlzdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdMaXN0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VFZGl0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyQWRkIikgJV0KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFkZCBTZXJ2aWNlIikgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckFkZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckVkaXQiKSAlXQogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRWRpdCBTZXJ2aWNlIikgfCBodG1sICVdIDogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDI+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJFZGl0IikgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTZXJ2aWNlU2F2ZSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlNlcnZpY2VJRCIgdmFsdWU9IlslIERhdGEuU2VydmljZUlEIHwgaHRtbCAlXSIvPgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOYW1lIj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iTmFtZSIgdmFsdWU9IlslIERhdGEuTmFtZVNob3J0IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuTmFtZUludmFsaWQgfCBodG1sICVdIiBtYXhsZW5ndGg9IjIwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSIgPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIiA+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlBhcmVudElEIj5bJSBUcmFuc2xhdGUoIlN1Yi1zZXJ2aWNlIG9mIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlBhcmVudE9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUeXBlSUQiPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5UeXBlT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ3JpdGljYWxpdHkiPlslIFRyYW5zbGF0ZSgiQ3JpdGljYWxpdHkiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ3JpdGljYWxpdHlPcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgLS0tCgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJWYWxpZElEIj5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbGlkT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ29tbWVudCI+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgaWQ9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMjUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJdGVtIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5wdXRLZXkiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdIiBjbGFzcz0iVzI1cGMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIklucHV0S2V5IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5wdXQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdIiBjbGFzcz0iVzI1cGMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbnB1dCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRleHRBcmVhIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiByb3dzPSJbJSBEYXRhLlJvd3MgfCBodG1sICVdIiBjb2xzPSJbJSBEYXRhLkNvbHMgfCBodG1sICVdIj5bJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdPC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUZXh0QXJlYSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk9wdGlvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5PcHRpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPcHRpb24iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJVcGxvYWQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB0eXBlPSJmaWxlIiBzaXplPSIzMCIgY2xhc3M9ImZpeGVkIi8+PGJyLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiI+WyUgRGF0YS5GaWxlbmFtZSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJVcGxvYWQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJQYXNzd29yZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgY2xhc3M9IlcyNXBjIiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlBhc3N3b3JkIikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkl0ZW0iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkgQ2FsbEZvckFjdGlvbiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2VFZGl0IikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pblNMQS50dAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMT5bJSBUcmFuc2xhdGUoIlNMQSBNYW5hZ2VtZW50IikgfCBodG1sICVdPC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkxpc3QiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1sZWZ0Ij48L2k+WyUgVHJhbnNsYXRlKCJHbyB0byBvdmVydmlldyIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1TTEFFZGl0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiQWRkIFNMQSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25BZGQiKSAlXQoKICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uTGlzdCIpICVdCgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdMaXN0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0xpc3RSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgWyUgSUYgRGF0YS5WYWxpZElEICYmIERhdGEuVmFsaWRJRCAhPSAxICVdY2xhc3M9IkludmFsaWQiWyUgRU5EICVdPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249U0xBRWRpdDtTTEFJRD1bJSBEYXRhLlNMQUlEIHwgdXJpICVdIj5bJSBEYXRhLk5hbWUgfCBodG1sICVdPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuU2VydmljZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSI+WyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoMjYpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdMaXN0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0xpc3QiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU0xBRWRpdCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckFkZCIpICVdCiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBZGQgU0xBIikgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckFkZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckVkaXQiKSAlXQogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRWRpdCBTTEEiKSB8IGh0bWwgJV08L2gyPgpbJSBSZW5kZXJCbG9ja0VuZCgiSGVhZGVyRWRpdCIpICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU0xBU2F2ZSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlNMQUlEIiB2YWx1ZT0iWyUgRGF0YS5TTEFJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOYW1lIj5bJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgaWQ9Ik5hbWUiIHZhbHVlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5OYW1lSW52YWxpZCB8IGh0bWwgJV0iIG1heGxlbmd0aD0iMjAwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTZXJ2aWNlSURzIj5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5UeXBlT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIC0tLQoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2VydmljZUlEcyI+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuU2VydmljZU9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNhbGVuZGFyIj5bJSBUcmFuc2xhdGUoIkNhbGVuZGFyIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2FsZW5kYXJPcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJGaXJzdFJlc3BvbnNlVGltZSI+WyUgVHJhbnNsYXRlKCJFc2NhbGF0aW9uIC0gZmlyc3QgcmVzcG9uc2UgdGltZSIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdKTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iRmlyc3RSZXNwb25zZVRpbWUiIGlkPSJGaXJzdFJlc3BvbnNlVGltZSIgdmFsdWU9IlslIERhdGEuRmlyc3RSZXNwb25zZVRpbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcHggVmFsaWRhdGVfTnVtYmVyIiBtYXhsZW5ndGg9IjEwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJGaXJzdFJlc3BvbnNlVGltZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugd3JpdGUgb25seSBudW1iZXJzISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8bGFiZWwgZm9yPSJGaXJzdFJlc3BvbnNlTm90aWZ5Ij5bJSBUcmFuc2xhdGUoIk5vdGlmeSBieSIpIHwgaHRtbCAlXTwvbGFiZWw+IFslIERhdGEuRmlyc3RSZXNwb25zZU5vdGlmeU9wdGlvblN0cmcgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCIwID0gbm8gZXNjYWxhdGlvbiIpIHwgaHRtbCAlXSAtIDI0IFslIFRyYW5zbGF0ZSgiaG91cnMiKSB8IGh0bWwgJV0gPSAxNDQwIFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXSAtIFslIFRyYW5zbGF0ZSgiT25seSBidXNpbmVzcyBob3VycyBhcmUgY291bnRlZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlVwZGF0ZVRpbWUiPlslIFRyYW5zbGF0ZSgiRXNjYWxhdGlvbiAtIHVwZGF0ZSB0aW1lIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0pOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJVcGRhdGVUaW1lIiBpZD0iVXBkYXRlVGltZSIgdmFsdWU9IlslIERhdGEuVXBkYXRlVGltZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBweCBWYWxpZGF0ZV9OdW1iZXIiIG1heGxlbmd0aD0iMTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlVwZGF0ZVRpbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiUGxlYXNlIHdyaXRlIG9ubHkgbnVtYmVycyEiKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGxhYmVsIGZvcj0iVXBkYXRlTm90aWZ5Ij5bJSBUcmFuc2xhdGUoIk5vdGlmeSBieSIpIHwgaHRtbCAlXTwvbGFiZWw+IFslIERhdGEuVXBkYXRlTm90aWZ5T3B0aW9uU3RyZyAlXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIjAgPSBubyBlc2NhbGF0aW9uIikgfCBodG1sICVdIC0gMjQgWyUgVHJhbnNsYXRlKCJob3VycyIpIHwgaHRtbCAlXSA9IDE0NDAgWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdIC0gWyUgVHJhbnNsYXRlKCJPbmx5IGJ1c2luZXNzIGhvdXJzIGFyZSBjb3VudGVkLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU29sdXRpb25UaW1lIj5bJSBUcmFuc2xhdGUoIkVzY2FsYXRpb24gLSBzb2x1dGlvbiB0aW1lIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0pOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJTb2x1dGlvblRpbWUiIGlkPSJTb2x1dGlvblRpbWUiIHZhbHVlPSJbJSBEYXRhLlNvbHV0aW9uVGltZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBweCBWYWxpZGF0ZV9OdW1iZXIiIG1heGxlbmd0aD0iMTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlNvbHV0aW9uVGltZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugd3JpdGUgb25seSBudW1iZXJzISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8bGFiZWwgZm9yPSJTb2x1dGlvbk5vdGlmeSI+WyUgVHJhbnNsYXRlKCJOb3RpZnkgYnkiKSB8IGh0bWwgJV08L2xhYmVsPiBbJSBEYXRhLlNvbHV0aW9uTm90aWZ5T3B0aW9uU3RyZyAlXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIjAgPSBubyBlc2NhbGF0aW9uIikgfCBodG1sICVdIC0gMjQgWyUgVHJhbnNsYXRlKCJob3VycyIpIHwgaHRtbCAlXSA9IDE0NDAgWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdIC0gWyUgVHJhbnNsYXRlKCJPbmx5IGJ1c2luZXNzIGhvdXJzIGFyZSBjb3VudGVkLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzIj5bJSBUcmFuc2xhdGUoIk1pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdKTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTWluVGltZUJldHdlZW5JbmNpZGVudHMiIGlkPSJNaW5UaW1lQmV0d2VlbkluY2lkZW50cyIgdmFsdWU9IlslIERhdGEuTWluVGltZUJldHdlZW5JbmNpZGVudHMgfCBodG1sICVdIiBjbGFzcz0iVzI1cGMgVmFsaWRhdGVfTnVtYmVyIiBtYXhsZW5ndGg9IjE1Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJNaW5UaW1lQmV0d2VlbkluY2lkZW50c0Vycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugd3JpdGUgb25seSBudW1iZXJzISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlZhbGlkSUQiPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZE9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW1lbnQiPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgaWQ9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMjUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIlNMQUl0ZW0iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnB1dEtleSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB2YWx1ZT0iWyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbnB1dEtleSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIklucHV0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIklucHV0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGV4dEFyZWEiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgcm93cz0iWyUgRGF0YS5Sb3dzIHwgaHRtbCAlXSIgY29scz0iWyUgRGF0YS5Db2xzIHwgaHRtbCAlXSI+WyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja0VuZCgiVGV4dEFyZWEiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPcHRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPcHRpb24iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJVcGxvYWQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdHlwZT0iZmlsZSIgY2xhc3M9ImZpeGVkIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIiPlslIERhdGEuRmlsZW5hbWUgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVXBsb2FkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGFzc3dvcmQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSIiIGNsYXNzPSJXNTBwYyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUGFzc3dvcmQiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiU0xBSXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTTEFFZGl0IikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIkN1c3RvbWVyU2VhcmNoSW5pdCIpICVdClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCi8qZ2xvYmFsIElUU006IHRydWUgKi8KCiAgICAvLyBlc2NhcGUgcG9zc2libGUgY29sb25zICg6KSBpbiBlbGVtZW50IGlkIGJlY2F1c2UgalF1ZXJ5IGNhbiBub3QgaGFuZGxlIGl0IGluIGlkIGF0dHJpYnV0ZSBzZWxlY3RvcnMKICAgIElUU00uQWdlbnQuQ3VzdG9tZXJTZWFyY2guSW5pdCggJCgiIyIgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcigiWyUgRGF0YS5JdGVtSUQgfCBodG1sICVdIikgKSApOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkN1c3RvbWVyU2VhcmNoSW5pdCIpICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBcmlhUm9sZU1haW4gU3BhY2luZ1RvcCI+CiAgICA8ZGl2IGNsYXNzPSJXNzVwYyBTcGFjaW5nQm90dG9tIENlbnRlckJveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIk92ZXJ2aWV3IikgfCBodG1sICVdOiBbJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBTcGFjaW5nQm90dG9tIj4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU3RhdGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ3JpdGljYWxpdHkiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJNYXN0ZXJBY3Rpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZsYWcgU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DdXJJbmNpU2lnbmFsICVdIiB0aXRsZT0iWyUgRGF0YS5TdGF0ZSAlXSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxldmVsU3BhY2UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTVNlcnZpY2Vab29tO1NlcnZpY2VJRD1bJSBEYXRhLlNlcnZpY2VJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5Dcml0aWNhbGl0eSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1JvdyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkTWFzdGVyQWN0aW9uTGluayA9ICQodGhpcykuZmluZCgnLk1hc3RlckFjdGlvbkxpbmsnKTsKICAgICAgICAvLyBvbmx5IGFjdCBpZiB0aGUgbGluayB3YXMgbm90IGNsaWNrZWQgZGlyZWN0bHkKICAgICAgICBpZiAoRXZlbnQudGFyZ2V0ICE9PSAkTWFzdGVyQWN0aW9uTGluay5nZXQoMCkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gJE1hc3RlckFjdGlvbkxpbmsuYXR0cignaHJlZicpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VySW5jaVNpZ25hbCB8IGh0bWwgJV0iPjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aDEgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgIDwvaDE+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UgSW5mb3JtYXRpb24iKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwgVGlnaHQiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3VycmVudCBpbmNpZGVudCBzdGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DdXJJbmNpU2lnbmFsIHwgaHRtbCAlXSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTGFzdCBjaGFuZ2VkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkxpbmtUYWJsZVNpbXBsZSIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBEb250UHJpbnQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJMaW5rZWQgT2JqZWN0cyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGlua1RhYmxlU3RyZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTGlua1RhYmxlU2ltcGxlIikgJV0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9ucyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk1lbnVJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiBjbGFzcz0iWyUgRGF0YS5NZW51Q2xhc3MgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJNZW51SXRlbSIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEJveCBTcGFjaW5nVG9wIEV4cGFuZGVkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxpZ2h0Um93IEhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50LiIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgQXV0b0hlaWdodCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuQ3JpdGljYWxpdHkpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuQ29tbWVudCkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTTEEiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgRG9udFByaW50IFNwYWNpbmdUb3AgIFNwYWNpbmdCb3R0b21NZWRpdW0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBc3NvY2lhdGVkIFNMQXMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTTEFSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01TTEFab29tO1NMQUlEPVslIERhdGEuU0xBSUQgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iPlslIERhdGEuQ29tbWVudCB8IHRydW5jYXRlKDEwMCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNMQVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTTEEiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiTGlua1RhYmxlQ29tcGxleCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgWyUgRGF0YS5MaW5rVGFibGVTdHJnICVdCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTGlua1RhYmxlQ29tcGxleCIpICVdCgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCgogICAgJCgndWwuQWN0aW9ucyBhLkFzUG9wdXAnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuVUkuUG9wdXAuT3BlblBvcHVwKCQodGhpcykuYXR0cignaHJlZicpLCAnQWN0aW9uJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7CgogICAgJCgndWwuQWN0aW9ucyBhLkhpc3RvcnlCYWNrJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBoaXN0b3J5LmJhY2soKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBcmlhUm9sZU1haW4gU3BhY2luZ1RvcCI+CiAgICA8ZGl2IGNsYXNzPSJXNzVwYyBTcGFjaW5nQm90dG9tIENlbnRlckJveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIk92ZXJ2aWV3IikgfCBodG1sICVdOiBbJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50IFNwYWNpbmdCb3R0b20iPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1JvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iTWFzdGVyQWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9WyUgRGF0YS5TTEFJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1JvdyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkTWFzdGVyQWN0aW9uTGluayA9ICQodGhpcykuZmluZCgnLk1hc3RlckFjdGlvbkxpbmsnKTsKICAgICAgICAvLyBvbmx5IGFjdCBpZiB0aGUgbGluayB3YXMgbm90IGNsaWNrZWQgZGlyZWN0bHkKICAgICAgICBpZiAoRXZlbnQudGFyZ2V0ICE9PSAkTWFzdGVyQWN0aW9uTGluay5nZXQoMCkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gJE1hc3RlckFjdGlvbkxpbmsuYXR0cignaHJlZicpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiI+CiAgICA8ZGl2IGNsYXNzPSJDbGVhckxlZnQiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iSGVhZGxpbmUiPgogICAgICAgIDxoMT5bJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDE+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckxhc3QiPgogICAgICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTTEEgSW5mb3JtYXRpb24iKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwgVGlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQgYnkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ3JlYXRlQnlOYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkxhc3QgY2hhbmdlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQgYnkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlQnlOYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKCiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9ucyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk1lbnVJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiBjbGFzcz0iWyUgRGF0YS5NZW51Q2xhc3MgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJNZW51SXRlbSIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEJveCBTcGFjaW5nVG9wIEV4cGFuZGVkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxpZ2h0Um93IEhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50LiIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdOiBbJSBEYXRhLk5hbWUgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBBdXRvSGVpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDYWxlbmRhciIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DYWxlbmRhck5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJGaXJzdCBSZXNwb25zZSBUaW1lIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpcnN0UmVzcG9uc2VUaW1lIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlVwZGF0ZSBUaW1lIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlVwZGF0ZVRpbWUgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiU29sdXRpb24gVGltZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Tb2x1dGlvblRpbWUgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2UiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQXNzb2NpYXRlZCBTZXJ2aWNlcyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DdXJJbmNpU2lnbmFsIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZSkgfCBodG1sICVdIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPVslIERhdGEuU2VydmljZUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLkNyaXRpY2FsaXR5KSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiU2VydmljZVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2UiKSAlXQoKICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCgogICAgJCgndWwuQWN0aW9ucyBhLkFzUG9wdXAnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuVUkuUG9wdXAuT3BlblBvcHVwKCQodGhpcykuYXR0cignaHJlZicpLCAnQWN0aW9uJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7CgogICAgJCgndWwuQWN0aW9ucyBhLkhpc3RvcnlCYWNrJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBoaXN0b3J5LmJhY2soKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gS2VybmVsL1N5c3RlbS9Db25zb2xlL0NvbW1hbmQvQWRtaW4vU2VydmljZS9BZGQucG0KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6OkFkbWluOjpTZXJ2aWNlOjpBZGQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwojIC0tLQoKdXNlIGJhc2UgcXcoS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkJhc2VDb21tYW5kKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJywKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiMgLS0tCik7CgpzdWIgQ29uZmlndXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPkRlc2NyaXB0aW9uKCdBZGQgbmV3IHNlcnZpY2UuJyk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICduYW1lJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiTmFtZSBvZiB0aGUgbmV3IHNlcnZpY2UuIiwKICAgICAgICBSZXF1aXJlZCAgICA9PiAxLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvLiovc214LAogICAgKTsKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAnY3JpdGljYWxpdHknLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJDcml0aWNhbGl0eSBvZiB0aGUgbmV3IHNlcnZpY2UuIiwKICAgICAgICBSZXF1aXJlZCAgICA9PiAxLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvLiovc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3R5cGUnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJUeXBlIG9mIHRoZSBuZXcgc2VydmljZS4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci8uKi9zbXgsCiAgICApOwojIC0tLQogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAncGFyZW50LW5hbWUnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJQYXJlbnQgc2VydmljZSBuYW1lLiBJZiBnaXZlbiwgdGhlIG5ldyBzZXJ2aWNlIHdpbGwgYmUgYSBzdWJzZXJ2aWNlIG9mIHRoZSBnaXZlbiBwYXJlbnQuIiwKICAgICAgICBSZXF1aXJlZCAgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvLiovc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2NvbW1lbnQnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJDb21tZW50IGZvciB0aGUgbmV3IHNlcnZpY2UuIiwKICAgICAgICBSZXF1aXJlZCAgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvLiovc214LAogICAgKTsKCiAgICByZXR1cm47Cn0KCnN1YiBQcmVSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGlmIHNlcnZpY2UgYWxyZWFkeSBleGlzdHMKICAgICRTZWxmLT57TmFtZX0gPSAkU2VsZi0+R2V0T3B0aW9uKCduYW1lJyk7CiAgICBteSAlU2VydmljZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlUmV2ZXJzZSA9IHJldmVyc2UgJVNlcnZpY2VMaXN0OwogICAgaWYgKCAkUmV2ZXJzZXsgJFNlbGYtPntOYW1lfSB9ICkgewogICAgICAgIGRpZSAiU2VydmljZSAnJFNlbGYtPntOYW1lfScgYWxyZWFkeSBleGlzdHMhXG4iOwogICAgfQoKICAgICMgY2hlY2sgaWYgcGFyZW50IGV4aXN0cyAoaWYgZ2l2ZW4pCiAgICAkU2VsZi0+e1BhcmVudE5hbWV9ID0gJFNlbGYtPkdldE9wdGlvbigncGFyZW50LW5hbWUnKTsKICAgIGlmICggJFNlbGYtPntQYXJlbnROYW1lfSApIHsKICAgICAgICAkU2VsZi0+e1BhcmVudElEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgIE5hbWUgICA9PiAkU2VsZi0+e1BhcmVudE5hbWV9LAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgIGlmICggISRTZWxmLT57UGFyZW50SUR9ICkgewogICAgICAgICAgICBkaWUgIlBhcmVudCBzZXJ2aWNlICRTZWxmLT57UGFyZW50TmFtZX0gZG9lcyBub3QgZXhpc3QuXG4iOwogICAgICAgIH0KICAgIH0KIyAtLS0KIyBJVFNNQ29yZQojIC0tLQoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIGNvbmZpZyBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiBbICdUaWNrZXQnIF0sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gewogICAgICAgICAgICBJVFNNQ3JpdGljYWxpdHkgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZXMgZm9yIElUU01Dcml0aWNhbGl0eQogICAgbXkgJVBvc3NpYmxlVmFsdWVzOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9IHx8IHt9OwogICAgfQoKICAgIG15ICVDcml0aWNhbGl0eSA9ICV7ICRQb3NzaWJsZVZhbHVlc3tJVFNNQ3JpdGljYWxpdHl9IH07CgogICAgJFNlbGYtPntDcml0aWNhbGl0eX0gPSAkQ3JpdGljYWxpdHl7ICRTZWxmLT5HZXRPcHRpb24oJ2NyaXRpY2FsaXR5JykgfTsKCiAgICBpZiAoICEkU2VsZi0+e0NyaXRpY2FsaXR5fSApIHsKICAgICAgICBkaWUgIkNyaXRpY2FsaXR5ICciIC4gJFNlbGYtPkdldE9wdGlvbignY3JpdGljYWxpdHknKSAuICInIGRvZXMgbm90IGV4aXN0LlxuIjsKICAgIH0KCiAgICAjIGdldCBzZXJ2aWNlIHR5cGUgbGlzdAogICAgbXkgJFNlcnZpY2VUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCiAgICApOwoKICAgIG15ICVTZXJ2aWNlVHlwZSA9IHJldmVyc2UgJXskU2VydmljZVR5cGVMaXN0fTsKCiAgICAkU2VsZi0+e1R5cGVJRH0gPSAkU2VydmljZVR5cGV7ICRTZWxmLT5HZXRPcHRpb24oJ3R5cGUnKSB9OwoKICAgIGlmICggISRTZWxmLT57VHlwZUlEfSApIHsKICAgICAgICBkaWUgIlR5cGUgJyIgLiAkU2VsZi0+R2V0T3B0aW9uKCd0eXBlJykgLiAiJyBkb2VzIG5vdCBleGlzdC5cbiI7CiAgICB9CiMgLS0tCgogICAgcmV0dXJuOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkFkZGluZyBhIG5ldyBzZXJ2aWNlLi4uPC95ZWxsb3c+XG4iKTsKCiAgICAjIGFkZCBzZXJ2aWNlCiAgICBpZiAoCiAgICAgICAgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VBZGQoCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRTZWxmLT57TmFtZX0sCiAgICAgICAgICAgIENvbW1lbnQgID0+ICRTZWxmLT5HZXRPcHRpb24oJ2NvbW1lbnQnKSwKICAgICAgICAgICAgUGFyZW50SUQgPT4gJFNlbGYtPntQYXJlbnRJRH0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gJFNlbGYtPntUeXBlSUR9LAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAkU2VsZi0+e0NyaXRpY2FsaXR5fSwKIyAtLS0KICAgICAgICApCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT5QcmludEVycm9yKCJDYW4ndCBhZGQgc2VydmljZS4iKTsKICAgICAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlRXJyb3IoKTsKICAgIH0KCiAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj5Eb25lLjwvZ3JlZW4+XG4iKTsKICAgIHJldHVybiAkU2VsZi0+RXhpdENvZGVPaygpOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q6OlNlcnZpY2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q6OlNlcnZpY2UKCj1oZWFkMSBTWU5PUFNJUwoKU2VydmljZSBiYWNrZW5kIGZvciB0aGUgc2VydmljZSBsaW5rIG9iamVjdC4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJExpbmtPYmplY3RTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q6OlNlcnZpY2UnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBMaW5rTGlzdFdpdGhEYXRhKCkKCmZpbGwgdXAgdGhlIGxpbmsgbGlzdCB3aXRoIGRhdGEKCiAgICAkU3VjY2VzcyA9ICRMaW5rT2JqZWN0QmFja2VuZC0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICBMaW5rTGlzdCA9PiAkSGFzaFJlZiwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rTGlzdFdpdGhEYXRhIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KExpbmtMaXN0IFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBsaW5rIGxpc3QKICAgIGlmICggcmVmICRQYXJhbXtMaW5rTGlzdH0gbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTGlua0xpc3QgbXVzdCBiZSBhIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkUGFyYW17TGlua0xpc3R9IH0gKSB7CgogICAgICAgIGZvciBteSAkRGlyZWN0aW9uICggc29ydCBrZXlzICV7ICRQYXJhbXtMaW5rTGlzdH0tPnskTGlua1R5cGV9IH0gKSB7CgogICAgICAgICAgICBTRVJWSUNFSUQ6CiAgICAgICAgICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICV7ICRQYXJhbXtMaW5rTGlzdH0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBzZXJ2aWNlIGRhdGEKICAgICAgICAgICAgICAgIG15ICVTZXJ2aWNlRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBpZCBmcm9tIGhhc2ggaWYgbm8gc2VydmljZSBkYXRhIHdhcyBmb3VuZAogICAgICAgICAgICAgICAgaWYgKCAhJVNlcnZpY2VEYXRhICkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259LT57JFNlcnZpY2VJRH07CiAgICAgICAgICAgICAgICAgICAgbmV4dCBTRVJWSUNFSUQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhZGQgc2VydmljZSBkYXRhCiAgICAgICAgICAgICAgICAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259LT57JFNlcnZpY2VJRH0gPSBcJVNlcnZpY2VEYXRhOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBPYmplY3RQZXJtaXNzaW9uKCkKCmNoZWNrcyByZWFkIHBlcm1pc3Npb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IGFuZCBVc2VySUQuCgogICAgJFBlcm1pc3Npb24gPSAkTGlua09iamVjdC0+T2JqZWN0UGVybWlzc2lvbigKICAgICAgICBPYmplY3QgID0+ICdTZXJ2aWNlJywKICAgICAgICBLZXkgICAgID0+IDEyMywKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE9iamVjdFBlcm1pc3Npb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoT2JqZWN0IEtleSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgbW9kdWxlIHJlZ2lzdHJ5IG9mIEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICBteSAkTW9kdWxlUmVnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPntBZ2VudElUU01TZXJ2aWNlWm9vbX07CgogICAgIyBkbyBub3QgZ3JhbnQgYWNjZXNzIGlmIGZyb250ZW5kIG1vZHVsZSBpcyBub3QgcmVnaXN0ZXJlZAogICAgcmV0dXJuIGlmICEkTW9kdWxlUmVnOwoKICAgICMgZ3JhbnQgYWNjZXNzIGlmIG1vZHVsZSBwZXJtaXNzb24gaGFzIG5vIEdyb3VwIG9yIEdyb3VwUm8gZGVmaW5lZAogICAgaWYgKCAhJE1vZHVsZVJlZy0+e0dyb3VwUm99ICYmICEkTW9kdWxlUmVnLT57R3JvdXB9ICkgewogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIFBFUk1JU1NJT046CiAgICBmb3IgbXkgJFBlcm1pc3Npb24gKHF3KEdyb3VwUm8gR3JvdXApKSB7CgogICAgICAgIG5leHQgUEVSTUlTU0lPTiBpZiAhJE1vZHVsZVJlZy0+eyRQZXJtaXNzaW9ufTsKICAgICAgICBuZXh0IFBFUk1JU1NJT04gaWYgcmVmICRNb2R1bGVSZWctPnskUGVybWlzc2lvbn0gbmUgJ0FSUkFZJzsKCiAgICAgICAgZm9yIG15ICRHcm91cCAoIEB7ICRNb2R1bGVSZWctPnskUGVybWlzc2lvbn0gfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBncm91cCBpZAogICAgICAgICAgICBteSAkR3JvdXBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExvb2t1cCggR3JvdXAgPT4gJEdyb3VwICk7CgogICAgICAgICAgICBteSAkVHlwZTsKICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBlcSAnR3JvdXBSbycgKSB7CiAgICAgICAgICAgICAgICAkVHlwZSA9ICdybyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUGVybWlzc2lvbiBlcSAnR3JvdXAnICkgewogICAgICAgICAgICAgICAgJFR5cGUgPSAncncnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCB1c2VyIGdyb3Vwcywgd2hlcmUgdGhlIHVzZXIgaGFzIHRoZSBhcHByb3ByaWF0ZSBwcml2aWxlZ2UKICAgICAgICAgICAgbXkgJUdyb3VwcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBUeXBlICAgPT4gJFR5cGUsCiAgICAgICAgICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBncmFudCBhY2Nlc3MgaWYgYWdlbnQgaXMgYSBtZW1iZXIgaW4gdGhlIGdyb3VwCiAgICAgICAgICAgIHJldHVybiAxIGlmICRHcm91cHN7JEdyb3VwSUR9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0KCj1pdGVtIE9iamVjdERlc2NyaXB0aW9uR2V0KCkKCnJldHVybiBhIGhhc2ggb2Ygb2JqZWN0IGRlc2NyaXB0aW9ucwoKUmV0dXJuCiAgICAlRGVzY3JpcHRpb24gPSAoCiAgICAgICAgTm9ybWFsID0+ICJTZXJ2aWNlIFNlcnZpY2VOYW1lIiwKICAgICAgICBMb25nICAgPT4gIlNlcnZpY2UgUGFyZW50U2VydmljZTo6U2VydmljZU5hbWUiLAogICAgKTsKCiAgICAlRGVzY3JpcHRpb24gPSAkTGlua09iamVjdC0+T2JqZWN0RGVzY3JpcHRpb25HZXQoCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3REZXNjcmlwdGlvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPYmplY3QgS2V5IFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgZGVzY3JpcHRpb24KICAgIG15ICVEZXNjcmlwdGlvbiA9ICgKICAgICAgICBOb3JtYWwgPT4gJ1NlcnZpY2UnLAogICAgICAgIExvbmcgICA9PiAnU2VydmljZScsCiAgICApOwoKICAgIHJldHVybiAlRGVzY3JpcHRpb24gaWYgJFBhcmFte01vZGV9ICYmICRQYXJhbXtNb2RlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICAjIGdldCBzZXJ2aWNlCiAgICBteSAlU2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEICAgICA9PiAkUGFyYW17S2V5fSwKICAgICAgICBJbmNpZGVudFN0YXRlID0+IDAsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gaWYgISVTZXJ2aWNlOwoKICAgICMgY3JlYXRlIGRlc2NyaXB0aW9uCiAgICAlRGVzY3JpcHRpb24gPSAoCiAgICAgICAgTm9ybWFsID0+ICJTZXJ2aWNlICckU2VydmljZXtOYW1lU2hvcnR9JyIsCiAgICAgICAgTG9uZyAgID0+ICJTZXJ2aWNlICckU2VydmljZXtOYW1lfSciLAogICAgKTsKCiAgICByZXR1cm4gJURlc2NyaXB0aW9uOwp9Cgo9aXRlbSBPYmplY3RTZWFyY2goKQoKcmV0dXJuIGEgaGFzaCBsaXN0IG9mIHRoZSBzZWFyY2ggcmVzdWx0cwoKUmV0dXJuCiAgICAkU2VhcmNoTGlzdCA9IHsKICAgICAgICBOT1RMSU5LRUQgPT4gewogICAgICAgICAgICBTb3VyY2UgPT4gewogICAgICAgICAgICAgICAgMTIgID0+ICREYXRhT2ZJdGVtMTIsCiAgICAgICAgICAgICAgICAyMTIgPT4gJERhdGFPZkl0ZW0yMTIsCiAgICAgICAgICAgICAgICAzMzIgPT4gJERhdGFPZkl0ZW0zMzIsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH07CgogICAgJFNlYXJjaExpc3QgPSAkTGlua09iamVjdEJhY2tlbmQtPk9iamVjdFNlYXJjaCgKICAgICAgICBTZWFyY2hQYXJhbXMgPT4gJEhhc2hSZWYsICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0U2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHBhcmFtcwogICAgJFBhcmFte1NlYXJjaFBhcmFtc30gfHw9IHt9OwoKICAgICMgYWRkIHdpbGRjYXJkcwogICAgbXkgJVNlYXJjaDsKICAgIGlmICggJFBhcmFte1NlYXJjaFBhcmFtc30tPntOYW1lfSApIHsKICAgICAgICAkU2VhcmNoe05hbWV9ID0gJyonIC4gJFBhcmFte1NlYXJjaFBhcmFtc30tPntOYW1lfSAuICcqJzsKICAgIH0KCiAgICAjIHNlYXJjaCB0aGUgc2VydmljZXMKICAgIG15IEBTZXJ2aWNlSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZVNlYXJjaCgKICAgICAgICAleyAkUGFyYW17U2VhcmNoUGFyYW1zfSB9LAogICAgICAgICVTZWFyY2gsCiAgICAgICAgTGltaXQgID0+IDUwLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJVNlYXJjaExpc3Q7CiAgICBTRVJWSUNFSUQ6CiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoQFNlcnZpY2VJRHMpIHsKCiAgICAgICAgIyBnZXQgc2VydmljZSBkYXRhCiAgICAgICAgbXkgJVNlcnZpY2VEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUdldCgKICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBTRVJWSUNFSUQgaWYgISVTZXJ2aWNlRGF0YTsKCiAgICAgICAgIyBhZGQgc2VydmljZSBkYXRhCiAgICAgICAgJFNlYXJjaExpc3R7Tk9UTElOS0VEfS0+e1NvdXJjZX0tPnskU2VydmljZUlEfSA9IFwlU2VydmljZURhdGE7CiAgICB9CgogICAgcmV0dXJuIFwlU2VhcmNoTGlzdDsKfQoKPWl0ZW0gTGlua0FkZFByZSgpCgpsaW5rIGFkZCBwcmUgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFByZSgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgU291cmNlS2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFByZSgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtBZGRQcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBMaW5rQWRkUG9zdCgpCgpsaW5rIGFkZCBwcmUgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFBvc3QoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtBZGRQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0FkZFBvc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBMaW5rRGVsZXRlUHJlKCkKCmxpbmsgZGVsZXRlIHByZSBldmVudCBtb2R1bGUKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0RlbGV0ZVByZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxIGlmICRQYXJhbXtTdGF0ZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIExpbmtEZWxldGVQb3N0KCkKCmxpbmsgZGVsZXRlIHBvc3QgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0RlbGV0ZVBvc3QoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0RlbGV0ZVBvc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgICMgdXBkYXRlIHRoZSBjdXJyZW50IGluY2lkZW50IHN0YXRlIHR5cGUgZnJvbSBDSXMgb2YgdGhlIHNlcnZpY2UKICAgICMgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlIGR5bmFtaWMgaW5jaWRlbnQgY2FsY3VsYXRpb24gaXMgcmVzZXQgYWZ0ZXIKICAgICMgdW5saW5raW5nIGEgQ0kgd2hpY2ggaGFzIGJlZW4gaW4gYW4gaW5jaWRlbnQgc3RhdGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VQcmVmZXJlbmNlc1NldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte0tleX0sCiAgICAgICAgS2V5ICAgICAgID0+ICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycsCiAgICAgICAgVmFsdWUgICAgID0+ICcnLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZSAtIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24gbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBjcml0aWNhbGl0eSwgaW1wYWN0IGFuZCBwcmlvcml0eSBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJElUU01DSVBBbGxvY2F0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBBbGxvY2F0ZUxpc3QoKQoKcmV0dXJuIGEgMmQgaGFzaCByZWZlcmVuY2Ugb2YgYWxsb2NhdGlvbnMKCiAgICBteSAkTGlzdFJlZiA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCkM8JExpc3RSZWY+IGlzIHNvbWV0aGluZyBsaWtlCgogICAgJExpc3RSZXQgPSB7CiAgICAgICAgJzMgbm9ybWFsJyA9PiB7CiAgICAgICAgICAgICcxIHZlcnkgbG93JyA9PiAxLAogICAgICAgICAgICAnMyBub3JtYWwnICAgPT4gMiwKICAgICAgICAgICAgJzQgaGlnaCcgICAgID0+IDMsCiAgICAgICAgfSwKICAgICAgICAnNSB2ZXJ5IGhpZ2gnID0+IHsKICAgICAgICAgICAgJzIgbG93JyAgICA9PiAzLAogICAgICAgICAgICAnMyBub3JtYWwnID0+IDQsCiAgICAgICAgICAgICc0IGhpZ2gnICAgPT4gNSwKICAgICAgICB9LAogICAgfTsKCm1lYW5pbmcgdGhhdCB0aGUgQ3JpdGljYWxpdHkgJzMgbm9ybWFsJyBhbmQgdGhlIEltcGFjdCAnMSB2ZXJ5IGxvdycgc3VnZ2VzdCB0aGUgUHJpb3JpdHlJRCAnMScuCgo9Y3V0CgpzdWIgQWxsb2NhdGVMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGFzayBkYXRhYmFzZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgY3JpdGljYWxpdHksIGltcGFjdCwgcHJpb3JpdHlfaWQgRlJPTSBjaXBfYWxsb2NhdGUnLAogICAgKTsKCiAgICAjIHJlc3VsdCBsaXN0CiAgICBteSAlQWxsb2NhdGVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQWxsb2NhdGVEYXRheyAkUm93WzFdIH17ICRSb3dbMF0gfSA9ICRSb3dbMl07CiAgICB9CgogICAgcmV0dXJuIFwlQWxsb2NhdGVEYXRhOwp9Cgo9aXRlbSBBbGxvY2F0ZVVwZGF0ZSgpCgp1cGRhdGUgdGhlIGFsbG9jYXRpb24gb2YgY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkKCiAgICBteSAkVHJ1ZSA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVVcGRhdGUoCiAgICAgICAgQWxsb2NhdGVEYXRhID0+ICREYXRhUmVmLCAgIyAyRCBoYXNoIHJlZmVyZW5jZQogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBBbGxvY2F0ZVVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhBbGxvY2F0ZURhdGEgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIGFsbG9jYXRlIGRhdGEgaXMgYSBoYXNoIHJlZmVyZW5jZQogICAgaWYgKCByZWYgJFBhcmFte0FsbG9jYXRlRGF0YX0gbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnQWxsb2NhdGVEYXRhIG11c3QgYmUgYSAyRCBoYXNoIHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgaWYgYWxsb2NhdGUgZGF0YSBpcyBhIDJEIGhhc2ggcmVmZXJlbmNlCiAgICBJTVBBQ1Q6CiAgICBmb3IgbXkgJEltcGFjdCAoIHNvcnQga2V5cyAleyAkUGFyYW17QWxsb2NhdGVEYXRhfSB9ICkgewoKICAgICAgICBuZXh0IElNUEFDVCBpZiByZWYgJFBhcmFte0FsbG9jYXRlRGF0YX0tPnskSW1wYWN0fSBlcSAnSEFTSCc7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnQWxsb2NhdGVEYXRhIG11c3QgYmUgYSAyRCBoYXNoIHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGVsZXRlIG9sZCBhbGxvY2F0aW9ucwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKCBTUUwgPT4gJ0RFTEVURSBGUk9NIGNpcF9hbGxvY2F0ZScgKTsKCiAgICAjIGluc2VydCBuZXcgYWxsb2NhdGlvbnMKICAgIGZvciBteSAkSW1wYWN0ICggc29ydCBrZXlzICV7ICRQYXJhbXtBbGxvY2F0ZURhdGF9IH0gKSB7CgogICAgICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKCBzb3J0IGtleXMgJXsgJFBhcmFte0FsbG9jYXRlRGF0YX0tPnskSW1wYWN0fSB9ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IHByaW9yaXR5CiAgICAgICAgICAgIG15ICRQcmlvcml0eUlEID0gJFBhcmFte0FsbG9jYXRlRGF0YX0tPnskSW1wYWN0fS0+eyRDcml0aWNhbGl0eX07CgogICAgICAgICAgICAjIGluc2VydCBuZXcgYWxsb2NhdGlvbgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGNpcF9hbGxvY2F0ZSAnCiAgICAgICAgICAgICAgICAgICAgLiAnKGNyaXRpY2FsaXR5LCBpbXBhY3QsIHByaW9yaXR5X2lkLCAnCiAgICAgICAgICAgICAgICAgICAgLiAnY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgVkFMVUVTICcKICAgICAgICAgICAgICAgICAgICAuICcoPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgICAgICBcJENyaXRpY2FsaXR5LCBcJEltcGFjdCwgXCRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFByaW9yaXR5QWxsb2NhdGlvbkdldCgpCgpyZXR1cm4gdGhlIHByaW9yaXR5IGlkIG9mIGEgY3JpdGljYWxpdHkgYW5kIGFuIGltcGFjdAoKICAgIG15ICRQcmlvcml0eUlEID0gJENJUEFsbG9jYXRlT2JqZWN0LT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgIEltcGFjdCAgICAgID0+ICczIG5vcm1hbCcsCiAgICApOwoKPWN1dAoKc3ViIFByaW9yaXR5QWxsb2NhdGlvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDcml0aWNhbGl0eSBJbXBhY3QpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHByaW9yaXR5IGlkIGZyb20gZGIKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIHByaW9yaXR5X2lkIEZST00gY2lwX2FsbG9jYXRlICcKICAgICAgICAgICAgLiAnV0hFUkUgY3JpdGljYWxpdHkgPSA/IEFORCBpbXBhY3QgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q3JpdGljYWxpdHl9LCBcJFBhcmFte0ltcGFjdH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHJlc3VsdAogICAgbXkgJFByaW9yaXR5SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRQcmlvcml0eUlEID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJFByaW9yaXR5SUQ7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIFNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gS2VybmVsL1N5c3RlbS9TZXJ2aWNlLnBtCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIChxdyg6YWxsKSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCiMgLS0tCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UgLSBzZXJ2aWNlIGxpYgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgc2VydmljZSBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgJFNlbGYtPntEQk9iamVjdH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAkU2VsZi0+e0NhY2hlVHlwZX0gPSAnU2VydmljZSc7CiAgICAkU2VsZi0+e0NhY2hlVFRMfSAgPSA2MCAqIDYwICogMjQgKiAyMDsKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIGZvciBJVFNNQ3JpdGljYWxpdHkKICAgIG15ICREeW5hbWljRmllbGRDb25maWdBcnJheVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsgJ1RpY2tldCcgXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiB7CiAgICAgICAgICAgIElUU01Dcml0aWNhbGl0eSA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZvciBJVFNNQ3JpdGljYWxpdHkKICAgIG15ICVQb3NzaWJsZVZhbHVlczsKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmIH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgICAgICRQb3NzaWJsZVZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e1Bvc3NpYmxlVmFsdWVzfSB8fCB7fTsKICAgIH0KCiAgICAjIHNldCB0aGUgY3JpdGljYWxpdHkgbGlzdAogICAgJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9ID0gJFBvc3NpYmxlVmFsdWVze0lUU01Dcml0aWNhbGl0eX07CiMgLS0tCgogICAgIyBsb2FkIGdlbmVyYXRvciBwcmVmZXJlbmNlcyBtb2R1bGUKICAgIG15ICRHZW5lcmF0b3JNb2R1bGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NlcnZpY2U6OlByZWZlcmVuY2VzTW9kdWxlJykKICAgICAgICB8fCAnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U6OlByZWZlcmVuY2VzREInOwogICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCRHZW5lcmF0b3JNb2R1bGUpICkgewogICAgICAgICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9ID0gJEdlbmVyYXRvck1vZHVsZS0+bmV3KCAleyRTZWxmfSApOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gU2VydmljZUxpc3QoKQoKcmV0dXJuIGEgaGFzaCBsaXN0IG9mIHNlcnZpY2VzCgogICAgbXkgJVNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0KAogICAgICAgIFZhbGlkICA9PiAwLCAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEgKDB8MSkKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgU2VydmljZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdmFsaWQgcGFyYW0KICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkUGFyYW17VmFsaWR9ID0gMTsKICAgIH0KCiAgICAjIHJlYWQgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdTZXJ2aWNlTGlzdDo6VmFsaWQ6OicgLiAkUGFyYW17VmFsaWR9OwoKICAgIGlmICggJFBhcmFte1ZhbGlkfSAmJiBkZWZpbmVkICRQYXJhbXtLZWVwQ2hpbGRyZW59ICYmICRQYXJhbXtLZWVwQ2hpbGRyZW59IGVxICcxJyApIHsKICAgICAgICAkQ2FjaGVLZXkgLj0gJzo6S2VlcENoaWxkcmVuOjonIC4gJFBhcmFte0tlZXBDaGlsZHJlbn07CiAgICB9CgogICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJXskQ2FjaGV9IGlmIHJlZiAkQ2FjaGUgZXEgJ0hBU0gnOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgbmFtZSwgdmFsaWRfaWQgRlJPTSBzZXJ2aWNlJywKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlU2VydmljZUxpc3Q7CiAgICBteSAlU2VydmljZVZhbGlkTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNlcnZpY2VMaXN0eyAkUm93WzBdIH0gICAgICA9ICRSb3dbMV07CiAgICAgICAgJFNlcnZpY2VWYWxpZExpc3R7ICRSb3dbMF0gfSA9ICRSb3dbMl07CiAgICB9CgogICAgaWYgKCAhJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+IFwlU2VydmljZUxpc3QsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJVNlcnZpY2VMaXN0IGlmICEkUGFyYW17VmFsaWR9OwogICAgfQoKICAgICMgZ2V0IHZhbGlkIGlkcwogICAgbXkgQFZhbGlkSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCk7CgogICAgIyBkdXBsaWNhdGUgc2VydmljZSBsaXN0CiAgICBteSAlU2VydmljZUxpc3RUbXAgPSAlU2VydmljZUxpc3Q7CgogICAgIyBhZGQgc3VmZml4IGZvciBjb3JyZWN0IHNvcnRpbmcKICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICVTZXJ2aWNlTGlzdFRtcCApIHsKICAgICAgICAkU2VydmljZUxpc3RUbXB7JFNlcnZpY2VJRH0gLj0gJzo6JzsKICAgIH0KCiAgICBteSAlU2VydmljZUludmFsaWRMaXN0OwogICAgU0VSVklDRUlEOgogICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IHsgJFNlcnZpY2VMaXN0VG1weyRhfSBjbXAgJFNlcnZpY2VMaXN0VG1weyRifSB9IGtleXMgJVNlcnZpY2VMaXN0VG1wICkKICAgIHsKCiAgICAgICAgbXkgJFZhbGlkID0gc2NhbGFyIGdyZXAgeyAkXyBlcSAkU2VydmljZVZhbGlkTGlzdHskU2VydmljZUlEfSB9IEBWYWxpZElEczsKCiAgICAgICAgbmV4dCBTRVJWSUNFSUQgaWYgJFZhbGlkOwoKICAgICAgICAkU2VydmljZUludmFsaWRMaXN0eyAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0gfSA9IDE7CiAgICAgICAgZGVsZXRlICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfTsKICAgIH0KCiAgICAjIGRlbGV0ZSBpbnZhbGlkIHNlcnZpY2VzIGFuZCBjaGlsZHJlbgogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17S2VlcENoaWxkcmVufSB8fCAhJFBhcmFte0tlZXBDaGlsZHJlbn0gKSB7CiAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IGtleXMgJVNlcnZpY2VMaXN0ICkgewoKICAgICAgICAgICAgSU5WQUxJRE5BTUU6CiAgICAgICAgICAgIGZvciBteSAkSW52YWxpZE5hbWUgKCBzb3J0IGtleXMgJVNlcnZpY2VJbnZhbGlkTGlzdCApIHsKCiAgICAgICAgICAgICAgICBpZiAoICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfSA9fiBteyBcQSBcUSRJbnZhbGlkTmFtZVxFIDo6IH14bXMgKSB7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfTsKICAgICAgICAgICAgICAgICAgICBsYXN0IElOVkFMSUROQU1FOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVTZXJ2aWNlTGlzdCwKICAgICk7CgogICAgcmV0dXJuICVTZXJ2aWNlTGlzdDsKfQoKPWl0ZW0gU2VydmljZUxpc3RHZXQoKQoKcmV0dXJuIGEgbGlzdCBvZiBzZXJ2aWNlcyB3aXRoIHRoZSBjb21wbGV0ZSBsaXN0IG9mIGF0dHJpYnV0ZXMgZm9yIGVhY2ggc2VydmljZQoKICAgIG15ICRTZXJ2aWNlTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdEdldCgKICAgICAgICBWYWxpZCAgPT4gMCwgICAjIChvcHRpb25hbCkgZGVmYXVsdCAxICgwfDEpCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIHJldHVybnMKCiAgICAkU2VydmljZUxpc3QgPSBbCiAgICAgICAgewogICAgICAgICAgICBTZXJ2aWNlSUQgID0+IDEsCiAgICAgICAgICAgIFBhcmVudElEICAgPT4gMCwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTXlTZXJ2aWNlJywKICAgICAgICAgICAgTmFtZVNob3J0ICA9PiAnTXlTZXJ2aWNlJywKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgID0+ICdTb21lIENvbW1lbnQnCiAgICAgICAgICAgIENyZWF0ZVRpbWUgPT4gJzIwMTEtMDItMDggMTU6MDg6MDAnLAogICAgICAgICAgICBDaGFuZ2VUaW1lID0+ICcyMDExLTA2LTExIDE3OjIyOjAwJywKICAgICAgICAgICAgQ3JlYXRlQnkgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgICAgICA9PiAxNiwKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnQmFja2VuZCcsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ICAgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAxLAogICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgU2VydmljZUlEICA9PiAyLAogICAgICAgICAgICBQYXJlbnRJRCAgID0+IDEsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ015U2VydmljZTo6TXlTdWJTZXJ2aWNlJywKICAgICAgICAgICAgTmFtZVNob3J0ICA9PiAnTXlTdWJTZXJ2aWNlJywKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgID0+ICdTb21lIENvbW1lbnQnCiAgICAgICAgICAgIENyZWF0ZVRpbWUgPT4gJzIwMTEtMDItMDggMTU6MDg6MDAnLAogICAgICAgICAgICBDaGFuZ2VUaW1lID0+ICcyMDExLTA2LTExIDE3OjIyOjAwJywKICAgICAgICAgICAgQ3JlYXRlQnkgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgICAgICA9PiAxNiwKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnQmFja2VuZCcsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ICAgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAxLAogICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgICMgLi4uCiAgICBdOwoKPWN1dAoKc3ViIFNlcnZpY2VMaXN0R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHZhbGlkIHBhcmFtCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtWYWxpZH0gKSB7CiAgICAgICAgJFBhcmFte1ZhbGlkfSA9IDE7CiAgICB9CgogICAgIyBjaGVjayBjYWNoZWQgcmVzdWx0cwogICAgbXkgJENhY2hlS2V5ID0gJ0NhY2hlOjpTZXJ2aWNlTGlzdEdldDo6VmFsaWQ6OicgLiAkUGFyYW17VmFsaWR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmIGRlZmluZWQgJENhY2hlOwoKICAgICMgY3JlYXRlIFNRTCBxdWVyeQogICAgbXkgJFNRTCA9ICdTRUxFQ1QgaWQsIG5hbWUsIHZhbGlkX2lkLCBjb21tZW50cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSAnCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAuICIsIHR5cGVfaWQsIGNyaXRpY2FsaXR5ICIKIyAtLS0KICAgICAgICAuICdGUk9NIHNlcnZpY2UnOwoKICAgIGlmICggJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkU1FMIC49ICcgV0hFUkUgdmFsaWRfaWQgSU4gKCcgLiBqb2luICcsICcsCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpIC4gJyknOwogICAgfQoKICAgICRTUUwgLj0gJyBPUkRFUiBCWSBuYW1lJzsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICRTUUwsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQFNlcnZpY2VMaXN0OwogICAgbXkgJVNlcnZpY2VOYW1lMklEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBteSAlU2VydmljZURhdGE7CiAgICAgICAgJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0gID0gJFJvd1swXTsKICAgICAgICAkU2VydmljZURhdGF7TmFtZX0gICAgICAgPSAkUm93WzFdOwogICAgICAgICRTZXJ2aWNlRGF0YXtWYWxpZElEfSAgICA9ICRSb3dbMl07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NvbW1lbnR9ICAgID0gJFJvd1szXSB8fCAnJzsKICAgICAgICAkU2VydmljZURhdGF7Q3JlYXRlVGltZX0gPSAkUm93WzRdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDcmVhdGVCeX0gICA9ICRSb3dbNV07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NoYW5nZVRpbWV9ID0gJFJvd1s2XTsKICAgICAgICAkU2VydmljZURhdGF7Q2hhbmdlQnl9ICAgPSAkUm93WzddOwojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgJFNlcnZpY2VEYXRhe1R5cGVJRH0gICAgICA9ICRSb3dbOF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fSA9ICRSb3dbOV0gfHwgJyc7CiMgLS0tCgogICAgICAgICMgYWRkIHNlcnZpY2UgZGF0YSB0byBzZXJ2aWNlIGxpc3QKICAgICAgICBwdXNoIEBTZXJ2aWNlTGlzdCwgXCVTZXJ2aWNlRGF0YTsKCiAgICAgICAgIyBidWlsZCBzZXJ2aWNlIGlkIGxvb2t1cCBoYXNoCiAgICAgICAgJFNlcnZpY2VOYW1lMklEeyAkU2VydmljZURhdGF7TmFtZX0gfSA9ICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9OwogICAgfQoKICAgIGZvciBteSAkU2VydmljZURhdGEgKEBTZXJ2aWNlTGlzdCkgewoKICAgICAgICAjIGNyZWF0ZSBzaG9ydCBuYW1lIGFuZCBwYXJlbnRpZAogICAgICAgICRTZXJ2aWNlRGF0YS0+e05hbWVTaG9ydH0gPSAkU2VydmljZURhdGEtPntOYW1lfTsKICAgICAgICBpZiAoICRTZXJ2aWNlRGF0YS0+e05hbWV9ID1+IG17IFxBICguKikgOjogKC4rPykgXHogfXhtcyApIHsKICAgICAgICAgICAgbXkgJFBhcmVudE5hbWUgPSAkMTsKICAgICAgICAgICAgJFNlcnZpY2VEYXRhLT57TmFtZVNob3J0fSA9ICQyOwogICAgICAgICAgICAkU2VydmljZURhdGEtPntQYXJlbnRJRH0gID0gJFNlcnZpY2VOYW1lMklEeyRQYXJlbnROYW1lfTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNlcnZpY2UgcHJlZmVyZW5jZXMKICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAkU2VsZi0+U2VydmljZVByZWZlcmVuY2VzR2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VEYXRhLT57U2VydmljZUlEfSwKICAgICAgICApOwoKICAgICAgICAjIG1lcmdlIGhhc2gKICAgICAgICBpZiAoJVByZWZlcmVuY2VzKSB7CiAgICAgICAgICAgICV7JFNlcnZpY2VEYXRhfSA9ICggJXskU2VydmljZURhdGF9LCAlUHJlZmVyZW5jZXMgKTsKICAgICAgICB9CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAjIGdldCBjdXJyZW50IGluY2lkZW50IHN0YXRlLCBjYWxjdWxhdGVkIGZyb20gcmVsYXRlZCBjb25maWcgaXRlbXMgYW5kIGNoaWxkIHNlcnZpY2VzCiAgICAgICAgbXkgJU5ld1NlcnZpY2VEYXRhID0gJFNlbGYtPl9TZXJ2aWNlR2V0Q3VycmVudEluY2lkZW50U3RhdGUoCiAgICAgICAgICAgIFNlcnZpY2VEYXRhID0+ICRTZXJ2aWNlRGF0YSwKICAgICAgICAgICAgUHJlZmVyZW5jZXMgPT4gXCVQcmVmZXJlbmNlcywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICAkU2VydmljZURhdGEgPSBcJU5ld1NlcnZpY2VEYXRhOwojIC0tLQogICAgfQoKICAgIGlmIChAU2VydmljZUxpc3QpIHsKCiAgICAgICAgIyBzZXQgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+IFxAU2VydmljZUxpc3QsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gXEBTZXJ2aWNlTGlzdDsKfQoKPWl0ZW0gU2VydmljZUdldCgpCgpyZXR1cm4gYSBzZXJ2aWNlIGFzIGhhc2gKClJldHVybgogICAgJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0KICAgICRTZXJ2aWNlRGF0YXtQYXJlbnRJRH0KICAgICRTZXJ2aWNlRGF0YXtOYW1lfQogICAgJFNlcnZpY2VEYXRhe05hbWVTaG9ydH0KICAgICRTZXJ2aWNlRGF0YXtWYWxpZElEfQogICAgJFNlcnZpY2VEYXRhe0NvbW1lbnR9CiAgICAkU2VydmljZURhdGF7Q3JlYXRlVGltZX0KICAgICRTZXJ2aWNlRGF0YXtDcmVhdGVCeX0KICAgICRTZXJ2aWNlRGF0YXtDaGFuZ2VUaW1lfQogICAgJFNlcnZpY2VEYXRhe0NoYW5nZUJ5fQojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAkU2VydmljZURhdGF7VHlwZUlEfQogICAgJFNlcnZpY2VEYXRhe1R5cGV9CiAgICAkU2VydmljZURhdGF7Q3JpdGljYWxpdHl9CiAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlSUR9ICAgICMgT25seSBpZiBJbmNpZGVudFN0YXRlIGlzIDEKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGV9ICAgICAgIyBPbmx5IGlmIEluY2lkZW50U3RhdGUgaXMgMQogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9ICAjIE9ubHkgaWYgSW5jaWRlbnRTdGF0ZSBpcyAxCgogICAgbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEICAgICA9PiAxMjMsCiAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLCAjIE9wdGlvbmFsLCByZXR1cm5zIEN1ckluY2lTdGF0ZSBldGMuCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKIyAtLS0KCiAgICBteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICBOYW1lICAgID0+ICdTZXJ2aWNlOjpTdWJTZXJ2aWNlJywKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFVzZXJJRCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZWl0aGVyIFNlcnZpY2VJRCBvciBOYW1lIG11c3QgYmUgcGFzc2VkCiAgICBpZiAoICEkUGFyYW17U2VydmljZUlEfSAmJiAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTZXJ2aWNlSUQgb3IgTmFtZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdGhhdCBub3QgYm90aCBTZXJ2aWNlSUQgYW5kIE5hbWUgYXJlIGdpdmVuCiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICYmICRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgZWl0aGVyIFNlcnZpY2VJRCBPUiBOYW1lIC0gbm90IGJvdGghJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvb2t1cCB0aGUgU2VydmljZUlECiAgICBpZiAoICRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkUGFyYW17U2VydmljZUlEfSA9ICRTZWxmLT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgY2FjaGVkIHJlc3VsdHMKICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U2VydmljZUdldDo6JyAuICRQYXJhbXtTZXJ2aWNlSUR9OwojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAjIGFkZCB0aGUgSW5jaWRlbnRTdGF0ZSBwYXJhbWV0ZXIgdG8gdGhlIGNhY2hlIGtleQogICAgJFBhcmFte0luY2lkZW50U3RhdGV9IHx8PSAwOwogICAgJENhY2hlS2V5IC49ICc6OkluY2lkZW50U3RhdGU6OicgLiAkUGFyYW17SW5jaWRlbnRTdGF0ZX07CiMgLS0tCiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAleyRDYWNoZX0gaWYgcmVmICRDYWNoZSBlcSAnSEFTSCc7CgogICAgIyBnZXQgc2VydmljZSBmcm9tIGRiCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4KICAgICAgICAgICAgJ1NFTEVDVCBpZCwgbmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5ICcKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICAuICIsIHR5cGVfaWQsIGNyaXRpY2FsaXR5ICIKIyAtLS0KICAgICAgICAgICAgLiAnRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1NlcnZpY2VJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVTZXJ2aWNlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0gID0gJFJvd1swXTsKICAgICAgICAkU2VydmljZURhdGF7TmFtZX0gICAgICAgPSAkUm93WzFdOwogICAgICAgICRTZXJ2aWNlRGF0YXtWYWxpZElEfSAgICA9ICRSb3dbMl07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NvbW1lbnR9ICAgID0gJFJvd1szXSB8fCAnJzsKICAgICAgICAkU2VydmljZURhdGF7Q3JlYXRlVGltZX0gPSAkUm93WzRdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDcmVhdGVCeX0gICA9ICRSb3dbNV07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NoYW5nZVRpbWV9ID0gJFJvd1s2XTsKICAgICAgICAkU2VydmljZURhdGF7Q2hhbmdlQnl9ICAgPSAkUm93WzddOwojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgJFNlcnZpY2VEYXRhe1R5cGVJRH0gICAgICA9ICRSb3dbOF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fSA9ICRSb3dbOV0gfHwgJyc7CiMgLS0tCiAgICB9CgogICAgIyBjaGVjayBzZXJ2aWNlCiAgICBpZiAoICEkU2VydmljZURhdGF7U2VydmljZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHN1Y2ggU2VydmljZUlEICgkUGFyYW17U2VydmljZUlEfSkhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBzaG9ydCBuYW1lIGFuZCBwYXJlbnRpZAogICAgJFNlcnZpY2VEYXRhe05hbWVTaG9ydH0gPSAkU2VydmljZURhdGF7TmFtZX07CiAgICBpZiAoICRTZXJ2aWNlRGF0YXtOYW1lfSA9fiBteyBcQSAoLiopIDo6ICguKz8pIFx6IH14bXMgKSB7CiAgICAgICAgJFNlcnZpY2VEYXRhe05hbWVTaG9ydH0gPSAkMjsKCiAgICAgICAgIyBsb29rdXAgcGFyZW50CiAgICAgICAgbXkgJFNlcnZpY2VJRCA9ICRTZWxmLT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICBOYW1lID0+ICQxLAogICAgICAgICk7CiAgICAgICAgJFNlcnZpY2VEYXRhe1BhcmVudElEfSA9ICRTZXJ2aWNlSUQ7CiAgICB9CgogICAgIyBnZXQgc2VydmljZSBwcmVmZXJlbmNlcwogICAgbXkgJVByZWZlcmVuY2VzID0gJFNlbGYtPlNlcnZpY2VQcmVmZXJlbmNlc0dldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte1NlcnZpY2VJRH0sCiAgICApOwoKICAgICMgbWVyZ2UgaGFzaAogICAgaWYgKCVQcmVmZXJlbmNlcykgewogICAgICAgICVTZXJ2aWNlRGF0YSA9ICggJVNlcnZpY2VEYXRhLCAlUHJlZmVyZW5jZXMgKTsKICAgIH0KIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgaWYgKCAkUGFyYW17SW5jaWRlbnRTdGF0ZX0gKSB7CiAgICAgICAgIyBnZXQgY3VycmVudCBpbmNpZGVudCBzdGF0ZSwgY2FsY3VsYXRlZCBmcm9tIHJlbGF0ZWQgY29uZmlnIGl0ZW1zIGFuZCBjaGlsZCBzZXJ2aWNlcwogICAgICAgICVTZXJ2aWNlRGF0YSA9ICRTZWxmLT5fU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlKAogICAgICAgICAgICBTZXJ2aWNlRGF0YSA9PiBcJVNlcnZpY2VEYXRhLAogICAgICAgICAgICBQcmVmZXJlbmNlcyA9PiBcJVByZWZlcmVuY2VzLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQojIC0tLQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVTZXJ2aWNlRGF0YSwKICAgICk7CgogICAgcmV0dXJuICVTZXJ2aWNlRGF0YTsKfQoKPWl0ZW0gU2VydmljZUxvb2t1cCgpCgpyZXR1cm4gYSBzZXJ2aWNlIG5hbWUgYW5kIGlkCgogICAgbXkgJFNlcnZpY2VOYW1lID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICk7CgogICAgb3IKCiAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgTmFtZSA9PiAnU2VydmljZTo6U3ViU2VydmljZScsCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1NlcnZpY2VJRH0gJiYgISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU2VydmljZUlEIG9yIE5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ0NhY2hlOjpTZXJ2aWNlTG9va3VwOjpJRDo6JyAuICRQYXJhbXtTZXJ2aWNlSUR9OwogICAgICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkQ2FjaGUgaWYgZGVmaW5lZCAkQ2FjaGU7CgogICAgICAgICMgbG9va3VwCiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgbmFtZSBGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1NlcnZpY2VJRH0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSAkUmVzdWx0ID0gJyc7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJFJlc3VsdCA9ICRSb3dbMF07CiAgICAgICAgfQoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+ICRSZXN1bHQsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRSZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBjaGVjayBjYWNoZQogICAgICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U2VydmljZUxvb2t1cDo6TmFtZTo6JyAuICRQYXJhbXtOYW1lfTsKICAgICAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJENhY2hlIGlmIGRlZmluZWQgJENhY2hlOwoKICAgICAgICAjIGxvb2t1cAogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRSZXN1bHQgPSAnJzsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkUmVzdWx0ID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gJFJlc3VsdCwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJFJlc3VsdDsKICAgIH0KfQoKPWl0ZW0gU2VydmljZUFkZCgpCgphZGQgYSBzZXJ2aWNlCgogICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgIE5hbWUgICAgID0+ICdTZXJ2aWNlIE5hbWUnLAogICAgICAgIFBhcmVudElEID0+IDEsICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgIENvbW1lbnQgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgIFR5cGVJRCAgICAgID0+IDIsCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICk7Cgo9Y3V0CgpzdWIgU2VydmljZUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIFZhbGlkSUQgVXNlcklEKSkgewogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBWYWxpZElEIFVzZXJJRCBUeXBlSUQgQ3JpdGljYWxpdHkpKSB7CiMgLS0tCiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGNvbW1lbnQKICAgICRQYXJhbXtDb21tZW50fSB8fD0gJyc7CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBDb21tZW50KSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgc2VydmljZSBuYW1lCiAgICBpZiAoICRQYXJhbXtOYW1lfSA9fiBteyA6OiB9eG1zICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgYWRkIHNlcnZpY2UhIEludmFsaWQgU2VydmljZSBuYW1lICckUGFyYW17TmFtZX0nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgZnVsbCBuYW1lCiAgICAkUGFyYW17RnVsbE5hbWV9ID0gJFBhcmFte05hbWV9OwoKICAgICMgZ2V0IHBhcmVudCBuYW1lCiAgICBpZiAoICRQYXJhbXtQYXJlbnRJRH0gKSB7CiAgICAgICAgbXkgJFBhcmVudE5hbWUgPSAkU2VsZi0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbXtQYXJlbnRJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoJFBhcmVudE5hbWUpIHsKICAgICAgICAgICAgJFBhcmFte0Z1bGxOYW1lfSA9ICRQYXJlbnROYW1lIC4gJzo6JyAuICRQYXJhbXtOYW1lfTsKICAgICAgICB9CiAgICB9CgogICAgIyBmaW5kIGV4aXN0aW5nIHNlcnZpY2UKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBzZXJ2aWNlIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17RnVsbE5hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CiAgICBteSAkRXhpc3RzOwogICAgd2hpbGUgKCAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRFeGlzdHMgPSAxOwogICAgfQoKICAgICMgYWRkIHNlcnZpY2UgdG8gZGF0YWJhc2UKICAgIGlmICgkRXhpc3RzKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdDYW5cJ3QgYWRkIHNlcnZpY2UhIFNlcnZpY2Ugd2l0aCBzYW1lIG5hbWUgYW5kIHBhcmVudCBhbHJlYWR5IGV4aXN0cy4nCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlICcKIyAgICAgICAgICAgIC4gJyhuYW1lLCB2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpICcKIyAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiMgICAgICAgIEJpbmQgPT4gWwojICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiMgICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwKIyAgICAgICAgXSwKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHNlcnZpY2UgJwogICAgICAgICAgICAuICcobmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5LCAnCiAgICAgICAgICAgIC4gJ3R5cGVfaWQsIGNyaXRpY2FsaXR5KSAnCiAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCA/LCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17RnVsbE5hbWV9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtUeXBlSUR9LCBcJFBhcmFte0NyaXRpY2FsaXR5fSwKICAgICAgICBdLAojIC0tLQogICAgKTsKCiAgICAjIGdldCBzZXJ2aWNlIGlkCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0Z1bGxOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwogICAgbXkgJFNlcnZpY2VJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNlcnZpY2VJRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyByZXNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwoKICAgIHJldHVybiAkU2VydmljZUlEOwp9Cgo9aXRlbSBTZXJ2aWNlVXBkYXRlKCkKCnVwZGF0ZSBhbiBleGlzdGluZyBzZXJ2aWNlCgogICAgbXkgJFRydWUgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgICAgIFBhcmVudElEICA9PiAxLCAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgTmFtZSAgICAgID0+ICdTZXJ2aWNlIE5hbWUnLAogICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgIENvbW1lbnQgICA9PiAnQ29tbWVudCcsICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQojICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNlcnZpY2VJRCBOYW1lIFZhbGlkSUQgVXNlcklEKSkgewogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZUlEIE5hbWUgVmFsaWRJRCBVc2VySUQgVHlwZUlEIENyaXRpY2FsaXR5KSkgewojIC0tLQogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IGNvbW1lbnQKICAgICRQYXJhbXtDb21tZW50fSB8fD0gJyc7CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBDb21tZW50KSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgc2VydmljZSBuYW1lCiAgICBpZiAoICRQYXJhbXtOYW1lfSA9fiBteyA6OiB9eG1zICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgdXBkYXRlIHNlcnZpY2UhIEludmFsaWQgU2VydmljZSBuYW1lICckUGFyYW17TmFtZX0nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgb2xkIG5hbWUgb2Ygc2VydmljZQogICAgbXkgJE9sZFNlcnZpY2VOYW1lID0gJFNlbGYtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbXtTZXJ2aWNlSUR9LAogICAgKTsKCiAgICBpZiAoICEkT2xkU2VydmljZU5hbWUgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCB1cGRhdGUgc2VydmljZSEgU2VydmljZSAnJFBhcmFte1NlcnZpY2VJRH0nIGRvZXMgbm90IGV4aXN0LiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgZnVsbCBuYW1lCiAgICAkUGFyYW17RnVsbE5hbWV9ID0gJFBhcmFte05hbWV9OwoKICAgICMgZ2V0IHBhcmVudCBuYW1lCiAgICBpZiAoICRQYXJhbXtQYXJlbnRJRH0gKSB7CgogICAgICAgICMgbG9va3VwIHNlcnZpY2UKICAgICAgICBteSAkUGFyZW50TmFtZSA9ICRTZWxmLT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte1BhcmVudElEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJFBhcmVudE5hbWUpIHsKICAgICAgICAgICAgJFBhcmFte0Z1bGxOYW1lfSA9ICRQYXJlbnROYW1lIC4gJzo6JyAuICRQYXJhbXtOYW1lfTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2ssIGlmIHNlbGVjdGVkIHBhcmVudCB3YXMgYSBjaGlsZCBvZiB0aGlzIHNlcnZpY2UKICAgICAgICBpZiAoICRQYXJhbXtGdWxsTmFtZX0gPX4gbXsgXEEgKCBcUSRPbGRTZXJ2aWNlTmFtZVxFICkgOjogfXhtcyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0NhblwndCB1cGRhdGUgc2VydmljZSEgSW52YWxpZCBwYXJlbnQgd2FzIHNlbGVjdGVkLicKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGZpbmQgZXhpc3RzIHNlcnZpY2UKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBzZXJ2aWNlIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17RnVsbE5hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CiAgICBteSAkRXhpc3RzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9IG5lICRSb3dbMF0gKSB7CiAgICAgICAgICAgICRFeGlzdHMgPSAxOwogICAgICAgIH0KICAgIH0KCiAgICAjIHVwZGF0ZSBzZXJ2aWNlCiAgICBpZiAoJEV4aXN0cykgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnQ2FuXCd0IHVwZGF0ZSBzZXJ2aWNlISBTZXJ2aWNlIHdpdGggc2FtZSBuYW1lIGFuZCBwYXJlbnQgYWxyZWFkeSBleGlzdHMuJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwoKICAgIH0KCiAgICAjIHVwZGF0ZSBzZXJ2aWNlCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQojICAgICAgICBTUUwgPT4gJ1VQREFURSBzZXJ2aWNlIFNFVCBuYW1lID0gPywgdmFsaWRfaWQgPSA/LCBjb21tZW50cyA9ID8sICcKIyAgICAgICAgICAgIC4gJyBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/IFdIRVJFIGlkID0gPycsCiMgICAgICAgIEJpbmQgPT4gWwojICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiMgICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17U2VydmljZUlEfSwKIyAgICAgICAgXSwKICAgICAgICBTUUwgPT4gJ1VQREFURSBzZXJ2aWNlIFNFVCBuYW1lID0gPywgdmFsaWRfaWQgPSA/LCBjb21tZW50cyA9ID8sICcKICAgICAgICAgICAgLiAnIGNoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsIGNoYW5nZV9ieSA9ID8sIHR5cGVfaWQgPSA/LCBjcml0aWNhbGl0eSA9ID8nCiAgICAgICAgICAgIC4gJyBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0Z1bGxOYW1lfSwgXCRQYXJhbXtWYWxpZElEfSwgXCRQYXJhbXtDb21tZW50fSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1R5cGVJRH0sIFwkUGFyYW17Q3JpdGljYWxpdHl9LCBcJFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgXSwKIyAtLS0KICAgICk7CgogICAgbXkgJExpa2VTZXJ2aWNlID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkT2xkU2VydmljZU5hbWUsICdMaWtlJyApIC4gJzo6JSc7CgogICAgIyBmaW5kIGFsbCBjaGlsZHMKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHNlcnZpY2UgV0hFUkUgbmFtZSBMSUtFID8iLAogICAgICAgIEJpbmQgPT4gWyBcJExpa2VTZXJ2aWNlIF0sCiAgICApOwoKICAgIG15IEBDaGlsZHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICVDaGlsZDsKICAgICAgICAkQ2hpbGR7U2VydmljZUlEfSA9ICRSb3dbMF07CiAgICAgICAgJENoaWxke05hbWV9ICAgICAgPSAkUm93WzFdOwogICAgICAgIHB1c2ggQENoaWxkcywgXCVDaGlsZDsKICAgIH0KCiAgICAjIHVwZGF0ZSBjaGlsZHMKICAgIGZvciBteSAkQ2hpbGQgKEBDaGlsZHMpIHsKICAgICAgICAkQ2hpbGQtPntOYW1lfSA9fiBzeyBcQSAoIFxRJE9sZFNlcnZpY2VOYW1lXEUgKSA6OiB9eyRQYXJhbXtGdWxsTmFtZX06On14bXM7CiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICBTUUwgID0+ICdVUERBVEUgc2VydmljZSBTRVQgbmFtZSA9ID8gV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkQ2hpbGQtPntOYW1lfSwgXCRDaGlsZC0+e1NlcnZpY2VJRH0gXSwKICAgICAgICApOwogICAgfQoKICAgICMgcmVzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gU2VydmljZVNlYXJjaCgpCgpyZXR1cm4gc2VydmljZSBpZHMgYXMgYW4gYXJyYXkKCiAgICBteSBAU2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVNlYXJjaCgKICAgICAgICBOYW1lICAgPT4gJ1NlcnZpY2UgTmFtZScsICMgKG9wdGlvbmFsKQogICAgICAgIExpbWl0ICA9PiAxMjIsICAgICAgICAgICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMTAwMAogICAgICAgIFVzZXJJRCA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgVHlwZUlEcyAgICAgICA9PiAyLAogICAgICAgIENyaXRpY2FsaXRpZXMgPT4gWyAnMiBsb3cnLCAnMyBub3JtYWwnIF0sCiMgLS0tCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VTZWFyY2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgbGltaXQKICAgICRQYXJhbXtMaW1pdH0gfHw9IDEwMDA7CgogICAgIyBjcmVhdGUgc3FsIHF1ZXJ5CiAgICBteSAkU1FMCiAgICAgICAgPSAiU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSB2YWxpZF9pZCBJTiAoICR7XChqb2luICcsICcsICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpKX0gKSI7CgogICAgbXkgQEJpbmQ7CgogICAgaWYgKCAkUGFyYW17TmFtZX0gKSB7CgogICAgICAgICMgcXVvdGUKICAgICAgICAkUGFyYW17TmFtZX0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtOYW1lfSwgJ0xpa2UnICk7CgogICAgICAgICMgcmVwbGFjZSAqIHdpdGggJSBhbmQgY2xlYW4gdGhlIHN0cmluZwogICAgICAgICRQYXJhbXtOYW1lfSA9fiBzeyBcKisgfXslfXhtc2c7CiAgICAgICAgJFBhcmFte05hbWV9ID1+IHN7ICUrIH17JX14bXNnOwogICAgICAgIG15ICRMaWtlU3RyaW5nID0gJyUnIC4gJFBhcmFte05hbWV9IC4gJyUnOwogICAgICAgIHB1c2ggQEJpbmQsIFwkTGlrZVN0cmluZzsKCiAgICAgICAgJFNRTCAuPSAiIEFORCBuYW1lIExJS0UgPyI7CiAgICB9CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICMgYWRkIHR5cGUgaWRzCiAgICBpZiAoICRQYXJhbXtUeXBlSURzfSAmJiByZWYgJFBhcmFte1R5cGVJRHN9IGVxICdBUlJBWScgJiYgQHsgJFBhcmFte1R5cGVJRHN9IH0gKSB7CgogICAgICAgICMgcXVvdGUgYXMgaW50ZWdlcgogICAgICAgIGZvciBteSAkVHlwZUlEICggQHsgJFBhcmFte1R5cGVJRHN9IH0gKSB7CiAgICAgICAgICAgICRUeXBlSUQgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRUeXBlSUQsICdJbnRlZ2VyJyApOwogICAgICAgIH0KCiAgICAgICAgJFNRTCAuPSAiIEFORCB0eXBlX2lkIElOICgiIC4gam9pbignLCAnLCBAeyAkUGFyYW17VHlwZUlEc30gfSkgLiAiKSAiOwogICAgfQoKICAgICMgYWRkIGNyaXRpY2FsaXRpZXMKICAgIGlmICgkUGFyYW17Q3JpdGljYWxpdGllc30gJiYgcmVmICRQYXJhbXtDcml0aWNhbGl0aWVzfSBlcSAnQVJSQVknICYmIEB7ICRQYXJhbXtDcml0aWNhbGl0aWVzfSB9ICkgewoKICAgICAgICAjIHF1b3RlIGFuZCB3cmFwIGluIHNpbmdsZSBxdW90ZXMKICAgICAgICBmb3IgbXkgJENyaXRpY2FsaXR5ICggQHsgJFBhcmFte0NyaXRpY2FsaXRpZXN9IH0gKSB7CiAgICAgICAgICAgICRDcml0aWNhbGl0eSA9ICInIiAuICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJENyaXRpY2FsaXR5ICkgLiAiJyI7CiAgICAgICAgfQoKICAgICAgICAkU1FMIC49ICJBTkQgY3JpdGljYWxpdHkgSU4gKCIgLiBqb2luKCcsICcsIEB7ICRQYXJhbXtDcml0aWNhbGl0aWVzfSB9KSAuICIpICI7CiAgICB9CiMgLS0tCgogICAgJFNRTCAuPSAnIE9SREVSIEJZIG5hbWUnOwoKICAgICMgc2VhcmNoIHNlcnZpY2UgaW4gZGIKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICBCaW5kID0+IFxAQmluZCwKICAgICk7CgogICAgbXkgQFNlcnZpY2VMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBTZXJ2aWNlTGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gQFNlcnZpY2VMaXN0Owp9Cgo9aXRlbSBDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgpCgpyZXR1cm5zIGEgbGlzdCBvZiBjdXN0b21lcnVzZXIvc2VydmljZSBtZW1iZXJzCgogICAgU2VydmljZUlEOiBzZXJ2aWNlIGlkCiAgICBDdXN0b21lclVzZXJMb2dpbjogY3VzdG9tZXIgdXNlciBsb2dpbgogICAgRGVmYXVsdFNlcnZpY2VzOiBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlIGRlZmF1bHQgc2VydmljZXMKCiAgICBSZXN1bHQ6IEhBU0ggLT4gcmV0dXJucyBhIGhhc2ggb2Yga2V5ID0+IHNlcnZpY2UgaWQsIHZhbHVlID0+IHNlcnZpY2UgbmFtZQogICAgICAgICAgICBOYW1lIC0+IHJldHVybnMgYW4gYXJyYXkgb2YgdXNlciBuYW1lcwogICAgICAgICAgICBJRCAgIC0+IHJldHVybnMgYW4gYXJyYXkgb2YgdXNlciBpZHMKCiAgICBFeGFtcGxlIChnZXQgc2VydmljZXMgb2YgY3VzdG9tZXIgdXNlcik6CgogICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICdUZXN0JywKICAgICAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICAgICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMCwKICAgICk7CgogICAgRXhhbXBsZSAoZ2V0IGN1c3RvbWVyIHVzZXIgb2Ygc2VydmljZSk6CgogICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkSUQsCiAgICAgICAgUmVzdWx0ICAgID0+ICdIQVNIJywKICAgICk7Cgo9Y3V0CgpzdWIgQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1Jlc3VsdH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFJlc3VsdCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgKG9ubHkgMSBvciAwIGlzIGFsbG93ZWQgdG8gY29ycmVjdGx5IHNldCB0aGUgY2FjaGUga2V5KQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSB8fCAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSApIHsKICAgICAgICAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSA9IDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSA9IDA7CiAgICB9CgogICAgIyBnZXQgb3B0aW9ucyBmb3IgZGVmYXVsdCBzZXJ2aWNlcyBmb3IgdW5rbm93biBjdXN0b21lcnMKICAgIG15ICREZWZhdWx0U2VydmljZVVua25vd25DdXN0b21lcgogICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2U6OkRlZmF1bHQ6OlVua25vd25DdXN0b21lcicpOwogICAgaWYgKAogICAgICAgICREZWZhdWx0U2VydmljZVVua25vd25DdXN0b21lcgogICAgICAgICYmICRQYXJhbXtEZWZhdWx0U2VydmljZXN9CiAgICAgICAgJiYgISRQYXJhbXtTZXJ2aWNlSUR9CiAgICAgICAgJiYgISRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0KICAgICAgICApCiAgICB7CiAgICAgICAgJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSA9ICc8REVGQVVMVD4nOwogICAgfQoKICAgICMgY2hlY2sgbW9yZSBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtTZXJ2aWNlSUR9ICYmICEkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTZXJ2aWNlSUQgb3IgQ3VzdG9tZXJVc2VyTG9naW4hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBjYWNoZSBrZXkKICAgIG15ICRDYWNoZUtleSA9ICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDo6JyAuICRQYXJhbXtSZXN1bHR9IC4gJzo6JwogICAgICAgIC4gJ0RlZmF1bHRTZXJ2aWNlczo6JyAuICRQYXJhbXtEZWZhdWx0U2VydmljZXN9IC4gJzo6JzsKICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgJENhY2hlS2V5IC49ICdTZXJ2aWNlSUQ6OicgLiAkUGFyYW17U2VydmljZUlEfTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSApIHsKICAgICAgICAkQ2FjaGVLZXkgLj0gJ0N1c3RvbWVyVXNlckxvZ2luOjonIC4gJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufTsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIGlmICggJFBhcmFte1Jlc3VsdH0gZXEgJ0hBU0gnICkgewogICAgICAgIHJldHVybiAleyRDYWNoZX0gaWYgcmVmICRDYWNoZSBlcSAnSEFTSCc7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gQHskQ2FjaGV9IGlmIHJlZiAkQ2FjaGUgZXEgJ0FSUkFZJzsKICAgIH0KCiAgICAjIGRiIHF1b3RlCiAgICBmb3IgKCBzb3J0IGtleXMgJVBhcmFtICkgewogICAgICAgICRQYXJhbXskX30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskX30gKTsKICAgIH0KICAgIGZvciAocXcoU2VydmljZUlEKSkgewogICAgICAgICRQYXJhbXskX30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskX30sICdJbnRlZ2VyJyApOwogICAgfQoKICAgICMgc3FsCiAgICBteSAlRGF0YTsKICAgIG15IEBEYXRhOwogICAgbXkgJFNRTCA9ICdTRUxFQ1Qgc2N1LnNlcnZpY2VfaWQsIHNjdS5jdXN0b21lcl91c2VyX2xvZ2luLCBzLm5hbWUgJwogICAgICAgIC4gJyBGUk9NICcKICAgICAgICAuICcgc2VydmljZV9jdXN0b21lcl91c2VyIHNjdSwgc2VydmljZSBzJwogICAgICAgIC4gJyBXSEVSRSAnCiAgICAgICAgLiAiIHMudmFsaWRfaWQgSU4gKCAke1woam9pbiAnLCAnLCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKSl9ICkgQU5EICIKICAgICAgICAuICcgcy5pZCA9IHNjdS5zZXJ2aWNlX2lkIEFORCAnOwoKICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgJFNRTCAuPSAiIHNjdS5zZXJ2aWNlX2lkID0gJFBhcmFte1NlcnZpY2VJRH0iOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59ICkgewogICAgICAgICRTUUwgLj0gIiBzY3UuY3VzdG9tZXJfdXNlcl9sb2dpbiA9ICckUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59JyI7CiAgICB9CgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoIFNRTCA9PiAkU1FMICk7CgogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgbXkgJFZhbHVlID0gJyc7CiAgICAgICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSApIHsKICAgICAgICAgICAgJERhdGF7ICRSb3dbMV0gfSA9ICRSb3dbMF07CiAgICAgICAgICAgICRWYWx1ZSA9ICRSb3dbMF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkRGF0YXsgJFJvd1swXSB9ID0gJFJvd1syXTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoCiAgICAgICAgJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufQogICAgICAgICYmICRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0gbmUgJzxERUZBVUxUPicKICAgICAgICAmJiAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfQogICAgICAgICYmICFrZXlzKCVEYXRhKQogICAgICAgICkKICAgIHsKICAgICAgICAlRGF0YSA9ICRTZWxmLT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJzxERUZBVUxUPicsCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgICAgICAgICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMCwKICAgICAgICApOwogICAgfQoKICAgICMgcmV0dXJuIHJlc3VsdAogICAgaWYgKCAkUGFyYW17UmVzdWx0fSBlcSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiBcJURhdGEsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJURhdGE7CiAgICB9CiAgICBpZiAoICRQYXJhbXtSZXN1bHR9IGVxICdOYW1lJyApIHsKICAgICAgICBARGF0YSA9IHZhbHVlcyAlRGF0YTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIEBEYXRhID0ga2V5cyAlRGF0YTsKICAgIH0KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQERhdGEsCiAgICApOwogICAgcmV0dXJuIEBEYXRhOwp9Cgo9aXRlbSBDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKCkKCnRvIGFkZCBhIG1lbWJlciB0byBhIHNlcnZpY2UKCmlmICdBY3RpdmUnIGlzIDAsIHRoZSBjdXN0b21lciBpcyByZW1vdmVkIGZyb20gdGhlIHNlcnZpY2UKCiAgICAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnVGVzdDEnLAogICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+IDYsCiAgICAgICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIEN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ3VzdG9tZXJVc2VyTG9naW4gU2VydmljZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgZXhpc3RpbmcgcmVsYXRpb24KICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIHNlcnZpY2VfY3VzdG9tZXJfdXNlciBXSEVSRSBjdXN0b21lcl91c2VyX2xvZ2luID0gPyBBTkQgc2VydmljZV9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSwgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCiAgICApOwoKICAgICMgcmV0dXJuIGlmIHJlbGF0aW9uIGlzIG5vdCBhY3RpdmUKICAgIGlmICggISRQYXJhbXtBY3RpdmV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGluc2VydCBuZXcgcmVsYXRpb24KICAgIG15ICRTdWNjZXNzID0gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gc2VydmljZV9jdXN0b21lcl91c2VyICcKICAgICAgICAgICAgLiAnKGN1c3RvbWVyX3VzZXJfbG9naW4sIHNlcnZpY2VfaWQsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnkpICcKICAgICAgICAgICAgLiAnVkFMVUVTICg/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSwgXCRQYXJhbXtTZXJ2aWNlSUR9LCBcJFBhcmFte1VzZXJJRH0gXQogICAgKTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CiAgICByZXR1cm4gJFN1Y2Nlc3M7Cn0KCj1pdGVtIFNlcnZpY2VQcmVmZXJlbmNlc1NldCgpCgpzZXQgc2VydmljZSBwcmVmZXJlbmNlcwoKICAgICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICAgICBLZXkgICAgICAgPT4gJ1VzZXJDb21tZW50JywKICAgICAgICBWYWx1ZSAgICAgPT4gJ3NvbWUgY29tbWVudCcsCiAgICAgICAgVXNlcklEICAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgU2VydmljZVByZWZlcmVuY2VzU2V0IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0tPlNlcnZpY2VQcmVmZXJlbmNlc1NldChAXyk7CgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFNlcnZpY2VQcmVmZXJlbmNlc0dldCgpCgpnZXQgc2VydmljZSBwcmVmZXJlbmNlcwoKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUHJlZmVyZW5jZXNHZXQoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlUHJlZmVyZW5jZXNHZXQgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICByZXR1cm4gJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0tPlNlcnZpY2VQcmVmZXJlbmNlc0dldChAXyk7Cn0KCj1pdGVtIFNlcnZpY2VQYXJlbnRzR2V0KCkKCnJldHVybiBhbiBvcmRlcmVkIGxpc3QgYWxsIHBhcmVudCBzZXJ2aWNlIElEcyBmb3IgdGhlIGdpdmVuIHNlcnZpY2UgZnJvbSB0aGUgcm9vdCBwYXJlbnQgdG8gdGhlCmN1cnJlbnQgc2VydmljZSBwYXJlbnQKCiAgICBteSAkU2VydmljZVBhcmVudHNMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQYXJlbnRzR2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKICAgIHJldHVybnMKCiAgICAkU2VydmljZVBhcmVudHNMaXN0ID0gWyAxLCAyLCAuLi5dOwoKPWN1dAoKc3ViIFNlcnZpY2VQYXJlbnRzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhVc2VySUQgU2VydmljZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgJE5lZWRlZCEnLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcmVhZCBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ1NlcnZpY2VQYXJlbnRzR2V0OjonIC4gJFBhcmFte1NlcnZpY2VJRH07CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAkQ2FjaGUgaWYgcmVmICRDYWNoZTsKCiAgICAjIGdldCB0aGUgbGlzdCBvZiBzZXJ2aWNlcwogICAgbXkgJFNlcnZpY2VMaXN0ID0gJFNlbGYtPlNlcnZpY2VMaXN0R2V0KAogICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGdldCBhIHNlcnZpY2UgbG9va3VwIHRhYmxlCiAgICBteSAlU2VydmljZUxvb2t1cDsKICAgIFNFUlZJQ0U6CiAgICBmb3IgbXkgJFNlcnZpY2VEYXRhICggQHskU2VydmljZUxpc3R9ICkgewogICAgICAgIG5leHQgU0VSVklDRSBpZiAhJFNlcnZpY2VEYXRhOwogICAgICAgIG5leHQgU0VSVklDRSBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJFNlcnZpY2VEYXRhKTsKICAgICAgICBuZXh0IFNFUlZJQ0UgaWYgISRTZXJ2aWNlRGF0YS0+e1NlcnZpY2VJRH07CgogICAgICAgICRTZXJ2aWNlTG9va3VweyAkU2VydmljZURhdGEtPntTZXJ2aWNlSUR9IH0gPSAkU2VydmljZURhdGE7CiAgICB9CgogICAgIyBleGl0IGlmIFNlcnZpY2VJRCBpcyBpbnZhbGlkCiAgICByZXR1cm4gaWYgISRTZXJ2aWNlTG9va3VweyAkUGFyYW17U2VydmljZUlEfSB9OwoKICAgICMgdG8gc3RvcmUgdGhlIHJldHVybiBzdHJ1Y3R1cmUKICAgIG15IEBTZXJ2aWNlUGFyZW50czsKCiAgICAjIGdldCB0aGUgU2VydmljZVBhcmVudElEIGZyb20gdGhlIHJlcXVlc3RlZCBzZXJ2aWNlCiAgICBteSAkU2VydmljZVBhcmVudElEID0gJFNlcnZpY2VMb29rdXB7ICRQYXJhbXtTZXJ2aWNlSUR9IH0tPntQYXJlbnRJRH07CgogICAgIyBnZXQgYWxsIHBhcnRlbnRzIGZvciB0aGUgcmVxdWVzdGVkIHNlcnZpY2UKICAgIHdoaWxlICgkU2VydmljZVBhcmVudElEKSB7CgogICAgICAgICMgYWRkIHNlcnZpY2UgcGFyZW50IElEIHRvIHRoZSByZXR1cm4gc3RydWN0dXJlCiAgICAgICAgcHVzaCBAU2VydmljZVBhcmVudHMsICRTZXJ2aWNlUGFyZW50SUQ7CgogICAgICAgICMgc2V0IG5leHQgU2VydmljZVBhcmVudElEICh0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50IHBhcmVudCkKICAgICAgICAkU2VydmljZVBhcmVudElEID0gJFNlcnZpY2VMb29rdXB7JFNlcnZpY2VQYXJlbnRJRH0tPntQYXJlbnRJRH0gfHwgMDsKCiAgICB9CgogICAgIyByZXZlcnNlIHRoZSByZXR1cm4gYXJyYXkgdG8gZ2V0IHRoZSBsaXN0IG9yZGVyZWQgZnJvbSBvbGQgdG8geW91bmcgKGluIHBhcmVudCBjb250ZXh0KQogICAgbXkgQERhdGEgPSByZXZlcnNlIEBTZXJ2aWNlUGFyZW50czsKCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFxARGF0YSwKICAgICk7CgogICAgcmV0dXJuIFxARGF0YTsKfQoKPWl0ZW0gR2V0QWxsQ3VzdG9tU2VydmljZXMoKQoKZ2V0IGFsbCBjdXN0b20gc2VydmljZXMgb2Ygb25lIHVzZXIKCiAgICBteSBAU2VydmljZXMgPSAkU2VydmljZU9iamVjdC0+R2V0QWxsQ3VzdG9tU2VydmljZXMoIFVzZXJJRCA9PiAxMjMgKTsKCj1jdXQKCnN1YiBHZXRBbGxDdXN0b21TZXJ2aWNlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnR2V0QWxsQ3VzdG9tU2VydmljZXM6OicgLiAkUGFyYW17VXNlcklEfTsKICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwoKICAgIHJldHVybiBAeyRDYWNoZX0gaWYgJENhY2hlOwoKICAgICMgc2VhcmNoIGFsbCBjdXN0b20gc2VydmljZXMKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgU0VMRUNUIHNlcnZpY2VfaWQKICAgICAgICAgICAgRlJPTSBwZXJzb25hbF9zZXJ2aWNlcwogICAgICAgICAgICBXSEVSRSB1c2VyX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VXNlcklEfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBTZXJ2aWNlSURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBTZXJ2aWNlSURzLCAkUm93WzBdOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBTZXJ2aWNlSURzLAogICAgKTsKCiAgICByZXR1cm4gQFNlcnZpY2VJRHM7Cn0KIyAtLS0KIyBJVFNNQ29yZQojIC0tLQoKPWl0ZW0gX1NlcnZpY2VHZXRDdXJyZW50SW5jaWRlbnRTdGF0ZSgpCgpSZXR1cm5zIGEgaGFzaCB3aXRoIHRoZSBvcmlnaW5hbCBzZXJ2aWNlIGRhdGEsCmVuaGFuY2VkIHdpdGggYWRkaXRpb25hbCBzZXJ2aWNlIGRhdGEgYWJvdXQgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUsCmJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gaXRlbXMgYW5kIG90aGVyIHNlcnZpY2VzLgoKICAgICVTZXJ2aWNlRGF0YSA9ICRTZXJ2aWNlT2JqZWN0LT5fU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlKAogICAgICAgIFNlcnZpY2VEYXRhID0+IFwlU2VydmljZURhdGEsCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gXCVQcmVmZXJlbmNlcywKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBfU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNlcnZpY2VEYXRhIFByZWZlcmVuY2VzIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNlcnZpY2VEYXRhIFByZWZlcmVuY2VzKSkgewogICAgICAgIGlmICggcmVmICRQYXJhbXskQXJndW1lbnR9IG5lICdIQVNIJyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRBcmd1bWVudCBtdXN0IGJlIGEgaGFzaCByZWZlcmVuY2UhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG1ha2UgbG9jYWwgY29waWVzCiAgICBteSAlU2VydmljZURhdGEgPSAleyAkUGFyYW17U2VydmljZURhdGF9IH07CiAgICBteSAlUHJlZmVyZW5jZXMgPSAleyAkUGFyYW17UHJlZmVyZW5jZXN9IH07CgogICAgIyBnZXQgc2VydmljZSB0eXBlIGxpc3QKICAgIG15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgKTsKICAgICRTZXJ2aWNlRGF0YXtUeXBlfSA9ICRTZXJ2aWNlVHlwZUxpc3QtPnsgJFNlcnZpY2VEYXRhe1R5cGVJRH0gfSB8fCAnJzsKCiAgICAjIHNldCBkZWZhdWx0IGluY2lkZW50IHN0YXRlIHR5cGUKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICdvcGVyYXRpb25hbCc7CgogICAgIyBnZXQgSVRTTSBtb2R1bGUgZGlyZWN0b3J5CiAgICBteSAkQ29uZmlnSXRlbU1vZHVsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSG9tZScpIC4gJy9LZXJuZWwvU3lzdGVtL0lUU01Db25maWdJdGVtLnBtJzsKCiAgICAjIGNoZWNrIGlmIElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudCBwYWNrYWdlIGlzIGluc3RhbGxlZAogICAgaWYgKCAtZSAkQ29uZmlnSXRlbU1vZHVsZSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBhIHByZWZlcmVuY2Ugc2V0dGluZyBmb3IgQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMgZXhpc3RzCiAgICAgICAgaWYgKCAkUHJlZmVyZW5jZXN7Q3VySW5jaVN0YXRlVHlwZUZyb21DSXN9ICkgewoKICAgICAgICAgICAgIyBzZXQgZGVmYXVsdCBpbmNpZGVudCBzdGF0ZSB0eXBlIGZyb20gc2VydmljZSBwcmVmZXJlbmNlcyAnQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMnCiAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICRQcmVmZXJlbmNlc3tDdXJJbmNpU3RhdGVUeXBlRnJvbUNJc307CiAgICAgICAgfQoKICAgICAgICAjIHNldCB0aGUgcHJlZmVyZW5jZXMgc2V0dGluZyBmb3IgQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgZ2V0IGluY2lkZW50IGxpbmsgdHlwZXMgYW5kIGRpcmVjdGlvbnMgZnJvbSBjb25maWcKICAgICAgICAgICAgbXkgJEluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0lUU006OkNvcmU6OkluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24nKTsKCiAgICAgICAgICAgICMgdG8gc3RvcmUgYWxsIGxpbmtlZCBjb25maWcgaXRlbSBpZHMgb2YgdGhpcyBzZXJ2aWNlIChmb3IgYWxsIGNvbmZpZ3VyZWQgbGluayB0eXBlcykKICAgICAgICAgICAgbXkgJUFsbExpbmtlZENvbmZpZ0l0ZW1JRHM7CgogICAgICAgICAgICBMSU5LVFlQRToKICAgICAgICAgICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkSW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbiB9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBkaXJlY3Rpb24KICAgICAgICAgICAgICAgIG15ICRMaW5rRGlyZWN0aW9uID0gJEluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24tPnskTGlua1R5cGV9OwoKICAgICAgICAgICAgICAgICMgcmV2ZXJzZSB0aGUgbGluayBkaXJlY3Rpb24sIGFzIHRoaXMgaXMgdGhlIHBlcnNwZWN0aXZlIGZyb20gdGhlIHNlcnZpY2UKICAgICAgICAgICAgICAgICMgbm8gbmVlZCB0byByZXZlcnNlIGlmIGRpcmVjdGlvbiBpcyAnQm90aCcKICAgICAgICAgICAgICAgIGlmICggJExpbmtEaXJlY3Rpb24gZXEgJ1NvdXJjZScgKSB7CiAgICAgICAgICAgICAgICAgICAgJExpbmtEaXJlY3Rpb24gPSAnVGFyZ2V0JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJExpbmtEaXJlY3Rpb24gZXEgJ1RhcmdldCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJExpbmtEaXJlY3Rpb24gPSAnU291cmNlJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGZpbmQgYWxsIGxpbmtlZCBjb25maWcgaXRlbXMgd2l0aCB0aGlzIGxpbmt0eXBlIGFuZCBkaXJlY3Rpb24KICAgICAgICAgICAgICAgIG15ICVMaW5rZWRDb25maWdJdGVtSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0tleUxpc3RXaXRoRGF0YSgKICAgICAgICAgICAgICAgICAgICBPYmplY3QxICAgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICAgICAgICAgIEtleTEgICAgICA9PiAkU2VydmljZURhdGF7U2VydmljZUlEfSwKICAgICAgICAgICAgICAgICAgICBPYmplY3QyICAgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJExpbmtUeXBlLAogICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbiA9PiAkTGlua0RpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyByZW1lbWJlciB0aGUgbGlua2VkIGNvbmZpZyBpdGVtcwogICAgICAgICAgICAgICAgJUFsbExpbmtlZENvbmZpZ0l0ZW1JRHMgPSAoICVBbGxMaW5rZWRDb25maWdJdGVtSURzLCAlTGlua2VkQ29uZmlnSXRlbUlEcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaW52ZXN0aWdhdGUgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgb2YgZWFjaCBjb25maWcgaXRlbQogICAgICAgICAgICBDT05GSUdJVEVNSUQ6CiAgICAgICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggc29ydCBrZXlzICVBbGxMaW5rZWRDb25maWdJdGVtSURzICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCBjb25maWcgaXRlbSBkYXRhCiAgICAgICAgICAgICAgICBteSAkQ29uZmlnSXRlbURhdGEgPSAkQWxsTGlua2VkQ29uZmlnSXRlbUlEc3skQ29uZmlnSXRlbUlEfTsKCiAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkQ29uZmlnSXRlbURhdGEtPntDdXJEZXBsU3RhdGVUeXBlfSBuZSAncHJvZHVjdGl2ZSc7CiAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkQ29uZmlnSXRlbURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSBlcSAnb3BlcmF0aW9uYWwnOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgc2VydmljZSBtdXN0IGJlIHNldCB0byAnd2FybmluZycKICAgICAgICAgICAgICAgIGlmICggJENvbmZpZ0l0ZW1EYXRhLT57Q3VySW5jaVN0YXRlVHlwZX0gZXEgJ3dhcm5pbmcnICkgewogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICd3YXJuaW5nJzsKICAgICAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2UgbXVzdCBiZSBzZXQgdG8gJ2luY2lkZW50JwogICAgICAgICAgICAgICAgaWYgKCAkQ29uZmlnSXRlbURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSBlcSAnaW5jaWRlbnQnICkgewogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICdpbmNpZGVudCc7CiAgICAgICAgICAgICAgICAgICAgbGFzdCBDT05GSUdJVEVNSUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdXBkYXRlIHRoZSBjdXJyZW50IGluY2lkZW50IHN0YXRlIHR5cGUgZnJvbSBDSXMgb2YgdGhlIHNlcnZpY2UKICAgICAgICAgICAgJFNlbGYtPlNlcnZpY2VQcmVmZXJlbmNlc1NldCgKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZURhdGF7U2VydmljZUlEfSwKICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAnQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMnLAogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgdGhlIHByZWZlcmVuY2VzIGxvY2FsbHkKICAgICAgICAgICAgJFByZWZlcmVuY2Vze0N1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzfSA9ICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfTsKICAgICAgICB9CiAgICB9CgogICAgIyBpbnZlc3RpZ2F0ZSB0aGUgc3RhdGUgb2YgYWxsIGNoaWxkIHNlcnZpY2VzCiAgICBpZiAoICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSBlcSAnb3BlcmF0aW9uYWwnICkgewoKICAgICAgICAjIGNyZWF0ZSB0aGUgdmFsaWQgc3RyaW5nCiAgICAgICAgbXkgJFZhbGlkSURTdHJpbmcgPSBqb2luIHF7LCB9LCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKTsKCiAgICAgICAgIyBwcmVwYXJlIG5hbWUKICAgICAgICBteSAkTmFtZSA9ICRTZXJ2aWNlRGF0YXtOYW1lfTsKICAgICAgICAkTmFtZSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJE5hbWUsICdMaWtlJyApOwoKICAgICAgICAjIGdldCBsaXN0IG9mIGFsbCB2YWxpZCBjaGlsZHMKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQsIG5hbWUgRlJPTSBzZXJ2aWNlICIKICAgICAgICAgICAgICAgIC4gIldIRVJFIG5hbWUgTElLRSAnIiAuICROYW1lIC4gIjo6JScgIgogICAgICAgICAgICAgICAgLiAiQU5EIHZhbGlkX2lkIElOICgiIC4gJFZhbGlkSURTdHJpbmcgLiAiKSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBmaW5kIGxlbmd0aCBvZiBjaGlsZHMgcHJlZml4CiAgICAgICAgbXkgJFByZWZpeExlbmd0aCA9IGxlbmd0aCAiJFNlcnZpY2VEYXRhe05hbWV9OjoiOwoKICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICBteSBAQ2hpbGRJRHM7CiAgICAgICAgUk9XOgogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgY2hpbGQgcGFydAogICAgICAgICAgICBteSAkQ2hpbGRQYXJ0ID0gc3Vic3RyICRSb3dbMV0sICRQcmVmaXhMZW5ndGg7CgogICAgICAgICAgICBuZXh0IFJPVyBpZiAkQ2hpbGRQYXJ0ID1+IG17IDo6IH14bXM7CgogICAgICAgICAgICBwdXNoIEBDaGlsZElEcywgJFJvd1swXTsKICAgICAgICB9CgogICAgICAgIFNFUlZJQ0VJRDoKICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIEBDaGlsZElEcyApIHsKCiAgICAgICAgICAgICMgZ2V0IGRhdGEgb2YgY2hpbGQgc2VydmljZQogICAgICAgICAgICBteSAlQ2hpbGRTZXJ2aWNlRGF0YSA9ICRTZWxmLT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgU0VSVklDRUlEIGlmICRDaGlsZFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9IGVxICdvcGVyYXRpb25hbCc7CgogICAgICAgICAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gPSAnd2FybmluZyc7CiAgICAgICAgICAgIGxhc3QgU0VSVklDRUlEOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlZmluZSBkZWZhdWx0IGluY2lkZW50IHN0YXRlcwogICAgbXkgJURlZmF1bHRJbmNpU3RhdGVzID0gKAogICAgICAgIG9wZXJhdGlvbmFsID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgd2FybmluZyAgICAgPT4gJ1dhcm5pbmcnLAogICAgICAgIGluY2lkZW50ICAgID0+ICdJbmNpZGVudCcsCiAgICApOwoKICAgICMgZ2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBsaXN0IG9mIHRoaXMgdHlwZQogICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgUHJlZmVyZW5jZXMgICA9PiB7CiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9LAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICVSZXZlcnNlSW5jaVN0YXRlTGlzdCA9IHJldmVyc2UgJXsgJEluY2lTdGF0ZUxpc3QgfTsKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVJRH0KICAgICAgICA9ICRSZXZlcnNlSW5jaVN0YXRlTGlzdHsgJERlZmF1bHRJbmNpU3RhdGVzeyAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gfSB9OwoKICAgICMgZmFsbGJhY2sgaWYgdGhlIGRlZmF1bHQgaW5jaWRlbnQgc3RhdGUgaXMgZGVhY3RpdmF0ZWQKICAgIGlmICggISRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVJRH0gKSB7CiAgICAgICAgbXkgQFNvcnRlZEluY2lMaXN0ID0gc29ydCBrZXlzICV7ICRJbmNpU3RhdGVMaXN0IH07CiAgICAgICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZUlEfSA9ICRTb3J0ZWRJbmNpTGlzdFswXTsKICAgIH0KCiAgICAjIGdldCBpbmNpZGVudCBzdGF0ZSBmdW5jdGlvbmFsaXR5CiAgICBteSAkSW5jaVN0YXRlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgSXRlbUlEID0+ICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVJRH0sCiAgICApOwoKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGV9ICAgICA9ICRJbmNpU3RhdGUtPntOYW1lfTsKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICRJbmNpU3RhdGUtPntGdW5jdGlvbmFsaXR5fTsKCiAgICAlU2VydmljZURhdGEgPSAoJVNlcnZpY2VEYXRhLCAlUHJlZmVyZW5jZXMpOwoKICAgIHJldHVybiAlU2VydmljZURhdGE7Cn0KCiMgLS0tCgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gS2VybmVsL1N5c3RlbS9TTEEucG0KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlNMQTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAojIC0tLQogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OlNMQSAtIHNsYSBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIHNsYSBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QuIERvIG5vdCB1c2UgaXQgZGlyZWN0bHksIGluc3RlYWQgdXNlOgoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJFNMQU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgY29uZmlndXJlZCBwcmVmZXJlbmNlcyBvYmplY3QKICAgIG15ICRHZW5lcmF0b3JNb2R1bGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NMQTo6UHJlZmVyZW5jZXNNb2R1bGUnKQogICAgICAgIHx8ICdLZXJuZWw6OlN5c3RlbTo6U0xBOjpQcmVmZXJlbmNlc0RCJzsKCiAgICAjIGdldCBwcmVmZXJlbmNlcyBvYmplY3QKICAgICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9ID0gJEtlcm5lbDo6T00tPkdldCgkR2VuZXJhdG9yTW9kdWxlKTsKCiAgICAkU2VsZi0+e0NhY2hlVHlwZX0gPSAnU0xBJzsKICAgICRTZWxmLT57Q2FjaGVUVEx9ICA9IDYwICogNjAgKiAyNCAqIDIwOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gU0xBTGlzdCgpCgpyZXR1cm4gYSBoYXNoIGxpc3Qgb2Ygc2xhcwoKICAgIG15ICVTTEFMaXN0ID0gJFNMQU9iamVjdC0+U0xBTGlzdCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMSwgICMgKG9wdGlvbmFsKQogICAgICAgIFZhbGlkICAgICA9PiAwLCAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMSAoMHwxKQogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBTTEFMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IHZhbGlkIHBhcmFtCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtWYWxpZH0gKSB7CiAgICAgICAgJFBhcmFte1ZhbGlkfSA9IDE7CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGFkZCBTZXJ2aWNlSUQKICAgIG15ICVTUUxUYWJsZTsKICAgICRTUUxUYWJsZXtzbGF9ID0gJ3NsYSBzJzsKICAgIG15IEBTUUxXaGVyZTsKICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gKSB7CgogICAgICAgICMgcXVvdGUKICAgICAgICAkUGFyYW17U2VydmljZUlEfSA9ICREQk9iamVjdC0+UXVvdGUoICRQYXJhbXtTZXJ2aWNlSUR9LCAnSW50ZWdlcicgKTsKCiAgICAgICAgJFNRTFRhYmxle3NlcnZpY2V9ID0gJ3NlcnZpY2Vfc2xhIHInOwogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAicy5pZCA9IHIuc2xhX2lkIEFORCByLnNlcnZpY2VfaWQgPSAkUGFyYW17U2VydmljZUlEfSI7CiAgICB9CgogICAgIyBhZGQgdmFsaWQgcGFydAogICAgaWYgKCAkUGFyYW17VmFsaWR9ICkgewoKICAgICAgICAjIGdldCB2YWxpZCBvYmplY3QKICAgICAgICBteSAkVmFsaWRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKCiAgICAgICAgIyBjcmVhdGUgdGhlIHZhbGlkIGxpc3QKICAgICAgICBteSAkVmFsaWRJRHMgPSBqb2luICcsICcsICRWYWxpZE9iamVjdC0+VmFsaWRJRHNHZXQoKTsKCiAgICAgICAgcHVzaCBAU1FMV2hlcmUsICJzLnZhbGlkX2lkIElOICggJFZhbGlkSURzICkiOwogICAgfQoKICAgICMgY3JlYXRlIHRoZSB0YWJsZSBhbmQgd2hlcmUgc3RyaW5ncwogICAgbXkgJFRhYmxlU3RyaW5nID0gam9pbiBxeywgfSwgdmFsdWVzICVTUUxUYWJsZTsKICAgIG15ICRXaGVyZVN0cmluZyA9IEBTUUxXaGVyZSA/ICcgV0hFUkUgJyAuIGpvaW4gcXsgQU5EIH0sIEBTUUxXaGVyZSA6ICcnOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1Qgcy5pZCwgcy5uYW1lIEZST00gJFRhYmxlU3RyaW5nICRXaGVyZVN0cmluZyIsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJVNMQUxpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU0xBTGlzdHsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICByZXR1cm4gJVNMQUxpc3Q7Cn0KCj1pdGVtIFNMQUdldCgpCgpSZXR1cm5zIGFuIFNMQSBhcyBhIGhhc2gKCiAgICBteSAlU0xBRGF0YSA9ICRTTEFPYmplY3QtPlNMQUdldCgKICAgICAgICBTTEFJRCAgPT4gMTIzLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgbXkgJVNMQURhdGEgPSAoCiAgICAgICAgICAnU0xBSUQnICAgICAgICAgICAgICAgPT4gJzInLAogICAgICAgICAgJ05hbWUnICAgICAgICAgICAgICAgID0+ICdEaWFtb25kIFBhY2lmaWMgLSBTMicsCiAgICAgICAgICAnQ2FsZW5kYXInICAgICAgICAgICAgPT4gJzInLAogICAgICAgICAgJ0ZpcnN0UmVzcG9uc2VUaW1lJyAgID0+ICc2MCcsICAjIGluIG1pbnV0ZXMgYWNjb3JkaW5nIHRvIGJ1c2luZXNzIGhvdXJzCiAgICAgICAgICAnRmlyc3RSZXNwb25zZU5vdGlmeScgPT4gJzcwJywgICMgaW4gcGVyY2VudAogICAgICAgICAgJ1VwZGF0ZVRpbWUnICAgICAgICAgID0+ICczNjAnLCAjIGluIG1pbnV0ZXMgYWNjb3JkaW5nIHRvIGJ1c2luZXNzIGhvdXJzCiAgICAgICAgICAnVXBkYXRlTm90aWZ5JyAgICAgICAgPT4gJzcwJywgICMgaW4gcGVyY2VudAogICAgICAgICAgJ1NvbHV0aW9uVGltZScgICAgICAgID0+ICc5NjAnLCAjIGluIG1pbnV0ZXMgYWNjb3JkaW5nIHRvIGJ1c2luZXNzIGhvdXJzCiAgICAgICAgICAnU29sdXRpb25Ob3RpZnknICAgICAgPT4gJzgwJywgICMgaW4gcGVyY2VudAogICAgICAgICAgJ1NlcnZpY2VJRHMnICAgICAgICAgID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc0JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgJ1ZhbGlkSUQnICAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICdDb21tZW50JyAgICAgICAgICAgICA9PiAnU29tZSBDb21tZW50JywKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgJ1R5cGVJRCcgICAgICAgICAgICAgICAgICA9PiAnNScsCiAgICAgICAgICAnVHlwZScgICAgICAgICAgICAgICAgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAnTWluVGltZUJldHdlZW5JbmNpZGVudHMnID0+ICc0MDAwJywgICMgaW4gbWludXRlcwojIC0tLQogICAgICAgICAgJ0NyZWF0ZUJ5JyAgICAgICAgICAgID0+ICc5MycsCiAgICAgICAgICAnQ3JlYXRlVGltZScgICAgICAgICAgPT4gJzIwMTEtMDYtMTYgMjI6NTQ6NTQnLAogICAgICAgICAgJ0NoYW5nZUJ5JyAgICAgICAgICAgID0+ICc5MycsCiAgICAgICAgICAnQ2hhbmdlVGltZScgICAgICAgICAgPT4gJzIwMTEtMDYtMTYgMjI6NTQ6NTQnLAogICAgKTsKCj1jdXQKCnN1YiBTTEFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU0xBSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgbXkgJENhY2hlS2V5ID0gJ0NhY2hlOjpTTEFHZXQ6OicgLiAkUGFyYW17U0xBSUR9OwogICAgbXkgJENhY2hlZCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlICAgICAgICAgICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICAgICAgICAgICAgPT4gJENhY2hlS2V5LAogICAgICAgIENhY2hlSW5NZW1vcnkgID0+IDEsCiAgICAgICAgQ2FjaGVJbkJhY2tlbmQgPT4gMCwKICAgICk7CgogICAgaWYgKCByZWYgJENhY2hlZCBlcSAnSEFTSCcgKSB7CiAgICAgICAgcmV0dXJuICV7JENhY2hlZH07CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGdldCBzbGEgZnJvbSBkYgogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBuYW1lLCBjYWxlbmRhcl9uYW1lLCBmaXJzdF9yZXNwb25zZV90aW1lLCBmaXJzdF9yZXNwb25zZV9ub3RpZnksICcKICAgICAgICAgICAgLiAndXBkYXRlX3RpbWUsIHVwZGF0ZV9ub3RpZnksIHNvbHV0aW9uX3RpbWUsIHNvbHV0aW9uX25vdGlmeSwgJwogICAgICAgICAgICAuICd2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkgJwojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIC4gJywgdHlwZV9pZCwgbWluX3RpbWVfYmV0X2luY2lkZW50cyAnCiMgLS0tCiAgICAgICAgICAgIC4gJ0ZST00gc2xhIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17U0xBSUR9LAogICAgICAgIF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlU0xBRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRTTEFEYXRhe1NMQUlEfSAgICAgICAgICAgICAgID0gJFJvd1swXTsKICAgICAgICAkU0xBRGF0YXtOYW1lfSAgICAgICAgICAgICAgICA9ICRSb3dbMV07CiAgICAgICAgJFNMQURhdGF7Q2FsZW5kYXJ9ICAgICAgICAgICAgPSAkUm93WzJdIHx8ICcnOwogICAgICAgICRTTEFEYXRhe0ZpcnN0UmVzcG9uc2VUaW1lfSAgID0gJFJvd1szXTsKICAgICAgICAkU0xBRGF0YXtGaXJzdFJlc3BvbnNlTm90aWZ5fSA9ICRSb3dbNF07CiAgICAgICAgJFNMQURhdGF7VXBkYXRlVGltZX0gICAgICAgICAgPSAkUm93WzVdOwogICAgICAgICRTTEFEYXRhe1VwZGF0ZU5vdGlmeX0gICAgICAgID0gJFJvd1s2XTsKICAgICAgICAkU0xBRGF0YXtTb2x1dGlvblRpbWV9ICAgICAgICA9ICRSb3dbN107CiAgICAgICAgJFNMQURhdGF7U29sdXRpb25Ob3RpZnl9ICAgICAgPSAkUm93WzhdOwogICAgICAgICRTTEFEYXRhe1ZhbGlkSUR9ICAgICAgICAgICAgID0gJFJvd1s5XTsKICAgICAgICAkU0xBRGF0YXtDb21tZW50fSAgICAgICAgICAgICA9ICRSb3dbMTBdIHx8ICcnOwogICAgICAgICRTTEFEYXRhe0NyZWF0ZVRpbWV9ICAgICAgICAgID0gJFJvd1sxMV07CiAgICAgICAgJFNMQURhdGF7Q3JlYXRlQnl9ICAgICAgICAgICAgPSAkUm93WzEyXTsKICAgICAgICAkU0xBRGF0YXtDaGFuZ2VUaW1lfSAgICAgICAgICA9ICRSb3dbMTNdOwogICAgICAgICRTTEFEYXRhe0NoYW5nZUJ5fSAgICAgICAgICAgID0gJFJvd1sxNF07CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAkU0xBRGF0YXtUeXBlSUR9ICAgICAgICAgICAgICAgICAgPSAkUm93WzE1XTsKICAgICAgICAkU0xBRGF0YXtNaW5UaW1lQmV0d2VlbkluY2lkZW50c30gPSAkUm93WzE2XSB8fCAwOwojIC0tLQogICAgfQoKICAgICMgY2hlY2sgc2xhCiAgICBpZiAoICEkU0xBRGF0YXtTTEFJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBzdWNoIFNMQUlEICgkUGFyYW17U0xBSUR9KSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAjIGdldCBzbGEgdHlwZSBsaXN0CiAgICBteSAkU0xBVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNMQTo6VHlwZScsCiAgICApOwogICAgJFNMQURhdGF7VHlwZX0gPSAkU0xBVHlwZUxpc3QtPnsgJFNMQURhdGF7VHlwZUlEfSB9IHx8ICcnOwojIC0tLQoKICAgICMgZ2V0IGFsbCBzZXJ2aWNlIGlkcwogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBzZXJ2aWNlX2lkIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gPyBPUkRFUiBCWSBzZXJ2aWNlX2lkIEFTQycsCiAgICAgICAgQmluZCA9PiBbIFwkU0xBRGF0YXtTTEFJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAU2VydmljZUlEczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQFNlcnZpY2VJRHMsICRSb3dbMF07CiAgICB9CgogICAgIyBhZGQgdGhlIGlkcwogICAgJFNMQURhdGF7U2VydmljZUlEc30gPSBcQFNlcnZpY2VJRHM7CgogICAgIyBnZXQgc2xhIHByZWZlcmVuY2VzCiAgICBteSAlUHJlZmVyZW5jZXMgPSAkU2VsZi0+U0xBUHJlZmVyZW5jZXNHZXQoIFNMQUlEID0+ICRQYXJhbXtTTEFJRH0gKTsKCiAgICAjIG1lcmdlIGhhc2gKICAgIGlmICglUHJlZmVyZW5jZXMpIHsKICAgICAgICAlU0xBRGF0YSA9ICggJVNMQURhdGEsICVQcmVmZXJlbmNlcyApOwogICAgfQoKICAgICMgY2FjaGUgcmVzdWx0CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCgogICAgICAgICMgbWFrZSBhIGxvY2FsIGNvcHkgb2YgdGhlIHNsYSBkYXRhIHRvIGF2b2lkIGl0IGJlaW5nIGFsdGVyZWQgaW4tbWVtb3J5IGxhdGVyCiAgICAgICAgVmFsdWUgICAgICAgICAgPT4geyVTTEFEYXRhfSwKICAgICAgICBDYWNoZUluTWVtb3J5ICA9PiAxLAogICAgICAgIENhY2hlSW5CYWNrZW5kID0+IDAsCiAgICApOwoKICAgIHJldHVybiAlU0xBRGF0YTsKfQoKPWl0ZW0gU0xBTG9va3VwKCkKCnJldHVybnMgdGhlIG5hbWUgb3IgdGhlIHNsYSBpZAoKICAgIG15ICRTTEFOYW1lID0gJFNMQU9iamVjdC0+U0xBTG9va3VwKAogICAgICAgIFNMQUlEID0+IDEyMywKICAgICk7CgogICAgb3IKCiAgICBteSAkU0xBSUQgPSAkU0xBT2JqZWN0LT5TTEFMb29rdXAoCiAgICAgICAgTmFtZSA9PiAnU0xBIE5hbWUnLAogICAgKTsKCj1jdXQKCnN1YiBTTEFMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1NMQUlEfSAmJiAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTTEFJRCBvciBOYW1lIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICBpZiAoICRQYXJhbXtTTEFJRH0gKSB7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNMQUxvb2t1cDo6SUQ6OicgLiAkUGFyYW17U0xBSUR9OwogICAgICAgIG15ICRDYWNoZWQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICAgICAgICAgICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBDYWNoZUluTWVtb3J5ICA9PiAxLAogICAgICAgICAgICBDYWNoZUluQmFja2VuZCA9PiAwLAogICAgICAgICk7CiAgICAgICAgaWYgKCBkZWZpbmVkICRDYWNoZWQgKSB7CiAgICAgICAgICAgIHJldHVybiAkQ2FjaGVkOwogICAgICAgIH0KCiAgICAgICAgIyBsb29rdXAKICAgICAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgbmFtZSBGUk9NIHNsYSBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U0xBSUR9LCBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15ICROYW1lID0gJyc7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICROYW1lID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgICMgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICAgICAgICAgICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgICAgICAgICAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICAgICAgICAgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgID0+ICROYW1lLAogICAgICAgICAgICBDYWNoZUluTWVtb3J5ICA9PiAxLAogICAgICAgICAgICBDYWNoZUluQmFja2VuZCA9PiAwLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkTmFtZTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ0NhY2hlOjpTTEFMb29rdXA6Ok5hbWU6OicgLiAkUGFyYW17TmFtZX07CiAgICAgICAgbXkgJENhY2hlZCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgICAgICAgICAgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIENhY2hlSW5NZW1vcnkgID0+IDEsCiAgICAgICAgICAgIENhY2hlSW5CYWNrZW5kID0+IDAsCiAgICAgICAgKTsKICAgICAgICBpZiAoIGRlZmluZWQgJENhY2hlZCApIHsKICAgICAgICAgICAgcmV0dXJuICRDYWNoZWQ7CiAgICAgICAgfQoKICAgICAgICAjIGxvb2t1cAogICAgICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIHNsYSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15ICRTTEFJRCA9ICcnOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkU0xBSUQgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgIyBjYWNoZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgICAgICAgICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgICAgICAgICAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICBDYWNoZUluTWVtb3J5ICA9PiAxLAogICAgICAgICAgICBDYWNoZUluQmFja2VuZCA9PiAwLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU0xBSUQ7CiAgICB9Cn0KCj1pdGVtIFNMQUFkZCgpCgphZGQgYSBzbGEKCiAgICBteSAkU0xBSUQgPSAkU0xBT2JqZWN0LT5TTEFBZGQoCiAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbIDEsIDUsIDcgXSwgICMgKG9wdGlvbmFsKQogICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ1NMQSBOYW1lJywKICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICdDYWxlbmRhcjEnLCAgIyAob3B0aW9uYWwpCiAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAxMjAsICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gNjAsICAgICAgICAgICAjIChvcHRpb25hbCkgbm90aWZ5IGFnZW50IGlmIGZpcnN0IHJlc3BvbnNlIGVzY2FsYXRpb24gaXMgNjAlIHJlYWNoZWQKICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDE4MCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA4MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgdXBkYXRlIGVzY2FsYXRpb24gaXMgODAlIHJlYWNoZWQKICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDU4MCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA4MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgc29sdXRpb24gZXNjYWxhdGlvbiBpcyA4MCUgcmVhY2hlZAogICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBNaW5UaW1lQmV0d2VlbkluY2lkZW50cyA9PiAzNDQzLCAgICAgIyAob3B0aW9uYWwpCiMgLS0tCiAgICApOwoKPWN1dAoKc3ViIFNMQUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIFZhbGlkSUQgVXNlcklEKSkgewogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBWYWxpZElEIFVzZXJJRCBUeXBlSUQpKSB7CiMgLS0tCiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgc2VydmljZSBpZHMKICAgIGlmICggZGVmaW5lZCAkUGFyYW17U2VydmljZUlEc30gJiYgcmVmICRQYXJhbXtTZXJ2aWNlSURzfSBuZSAnQVJSQVknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnU2VydmljZUlEcyBuZWVkcyB0byBiZSBhbiBhcnJheSByZWZlcmVuY2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlcwogICAgJFBhcmFte1NlcnZpY2VJRHN9ICAgICAgICAgIHx8PSBbXTsKICAgICRQYXJhbXtDYWxlbmRhcn0gICAgICAgICAgICB8fD0gJyc7CiAgICAkUGFyYW17Q29tbWVudH0gICAgICAgICAgICAgfHw9ICcnOwogICAgJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSAgIHx8PSAwOwogICAgJFBhcmFte0ZpcnN0UmVzcG9uc2VOb3RpZnl9IHx8PSAwOwogICAgJFBhcmFte1VwZGF0ZVRpbWV9ICAgICAgICAgIHx8PSAwOwogICAgJFBhcmFte1VwZGF0ZU5vdGlmeX0gICAgICAgIHx8PSAwOwogICAgJFBhcmFte1NvbHV0aW9uVGltZX0gICAgICAgIHx8PSAwOwogICAgJFBhcmFte1NvbHV0aW9uTm90aWZ5fSAgICAgIHx8PSAwOwojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAkUGFyYW17TWluVGltZUJldHdlZW5JbmNpZGVudHN9IHx8PSAwOwojIC0tLQoKICAgICMgZ2V0IGNoZWNrIGl0ZW0gb2JqZWN0CiAgICBteSAkQ2hlY2tJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpOwoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkQ2hlY2tJdGVtT2JqZWN0LT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGZpbmQgZXhpdGluZyBzbGEncyB3aXRoIHRoZSBzYW1lIG5hbWUKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2xhIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICROb0FkZDsKICAgIHdoaWxlICggJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE5vQWRkID0gMTsKICAgIH0KCiAgICAjIGFib3J0IGluc2VydCBvZiBuZXcgc2xhLCBpZiBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICBpZiAoJE5vQWRkKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBhZGQgbmV3IFNMQSEgJyRQYXJhbXtOYW1lfScgYWxyZWFkeSBleGlzdHMuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGFkZCBzbGEgdG8gZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQojICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHNsYSAnCiMgICAgICAgICAgICAuICcobmFtZSwgY2FsZW5kYXJfbmFtZSwgZmlyc3RfcmVzcG9uc2VfdGltZSwgZmlyc3RfcmVzcG9uc2Vfbm90aWZ5LCAnCiMgICAgICAgICAgICAuICd1cGRhdGVfdGltZSwgdXBkYXRlX25vdGlmeSwgc29sdXRpb25fdGltZSwgc29sdXRpb25fbm90aWZ5LCAnCiMgICAgICAgICAgICAuICd2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpIFZBTFVFUyAnCiMgICAgICAgICAgICAuICcoPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiMgICAgICAgIEJpbmQgPT4gWwojICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwgICAgICAgICAgICAgICAgXCRQYXJhbXtDYWxlbmRhcn0sICAgICAgIFwkUGFyYW17Rmlyc3RSZXNwb25zZVRpbWV9LAojICAgICAgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwgXCRQYXJhbXtVcGRhdGVUaW1lfSwgICAgIFwkUGFyYW17VXBkYXRlTm90aWZ5fSwKIyAgICAgICAgICAgIFwkUGFyYW17U29sdXRpb25UaW1lfSwgICAgICAgIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAojICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiMgICAgICAgIF0sCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBzbGEgJwogICAgICAgICAgICAuICcobmFtZSwgY2FsZW5kYXJfbmFtZSwgZmlyc3RfcmVzcG9uc2VfdGltZSwgZmlyc3RfcmVzcG9uc2Vfbm90aWZ5LCAnCiAgICAgICAgICAgIC4gJ3VwZGF0ZV90aW1lLCB1cGRhdGVfbm90aWZ5LCBzb2x1dGlvbl90aW1lLCBzb2x1dGlvbl9ub3RpZnksICcKICAgICAgICAgICAgLiAndmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5LCAnCiAgICAgICAgICAgIC4gJ3R5cGVfaWQsIG1pbl90aW1lX2JldF9pbmNpZGVudHMpIFZBTFVFUyAnCiAgICAgICAgICAgIC4gJyg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8sID8sID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwgICAgICAgICAgICAgICAgXCRQYXJhbXtDYWxlbmRhcn0sICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlVGltZX0sCiAgICAgICAgICAgIFwkUGFyYW17Rmlyc3RSZXNwb25zZU5vdGlmeX0sIFwkUGFyYW17VXBkYXRlVGltZX0sIFwkUGFyYW17VXBkYXRlTm90aWZ5fSwKICAgICAgICAgICAgXCRQYXJhbXtTb2x1dGlvblRpbWV9LCBcJFBhcmFte1NvbHV0aW9uTm90aWZ5fSwgXCRQYXJhbXtWYWxpZElEfSwgXCRQYXJhbXtDb21tZW50fSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VHlwZUlEfSwgXCRQYXJhbXtNaW5UaW1lQmV0d2VlbkluY2lkZW50c30sCiAgICAgICAgXSwKIyAtLS0KICAgICk7CgogICAgIyBnZXQgc2xhIGlkCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2xhIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRTTEFJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRTTEFJRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyBjaGVjayBzbGEgaWQKICAgIGlmICggISRTTEFJRCApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGZpbmQgU0xBSUQgZm9yICckUGFyYW17TmFtZX0nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyByZW1vdmUgYWxsIGV4aXN0aW5nIGFsbG9jYXRpb25zCiAgICAkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIHNlcnZpY2Vfc2xhIFdIRVJFIHNsYV9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFNMQUlEIF0sCiAgICApOwoKICAgICMgYWRkIHRoZSBuZXcgYWxsb2NhdGlvbnMKICAgIGZvciBteSAkU2VydmljZUlEICggQHsgJFBhcmFte1NlcnZpY2VJRHN9IH0gKSB7CgogICAgICAgICMgYWRkIG9uZSBhbGxvY2F0aW9uCiAgICAgICAgJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMICA9PiAnSU5TRVJUIElOVE8gc2VydmljZV9zbGEgKHNlcnZpY2VfaWQsIHNsYV9pZCkgVkFMVUVTICg/LCA/KScsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFNlcnZpY2VJRCwgXCRTTEFJRCBdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRTTEFJRDsKfQoKPWl0ZW0gU0xBVXBkYXRlKCkKCnVwZGF0ZSBhIGV4aXN0aW5nIHNsYQoKICAgIG15ICRUcnVlID0gJFNMQU9iamVjdC0+U0xBVXBkYXRlKAogICAgICAgIFNMQUlEICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgMSwgMiwgMyBdLCAgIyAob3B0aW9uYWwpCiAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnU2VydmljZSBOYW1lJywKICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICdDYWxlbmRhcjEnLCAgIyAob3B0aW9uYWwpCiAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAxMjAsICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gNjAsICAgICAgICAgICAjIChvcHRpb25hbCkgbm90aWZ5IGFnZW50IGlmIGZpcnN0IHJlc3BvbnNlIGVzY2FsYXRpb24gaXMgNjAlIHJlYWNoZWQKICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDE4MCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA4MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgdXBkYXRlIGVzY2FsYXRpb24gaXMgODAlIHJlYWNoZWQKICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDU4MCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA4MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgc29sdXRpb24gZXNjYWxhdGlvbiBpcyA4MCUgcmVhY2hlZAogICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBNaW5UaW1lQmV0d2VlbkluY2lkZW50cyA9PiAzNDQzLCAgIyAob3B0aW9uYWwpCiMgLS0tCiAgICApOwoKPWN1dAoKc3ViIFNMQVVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTTEFJRCBOYW1lIFZhbGlkSUQgVXNlcklEKSkgewogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU0xBSUQgTmFtZSBWYWxpZElEIFVzZXJJRCBUeXBlSUQpKSB7CiMgLS0tCiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgc2VydmljZSBpZHMKICAgIGlmICggZGVmaW5lZCAkUGFyYW17U2VydmljZUlEc30gJiYgcmVmICRQYXJhbXtTZXJ2aWNlSURzfSBuZSAnQVJSQVknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnU2VydmljZUlEcyBuZWVkIHRvIGJlIGFuIGFycmF5IHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgdmFsdWVzCiAgICAkUGFyYW17U2VydmljZUlEc30gICAgICAgICAgfHw9IFtdOwogICAgJFBhcmFte0NhbGVuZGFyfSAgICAgICAgICAgIHx8PSAnJzsKICAgICRQYXJhbXtDb21tZW50fSAgICAgICAgICAgICB8fD0gJyc7CiAgICAkUGFyYW17Rmlyc3RSZXNwb25zZVRpbWV9ICAgfHw9IDA7CiAgICAkUGFyYW17Rmlyc3RSZXNwb25zZU5vdGlmeX0gfHw9IDA7CiAgICAkUGFyYW17VXBkYXRlVGltZX0gICAgICAgICAgfHw9IDA7CiAgICAkUGFyYW17VXBkYXRlTm90aWZ5fSAgICAgICAgfHw9IDA7CiAgICAkUGFyYW17U29sdXRpb25UaW1lfSAgICAgICAgfHw9IDA7CiAgICAkUGFyYW17U29sdXRpb25Ob3RpZnl9ICAgICAgfHw9IDA7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICRQYXJhbXtNaW5UaW1lQmV0d2VlbkluY2lkZW50c30gfHw9IDA7CiMgLS0tCgogICAgIyBnZXQgY2hlY2sgaXRlbSBvYmplY3QKICAgIG15ICRDaGVja0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyk7CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBDb21tZW50KSkgewogICAgICAgICRDaGVja0l0ZW1PYmplY3QtPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZmluZCBleGl0aW5nIHNsYSdzIHdpdGggdGhlIHNhbWUgbmFtZQogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIHNsYSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkVXBkYXRlID0gMDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIGlmICggJFJvd1swXSAhPSAkUGFyYW17U0xBSUR9ICkgewogICAgICAgICAgICAkVXBkYXRlID0gJFJvd1swXTsKICAgICAgICB9CiAgICB9CgogICAgIyBhYm9ydCB1cGRhdGUgb2Ygc2xhLCBpZiBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICBpZiAoJFVwZGF0ZSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgdXBkYXRlIFNMQSEgJyRQYXJhbXtOYW1lfScgYWxyZWFkeSBleGlzdHMuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJlc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJ0NhY2hlOjpTTEFHZXQ6OicgLiAkUGFyYW17U0xBSUR9LAogICAgKTsKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAnQ2FjaGU6OlNMQUxvb2t1cDo6TmFtZTo6JyAuICRQYXJhbXtOYW1lfSwKICAgICk7CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJ0NhY2hlOjpTTEFMb29rdXA6OklEOjonIC4gJFBhcmFte1NMQUlEfSwKICAgICk7CgogICAgIyB1cGRhdGUgc2VydmljZQogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAojIC0tLQojIElUU01Db3JlCiMgLS0tCiMgICAgICAgIFNRTCA9PiAnVVBEQVRFIHNsYSBTRVQgbmFtZSA9ID8sIGNhbGVuZGFyX25hbWUgPSA/LCAnCiMgICAgICAgICAgICAuICdmaXJzdF9yZXNwb25zZV90aW1lID0gPywgZmlyc3RfcmVzcG9uc2Vfbm90aWZ5ID0gPywgJwojICAgICAgICAgICAgLiAndXBkYXRlX3RpbWUgPSA/LCB1cGRhdGVfbm90aWZ5ID0gPywgc29sdXRpb25fdGltZSA9ID8sIHNvbHV0aW9uX25vdGlmeSA9ID8sICcKIyAgICAgICAgICAgIC4gJ3ZhbGlkX2lkID0gPywgY29tbWVudHMgPSA/LCBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/ICcKIyAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiMgICAgICAgIEJpbmQgPT4gWwojICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwgICAgICAgICAgICAgICAgXCRQYXJhbXtDYWxlbmRhcn0sICAgICAgIFwkUGFyYW17Rmlyc3RSZXNwb25zZVRpbWV9LAojICAgICAgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwgXCRQYXJhbXtVcGRhdGVUaW1lfSwgICAgIFwkUGFyYW17VXBkYXRlTm90aWZ5fSwKIyAgICAgICAgICAgIFwkUGFyYW17U29sdXRpb25UaW1lfSwgICAgICAgIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAojICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1NMQUlEfSwKIyAgICAgICAgXSwKICAgICAgICBTUUwgPT4gJ1VQREFURSBzbGEgU0VUIG5hbWUgPSA/LCBjYWxlbmRhcl9uYW1lID0gPywgJwogICAgICAgICAgICAuICdmaXJzdF9yZXNwb25zZV90aW1lID0gPywgZmlyc3RfcmVzcG9uc2Vfbm90aWZ5ID0gPywgJwogICAgICAgICAgICAuICd1cGRhdGVfdGltZSA9ID8sIHVwZGF0ZV9ub3RpZnkgPSA/LCBzb2x1dGlvbl90aW1lID0gPywgc29sdXRpb25fbm90aWZ5ID0gPywgJwogICAgICAgICAgICAuICd2YWxpZF9pZCA9ID8sIGNvbW1lbnRzID0gPywgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPywgJwogICAgICAgICAgICAuICd0eXBlX2lkID0gPywgbWluX3RpbWVfYmV0X2luY2lkZW50cyA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgICAgICAgICAgICBcJFBhcmFte0NhbGVuZGFyfSwgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSwKICAgICAgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwgXCRQYXJhbXtVcGRhdGVUaW1lfSwgXCRQYXJhbXtVcGRhdGVOb3RpZnl9LAogICAgICAgICAgICBcJFBhcmFte1NvbHV0aW9uVGltZX0sIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VHlwZUlEfSwgXCRQYXJhbXtNaW5UaW1lQmV0d2VlbkluY2lkZW50c30sIFwkUGFyYW17U0xBSUR9LAogICAgICAgIF0sCiMgLS0tCiAgICApOwoKICAgICMgcmVtb3ZlIGFsbCBleGlzdGluZyBhbGxvY2F0aW9ucwogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIHNlcnZpY2Vfc2xhIFdIRVJFIHNsYV9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1NMQUlEfSwgXQogICAgKTsKCiAgICAjIGFkZCB0aGUgbmV3IGFsbG9jYXRpb25zCiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIEB7ICRQYXJhbXtTZXJ2aWNlSURzfSB9ICkgewoKICAgICAgICAjIGFkZCBvbmUgYWxsb2NhdGlvbgogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMICA9PiAnSU5TRVJUIElOVE8gc2VydmljZV9zbGEgKHNlcnZpY2VfaWQsIHNsYV9pZCkgVkFMVUVTICg/LCA/KScsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFNlcnZpY2VJRCwgXCRQYXJhbXtTTEFJRH0gXSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBTTEFQcmVmZXJlbmNlc1NldCgpCgpzZXQgU0xBIHByZWZlcmVuY2VzCgogICAgJFNMQU9iamVjdC0+U0xBUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgU0xBSUQgPT4gMTIzLAogICAgICAgIEtleSAgICAgICA9PiAnVXNlckNvbW1lbnQnLAogICAgICAgIFZhbHVlICAgICA9PiAnc29tZSBjb21tZW50JywKICAgICAgICBVc2VySUQgICAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBTTEFQcmVmZXJlbmNlc1NldCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIHJldHVybiAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fS0+U0xBUHJlZmVyZW5jZXNTZXQoQF8pOwp9Cgo9aXRlbSBTTEFQcmVmZXJlbmNlc0dldCgpCgpnZXQgU0xBIHByZWZlcmVuY2VzCgogICAgbXkgJVByZWZlcmVuY2VzID0gJFNMQU9iamVjdC0+U0xBUHJlZmVyZW5jZXNHZXQoCiAgICAgICAgU0xBSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFNMQVByZWZlcmVuY2VzR2V0IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5TTEFQcmVmZXJlbmNlc0dldChAXyk7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L0NvbnNvbGUvQ29tbWFuZC9BZG1pbi9TZXJ2aWNlL0FkZC50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkQ29tbWFuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpBZG1pbjo6U2VydmljZTo6QWRkJyk7CgpteSAoICRSZXN1bHQsICRFeGl0Q29kZSApOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKbXkgJFBhcmVudFNlcnZpY2VOYW1lID0gIlBhcmVudFNlcnZpY2UiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKbXkgJENoaWxkU2VydmljZU5hbWUgID0gIkNoaWxkU2VydmljZSIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwoKIyB0cnkgdG8gZXhlY3V0ZSBjb21tYW5kIHdpdGhvdXQgYW55IG9wdGlvbnMKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoKTsKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMSwKICAgICJObyBvcHRpb25zIiwKKTsKCiMgcHJvdmlkZSBtaW5pbXVtIG9wdGlvbnMKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQojJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLW5hbWUnLCAkUGFyZW50U2VydmljZU5hbWUgKTsKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLW5hbWUnLCAkUGFyZW50U2VydmljZU5hbWUsICctLWNyaXRpY2FsaXR5JywgJzMgbm9ybWFsJywgJy0tdHlwZScsICdEZW1vbnN0cmF0aW9uJyApOwojIC0tLQokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIk1pbmltdW0gb3B0aW9ucyAoIHRoZSBzZXJ2aWNlIGlzIGFkZGVkIC0gJFBhcmVudFNlcnZpY2VOYW1lICkiLAopOwoKIyBzYW1lIGFnYWluIChzaG91bGQgZmFpbCBiZWNhdXNlIGFscmVhZHkgZXhpc3RzKQojIC0tLQojIElUU01Db3JlCiMgLS0tCiMkRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSApOwokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSwgJy0tY3JpdGljYWxpdHknLCAnMyBub3JtYWwnLCAnLS10eXBlJywgJ0RlbW9uc3RyYXRpb24nICk7CiMgLS0tCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDEsCiAgICAiTWluaW11bSBvcHRpb25zICggc2VydmljZSAkUGFyZW50U2VydmljZU5hbWUgYWxyZWFkeSBleGlzdHMgKSIsCik7CgojIGludmFsaWQgcGFyZW50CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1uYW1lJywgJENoaWxkU2VydmljZU5hbWUsICctLXBhcmVudC1uYW1lJywgJENoaWxkU2VydmljZU5hbWUgKTsKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLW5hbWUnLCAkQ2hpbGRTZXJ2aWNlTmFtZSwgJy0tcGFyZW50LW5hbWUnLCAkQ2hpbGRTZXJ2aWNlTmFtZSwgJy0tY3JpdGljYWxpdHknLCAnMyBub3JtYWwnLCAnLS10eXBlJywgJ0RlbW9uc3RyYXRpb24nICk7CiMgLS0tCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDEsCiAgICAiUGFyZW50IHNlcnZpY2UgJENoaWxkU2VydmljZU5hbWUgZG9lcyBub3QgZXhpc3QiLAopOwoKIyB2YWxpZCBwYXJlbnQKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQojJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLW5hbWUnLCAkQ2hpbGRTZXJ2aWNlTmFtZSwgJy0tcGFyZW50LW5hbWUnLCAkUGFyZW50U2VydmljZU5hbWUgKTsKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLW5hbWUnLCAkQ2hpbGRTZXJ2aWNlTmFtZSwgJy0tcGFyZW50LW5hbWUnLCAkUGFyZW50U2VydmljZU5hbWUsICctLWNyaXRpY2FsaXR5JywgJzMgbm9ybWFsJywgJy0tdHlwZScsICdEZW1vbnN0cmF0aW9uJyApOwojIC0tLQokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIkV4aXN0aW5nIHBhcmVudCAoIHNlcnZpY2UgaXMgYWRkZWQgLSAkQ2hpbGRTZXJ2aWNlTmFtZSApIiwKKTsKCiMgY2xlYW51cCBpcyBkb25lIGJ5IFJlc3RvcmVEYXRhYmFzZQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L0dlbmVyaWNJbnRlcmZhY2UvT3BlcmF0aW9uL1RpY2tldC9UaWNrZXRDcmVhdGUudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRXhwbGljaXRQYWNrYWdlKQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgU29ja2V0Owp1c2UgTUlNRTo6QmFzZTY0OwoKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXI7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpUaWNrZXRDcmVhdGU7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6U2Vzc2lvbjo6U2Vzc2lvbkNyZWF0ZTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyhJc0FycmF5UmVmV2l0aERhdGEgSXNIYXNoUmVmV2l0aERhdGEgSXNTdHJpbmdXaXRoRGF0YSk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKIyBza2lwIFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24KJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CgogICAgICAgIFNraXBTU0xWZXJpZnkgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1RpY2tldDo6VHlwZScsCiAgICBWYWx1ZSA9PiAnMScsCik7CiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1RpY2tldDo6VHlwZScsCiAgICBWYWx1ZSA9PiAxLAopOwokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpBY2NvdW50VGltZScsCiAgICBWYWx1ZSA9PiAnMScsCik7CiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkFjY291bnRUaW1lJywKICAgIFZhbHVlID0+IDEsCik7CiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6Ok5lZWRBY2NvdW50ZWRUaW1lJywKICAgIFZhbHVlID0+ICcxJywKKTsKJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnVGlja2V0OjpGcm9udGVuZDo6TmVlZEFjY291bnRlZFRpbWUnLAogICAgVmFsdWUgPT4gMSwKKTsKCiMgZGlzYWJsZSBETlMgbG9va3VwcwokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdDaGVja01YUmVjb3JkJywKICAgIFZhbHVlID0+ICcwJywKKTsKJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnQ2hlY2tNWFJlY29yZCcsCiAgICBWYWx1ZSA9PiAwLAopOwokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgIFZhbHVlID0+ICcxJywKKTsKJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICBWYWx1ZSA9PiAxLAopOwoKIyBkaXNhYmxlIFNlc3Npb25DaGVja1JlbW90ZUlQIHNldHRpbmcKJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnU2Vzc2lvbkNoZWNrUmVtb3RlSVAnLAogICAgVmFsdWUgPT4gMCwKKTsKCiMgZW5hYmxlIGN1c3RvbWVyIGdyb3VwcyBzdXBwb3J0CiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ0N1c3RvbWVyR3JvdXBTdXBwb3J0JywKICAgIFZhbHVlID0+IDEsCik7CgojIGNoZWNrIGlmIFNTTCBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQKJFNlbGYtPklzKAogICAgJEVOVntQRVJMX0xXUF9TU0xfVkVSSUZZX0hPU1ROQU1FfSwKICAgIDAsCiAgICAnRGlzYWJsZWQgU1NMIGNlcnRpZmljYXRlcyB2ZXJpZmljYXRpb24gaW4gZW52aXJvbm1lbnQnLAopOwoKbXkgJFRlc3RPd25lckxvZ2luICAgICAgICA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKCk7Cm15ICRUZXN0UmVzcG9uc2libGVMb2dpbiAgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgpOwpteSAkVGVzdEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwoKIyBjcmVhdGUgdXNlciBvYmplY3QKbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKbXkgJE93bmVySUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgIFVzZXJMb2dpbiA9PiAkVGVzdE93bmVyTG9naW4sCik7Cm15ICRSZXNwb25zaWJsZUlEID0gJFVzZXJPYmplY3QtPlVzZXJMb29rdXAoCiAgICBVc2VyTG9naW4gPT4gJFRlc3RSZXNwb25zaWJsZUxvZ2luLAopOwoKbXkgJEludmFsaWRJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExvb2t1cCggVmFsaWQgPT4gJ2ludmFsaWQnICk7CgojIHNhbml0eSB0ZXN0CiRTZWxmLT5Jc05vdCgKICAgICRJbnZhbGlkSUQsCiAgICB1bmRlZiwKICAgICJWYWxpZExvb2t1cCgpIGZvciAnaW52YWxpZCcgc2hvdWxkIG5vdCBiZSB1bmRlZiIKKTsKCiMgZ2V0IGdyb3VwIG9iamVjdApteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiMgY3JlYXRlIGEgbmV3IGdyb3VwCm15ICRHcm91cElEID0gJEdyb3VwT2JqZWN0LT5Hcm91cEFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RTcGVjaWFsJyAuICRSYW5kb21JRCwKICAgIENvbW1lbnQgPT4gJ2NvbW1lbnQgZGVzY3JpYmluZyB0aGUgZ3JvdXAnLCAgICAjIG9wdGlvbmFsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgpteSAlR3JvdXBEYXRhID0gJEdyb3VwT2JqZWN0LT5Hcm91cEdldCggSUQgPT4gJEdyb3VwSUQgKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlR3JvdXBEYXRhICksCiAgICAiR3JvdXBHZXQoKSAtIGZvciB0ZXN0aW5nIGdyb3VwIiwKKTsKCiMgY3JlYXRlIHF1ZXVlIG9iamVjdApteSAkUXVldWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKCm15IEBRdWV1ZXM7CgpteSBAUXVldWVQcm9wZXJ0aWVzID0gKAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ3F1ZXVlMScgLiAkUmFuZG9tSUQsCiAgICAgICAgR3JvdXBJRCA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgID0+ICdxdWV1ZTInIC4gJFJhbmRvbUlELAogICAgICAgIEdyb3VwSUQgPT4gJEdyb3VwSUQsCiAgICB9Cik7CgojIGNyZWF0ZSBxdWV1ZXMKZm9yIG15ICRRdWV1ZVByb3BlcnR5IChAUXVldWVQcm9wZXJ0aWVzKSB7CiAgICBteSAkUXVldWVJRCA9ICRRdWV1ZU9iamVjdC0+UXVldWVBZGQoCiAgICAgICAgJXskUXVldWVQcm9wZXJ0eX0sCiAgICAgICAgVmFsaWRJRCAgICAgICAgID0+IDEsCiAgICAgICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICAgICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICAgICAgU2lnbmF0dXJlSUQgICAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgICAgICAgID0+ICdTb21lIGNvbW1lbnQnLAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVjawogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFF1ZXVlSUQsCiAgICAgICAgIlF1ZXVlQWRkKCkgLSBjcmVhdGUgdGVzdGluZyBxdWV1ZSIsCiAgICApOwogICAgbXkgJVF1ZXVlRGF0YSA9ICRRdWV1ZU9iamVjdC0+UXVldWVHZXQoIElEID0+ICRRdWV1ZUlEICk7CgogICAgcHVzaCBAUXVldWVzLCBcJVF1ZXVlRGF0YTsKfQoKIyBnZXQgdHlwZSBvYmplY3QKbXkgJFR5cGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpOwoKIyBjcmVhdGUgbmV3IHR5cGUKbXkgJFR5cGVJRCA9ICRUeXBlT2JqZWN0LT5UeXBlQWRkKAogICAgTmFtZSAgICA9PiAnVGVzdFR5cGUnIC4gJFJhbmRvbUlELAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVHlwZUlELAogICAgIlR5cGVBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIHR5cGUiLAopOwoKbXkgJVR5cGVEYXRhID0gJFR5cGVPYmplY3QtPlR5cGVHZXQoCiAgICBJRCA9PiAkVHlwZUlELAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVUeXBlRGF0YSApLAogICAgIlR5cGVHZXQoKSAtIGZvciB0ZXN0aW5nIHR5cGUiLAopOwoKIyBjcmVhdGUgc2VydmljZSBvYmplY3QKbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKIyBjcmVhdGUgbmV3IHNlcnZpY2UKbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICA9PiAnVGVzdFNlcnZpY2UnIC4gJFJhbmRvbUlELAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VJRCwKICAgICJTZXJ2aWNlQWRkKCkgLSBjcmVhdGUgdGVzdGluZyBzZXJ2aWNlIiwKKTsKCm15ICVTZXJ2aWNlRGF0YSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlU2VydmljZURhdGEgKSwKICAgICJTZXJ2aWNlR2V0KCkgLSBmb3IgdGVzdGluZyBzZXJ2aWNlIiwKKTsKCiMgc2V0IHNlcnZpY2UgZm9yIHRoZSBjdXN0b21lcgokU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlELAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIGNyZWF0ZSBTTEEgb2JqZWN0Cm15ICRTTEFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7CgojIGNyZWF0ZSBuZXcgU0xBCm15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUFkZCgKICAgIE5hbWUgICAgICAgPT4gJ1Rlc3RTTEEnIC4gJFJhbmRvbUlELAogICAgU2VydmljZUlEcyA9PiBbJFNlcnZpY2VJRF0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiMgLS0tCiAgICBWYWxpZElEICAgID0+IDEsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTTEFJRCwKICAgICJTTEFBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIFNMQSIsCik7CgpteSAlU0xBRGF0YSA9ICRTTEFPYmplY3QtPlNMQUdldCgKICAgIFNMQUlEICA9PiAkU0xBSUQsCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlU0xBRGF0YSApLAogICAgIlNMQUdldCgpIC0gZm9yIHRlc3RpbmcgU0xBIiwKKTsKCiMgY3JlYXRlIHN0YXRlIG9iamVjdApteSAkU3RhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnKTsKCiMgY3JlYXRlIG5ldyBzdGF0ZQpteSAkU3RhdGVJRCA9ICRTdGF0ZU9iamVjdC0+U3RhdGVBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0U3RhdGUnIC4gJFJhbmRvbUlELAogICAgVHlwZUlEICA9PiAyLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU3RhdGVJRCwKICAgICJTdGF0ZUFkZCgpIC0gY3JlYXRlIHRlc3Rpbmcgc3RhdGUiLAopOwoKbXkgJVN0YXRlRGF0YSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXQoCiAgICBJRCA9PiAkU3RhdGVJRCwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlU3RhdGVEYXRhICksCiAgICAiU3RhdGVHZXQoKSAtIGZvciB0ZXN0aW5nIHN0YXRlIiwKKTsKCiMgY3JlYXRlIHByaW9yaXR5IG9iamVjdApteSAkUHJpb3JpdHlPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKTsKCiMgY3JlYXRlIG5ldyBwcmlvcml0eQpteSAkUHJpb3JpdHlJRCA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0UHJpb3JpdHknIC4gJFJhbmRvbUlELAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkUHJpb3JpdHlJRCwKICAgICJQcmlvcml0eUFkZCgpIC0gY3JlYXRlIHRlc3RpbmcgcHJpb3JpdHkiLAopOwoKbXkgJVByaW9yaXR5RGF0YSA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlHZXQoCiAgICBQcmlvcml0eUlEID0+ICRQcmlvcml0eUlELAogICAgVXNlcklEICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVQcmlvcml0eURhdGEgKSwKICAgICJQcmlvcml0eUdldCgpIC0gZm9yIHRlc3RpbmcgcHJpb3JpdHkiLAopOwoKIyBjcmVhdGUgZHluYW1pYyBmaWVsZCBvYmplY3QKbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKCiMgYWRkIHRleHQgZHluYW1pYyBmaWVsZApteSAlRHluYW1pY0ZpZWxkVGV4dENvbmZpZyA9ICgKICAgIE5hbWUgICAgICAgPT4gIlVuaXR0ZXN0MSRSYW5kb21JRCIsCiAgICBGaWVsZE9yZGVyID0+IDk5OTEsCiAgICBGaWVsZFR5cGUgID0+ICdUZXh0JywKICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICBMYWJlbCAgICAgID0+ICdEZXNjcmlwdGlvbicsCiAgICBWYWxpZElEICAgID0+IDEsCiAgICBDb25maWcgICAgID0+IHsKICAgICAgICBEZWZhdWx0VmFsdWUgPT4gJycsCiAgICB9LAopOwpteSAkRmllbGRUZXh0SUQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICAlRHluYW1pY0ZpZWxkVGV4dENvbmZpZywKICAgIFVzZXJJRCAgPT4gMSwKICAgIFJlb3JkZXIgPT4gMCwKKTsKJFNlbGYtPlRydWUoCiAgICAkRmllbGRUZXh0SUQsCiAgICAiRHluYW1pYyBGaWVsZCAkRmllbGRUZXh0SUQiLAopOwoKIyBhZGQgSUQKJER5bmFtaWNGaWVsZFRleHRDb25maWd7SUR9ID0gJEZpZWxkVGV4dElEOwoKIyBhZGQgZHJvcGRvd24gZHluYW1pYyBmaWVsZApteSAlRHluYW1pY0ZpZWxkRHJvcGRvd25Db25maWcgPSAoCiAgICBOYW1lICAgICAgID0+ICJVbml0dGVzdDIkUmFuZG9tSUQiLAogICAgRmllbGRPcmRlciA9PiA5OTkyLAogICAgRmllbGRUeXBlICA9PiAnRHJvcGRvd24nLAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgIExhYmVsICAgICAgPT4gJ0Rlc2NyaXB0aW9uJywKICAgIFZhbGlkSUQgICAgPT4gMSwKICAgIENvbmZpZyAgICAgPT4gewogICAgICAgIFBvc3NpYmxlVmFsdWVzID0+IFsKICAgICAgICAgICAgMSA9PiAnT25lJywKICAgICAgICAgICAgMiA9PiAnVHdvJywKICAgICAgICAgICAgMyA9PiAnVGhyZWUnLAogICAgICAgIF0sCiAgICB9LAopOwpteSAkRmllbGREcm9wZG93bklEID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkQWRkKAogICAgJUR5bmFtaWNGaWVsZERyb3Bkb3duQ29uZmlnLAogICAgVXNlcklEICA9PiAxLAogICAgUmVvcmRlciA9PiAwLAopOwokU2VsZi0+VHJ1ZSgKICAgICRGaWVsZERyb3Bkb3duSUQsCiAgICAiRHluYW1pYyBGaWVsZCAkRmllbGREcm9wZG93bklEIiwKKTsKCiMgYWRkIElECiREeW5hbWljRmllbGREcm9wZG93bkNvbmZpZ3tJRH0gPSAkRmllbGREcm9wZG93bklEOwoKIyBhZGQgbXVsdGlzZWxlY3QgZHluYW1pYyBmaWVsZApteSAlRHluYW1pY0ZpZWxkTXVsdGlzZWxlY3RDb25maWcgPSAoCiAgICBOYW1lICAgICAgID0+ICJVbml0dGVzdDMkUmFuZG9tSUQiLAogICAgRmllbGRPcmRlciA9PiA5OTkzLAogICAgRmllbGRUeXBlICA9PiAnTXVsdGlzZWxlY3QnLAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgIExhYmVsICAgICAgPT4gJ011bHRpc2VsZWN0IGxhYmVsJywKICAgIFZhbGlkSUQgICAgPT4gMSwKICAgIENvbmZpZyAgICAgPT4gewogICAgICAgIFBvc3NpYmxlVmFsdWVzID0+IFsKICAgICAgICAgICAgMSA9PiAnVmFsdWU5w5/DvMOfJywKICAgICAgICAgICAgMiA9PiAnRGlmZmVyZW50VmFsdWUnLAogICAgICAgICAgICAzID0+ICcxMjM0NTY3JywKICAgICAgICBdLAogICAgfSwKKTsKbXkgJEZpZWxkTXVsdGlzZWxlY3RJRCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgICVEeW5hbWljRmllbGRNdWx0aXNlbGVjdENvbmZpZywKICAgIFVzZXJJRCAgPT4gMSwKICAgIFJlb3JkZXIgPT4gMCwKKTsKJFNlbGYtPlRydWUoCiAgICAkRmllbGRNdWx0aXNlbGVjdElELAogICAgIkR5bmFtaWMgRmllbGQgJEZpZWxkTXVsdGlzZWxlY3RJRCIsCik7CgojIGFkZCBJRAokRHluYW1pY0ZpZWxkTXVsdGlzZWxlY3RDb25maWd7SUR9ID0gJEZpZWxkTXVsdGlzZWxlY3RJRDsKCiMgYWRkIGRhdGUtdGltZSBkeW5hbWljIGZpZWxkCm15ICVEeW5hbWljRmllbGREYXRlVGltZUNvbmZpZyA9ICgKICAgIE5hbWUgICAgICAgPT4gIlVuaXR0ZXN0NCRSYW5kb21JRCIsCiAgICBGaWVsZE9yZGVyID0+IDk5OTEsCiAgICBGaWVsZFR5cGUgID0+ICdEYXRlVGltZScsCiAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgTGFiZWwgICAgICA9PiAnRGVzY3JpcHRpb24nLAogICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgRGVmYXVsdFZhbHVlICA9PiAwLAogICAgICAgIFllYXJzSW5GdXR1cmUgPT4gMCwKICAgICAgICBZZWFyc0luUGFzdCAgID0+IDAsCiAgICAgICAgWWVhcnNQZXJpb2QgICA9PiAwLAogICAgfSwKICAgIFZhbGlkSUQgPT4gMSwKKTsKbXkgJEZpZWxkRGF0ZVRpbWVJRCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgICVEeW5hbWljRmllbGREYXRlVGltZUNvbmZpZywKICAgIFVzZXJJRCAgPT4gMSwKICAgIFJlb3JkZXIgPT4gMCwKKTsKJFNlbGYtPlRydWUoCiAgICAkRmllbGREYXRlVGltZUlELAogICAgIkR5bmFtaWMgRmllbGQgJEZpZWxkRGF0ZVRpbWVJRCIsCik7CgojIGFkZCBJRAokRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7SUR9ID0gJEZpZWxkRGF0ZVRpbWVJRDsKCiMgY3JlYXRlIHdlYnNlcnZpY2Ugb2JqZWN0Cm15ICRXZWJzZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnKTsKJFNlbGYtPklzKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJywKICAgIHJlZiAkV2Vic2VydmljZU9iamVjdCwKICAgICJDcmVhdGUgd2Vic2VydmljZSBvYmplY3QiLAopOwoKIyBzZXQgd2Vic2VydmljZSBuYW1lCm15ICRXZWJzZXJ2aWNlTmFtZSA9ICctVGVzdC0nIC4gJFJhbmRvbUlEOwoKbXkgJFdlYnNlcnZpY2VJRCA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlQWRkKAogICAgTmFtZSAgID0+ICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbmZpZyA9PiB7CiAgICAgICAgRGVidWdnZXIgPT4gewogICAgICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIH0sCiAgICAgICAgUHJvdmlkZXIgPT4gewogICAgICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZUlELAogICAgIkFkZGVkIFdlYnNlcnZpY2UiLAopOwoKIyBnZXQgcmVtb3RlIGhvc3Qgd2l0aCBzb21lIHByZWNhdXRpb25zIGZvciBjZXJ0YWluIHVuaXQgdGVzdCBzeXN0ZW1zCm15ICRIb3N0ID0gJEhlbHBlci0+R2V0VGVzdEhUVFBIb3N0bmFtZSgpOwoKIyBwcmVwYXJlIHdlYnNlcnZpY2UgY29uZmlnCm15ICRSZW1vdGVTeXN0ZW0gPQogICAgJENvbmZpZ09iamVjdC0+R2V0KCdIdHRwVHlwZScpCiAgICAuICc6Ly8nCiAgICAuICRIb3N0CiAgICAuICcvJwogICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NjcmlwdEFsaWFzJykKICAgIC4gJy9ucGgtZ2VuZXJpY2ludGVyZmFjZS5wbC9XZWJzZXJ2aWNlSUQvJwogICAgLiAkV2Vic2VydmljZUlEOwoKbXkgJFdlYnNlcnZpY2VDb25maWcgPSB7CgogICAgIyAgICBOYW1lID0+ICcnLAogICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAnVGVzdCBmb3IgVGlja2V0IENvbm5lY3RvciB1c2luZyBTT0FQIHRyYW5zcG9ydCBiYWNrZW5kLicsCiAgICBEZWJ1Z2dlciA9PiB7CiAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJ2RlYnVnJywKICAgICAgICBUZXN0TW9kZSAgICAgICA9PiAxLAogICAgfSwKICAgIFByb3ZpZGVyID0+IHsKICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICBUeXBlICAgPT4gJ0hUVFA6OlNPQVAnLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDEwMDAwMDAwLAogICAgICAgICAgICAgICAgTmFtZVNwYWNlID0+ICdodHRwOi8vb3Rycy5vcmcvU29hcFRlc3RJbnRlcmZhY2UvJywKICAgICAgICAgICAgICAgIEVuZHBvaW50ICA9PiAkUmVtb3RlU3lzdGVtLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+IHsKICAgICAgICAgICAgVGlja2V0Q3JlYXRlID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1RpY2tldDo6VGlja2V0Q3JlYXRlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2Vzc2lvbkNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdTZXNzaW9uOjpTZXNzaW9uQ3JlYXRlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIFJlcXVlc3RlciA9PiB7CiAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgVHlwZSAgID0+ICdIVFRQOjpTT0FQJywKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE5hbWVTcGFjZSA9PiAnaHR0cDovL290cnMub3JnL1NvYXBUZXN0SW50ZXJmYWNlLycsCiAgICAgICAgICAgICAgICBFbmNvZGluZyAgPT4gJ1VURi04JywKICAgICAgICAgICAgICAgIEVuZHBvaW50ICA9PiAkUmVtb3RlU3lzdGVtLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgSW52b2tlciA9PiB7CiAgICAgICAgICAgIFRpY2tldENyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2Vzc2lvbkNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKfTsKCiMgdXBkYXRlIHdlYnNlcnZpY2Ugd2l0aCByZWFsIGNvbmZpZwpteSAkV2Vic2VydmljZVVwZGF0ZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlVXBkYXRlKAogICAgSUQgICAgICA9PiAkV2Vic2VydmljZUlELAogICAgTmFtZSAgICA9PiAkV2Vic2VydmljZU5hbWUsCiAgICBDb25maWcgID0+ICRXZWJzZXJ2aWNlQ29uZmlnLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRXZWJzZXJ2aWNlVXBkYXRlLAogICAgIlVwZGF0ZWQgV2Vic2VydmljZSAkV2Vic2VydmljZUlEIC0gJFdlYnNlcnZpY2VOYW1lIiwKKTsKCiMgR2V0IFNlc3Npb25JRAojIGNyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0Cm15ICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInKTsKJFNlbGYtPklzKAogICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJywKICAgIHJlZiAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdCwKICAgICJTZXNzaW9uSUQgLSBDcmVhdGUgcmVxdWVzdGVyIG9iamVjdCIsCik7CgojIGNyZWF0ZSBhIG5ldyB1c2VyIGZvciBjdXJyZW50IHRlc3QKbXkgJFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJyBdLAopOwpteSAkUGFzc3dvcmQgPSAkVXNlckxvZ2luOwoKIyBjcmVhdGUgYSBuZXcgdXNlciB3aXRob3V0IHBlcm1pc3Npb25zIGZvciBjdXJyZW50IHRlc3QKbXkgJFVzZXJMb2dpbjIgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgpOwpteSAkUGFzc3dvcmQyICA9ICRVc2VyTG9naW4yOwoKIyBjcmVhdGUgYSBjdXN0b21lciB3aGVyZSBhIHRpY2tldCB3aWxsIHVzZSBhbmQgd2lsbCBoYXZlIHBlcm1pc3Npb25zCm15ICRDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKbXkgJEN1c3RvbWVyUGFzc3dvcmQgID0gJEN1c3RvbWVyVXNlckxvZ2luOwoKIyBjcmVhdGUgYSBjdXN0b21lciB0aGF0IHdpbGwgbm90IGhhdmUgcGVybWlzc2lvbnMKbXkgJEN1c3RvbWVyVXNlckxvZ2luMiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKbXkgJEN1c3RvbWVyUGFzc3dvcmQyICA9ICRDdXN0b21lclVzZXJMb2dpbjI7CgojIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWJzZXJ2aWNlCm15ICRSZXF1ZXN0ZXJTZXNzaW9uUmVzdWx0ID0gJFJlcXVlc3RlclNlc3Npb25PYmplY3QtPlJ1bigKICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgSW52b2tlciAgICAgID0+ICdTZXNzaW9uQ3JlYXRlJywKICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgVXNlckxvZ2luID0+ICRVc2VyTG9naW4sCiAgICAgICAgUGFzc3dvcmQgID0+ICRQYXNzd29yZCwKICAgIH0sCik7CgpteSAkTmV3U2Vzc2lvbklEID0gJFJlcXVlc3RlclNlc3Npb25SZXN1bHQtPntEYXRhfS0+e1Nlc3Npb25JRH07Cm15IEBUZXN0cyAgICAgICAgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0VtcHR5IFJlcXVlc3QnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7fSwKICAgICAgICBFeHBlY3RlZERhdGEgICA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdObyBBcnRpY2xlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgVGlja2V0JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgID0+IDEsCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQXJ0aWNsZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiAxLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRHluYW1pY0ZpZWxkJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IDEsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBBdHRhY2htZW50JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgVGl0bGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIEN1c3RvbWVyVXNlcicsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBDdXN0b21lclVzZXInLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBRdWV1ZSBvciBRdWV1ZUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFF1ZXVlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBRdWV1ZUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBMb2NrJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgTG9jayAgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgTG9ja0lEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgTG9ja0lEICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgVHlwZSBvciBUeXBlSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFR5cGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBUeXBlSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTZXJ2aWNlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTZXJ2aWNlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTTEEnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBICAgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgU0xBSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgU3RhdGUgb3IgU3RhdGVJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTdGF0ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgU3RhdGVJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgUHJpb3JpdHkgb3IgUHJpb3JpdHlJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBQcmlvcml0eScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgUHJpb3JpdHlJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgT3duZXInLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVyICAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIE93bmVySUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFJlc3BvbnNpYmxlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBSZXNwb25zaWJlSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBQZW5kaW5nVGltZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMywKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFBlbmRpbmdUaW1lIERpZmYnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBEaWZmID0+IC0xMjM0NTYsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBQZW5kaW5nVGltZSBEaWZmICsgRnVsbCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIERpZmYgICA9PiAxMjM0NTYsCiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEzLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgU3ViamVjdCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIEJvZHknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgQXV0b1Jlc3BvbnNlVHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQXV0b1Jlc3BvbnNlVHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBBcnRpY2xlVHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEFydGljbGVUeXBlSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTZW5kZXJUeXBlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgU2VuZGVyVHlwZUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRnJvbScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIENvbnRlbnRUeXBlIG9yIE1JTUVUeXBlIGFuZCBDaGFyc2V0JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIENvbnRlbnRUeXBlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgQ29udGVudFR5cGUgb3IgTUlNRVR5cGUgYW5kIENoYXJzZXQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgSGlzdG9yeVR5cGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgVGltZVVuaXQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgPT4gJyUgJSAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFRpbWVVbml0JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gewogICAgICAgICAgICAgICAgICAgIEl0ZW0gPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCBJbnRlcm5hbCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbICdJbnZhbGlkJyAuICRSYW5kb21JRCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBJdGVtID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCBpbnRlcm5hbCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsgJ0ludmFsaWQnIC4gJFJhbmRvbUlEIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gewogICAgICAgICAgICAgICAgICAgIEl0ZW0gPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCBpbnRlcm5hbCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyAnSW52YWxpZCcgLiAkUmFuZG9tSUQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBEeW5hbWljRmllbGQgbmFtZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIER5bmFtaWNGaWVsZCB2YWx1ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRHluYW1pY0ZpZWxkIG5hbWUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBEeW5hbWljRmllbGQgdmFsdWUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBhdHRhY2htZW50IENvbnRlbnQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBhdHRhY2htZW50IENvbnRlbnRUeXBlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBhdHRhY2htZW50IEZpbGVuYW1lJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgYXR0YWNobWVudCBDb250ZW50VHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggSURzJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggSURzIFBlbmRpbmdUaW1lIERpZmYnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBEaWZmID0+IDEwMDgwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggSURzIChVc2luZyBTZXNzaW9uKScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEF1dGggPT4gewogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJE5ld1Nlc3Npb25JRCwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCgogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBOYW1lcycsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICRRdWV1ZXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkVHlwZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBTZXJ2aWNlICAgICAgPT4gJFNlcnZpY2VEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU0xBICAgICAgICAgID0+ICRTTEFEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICRTdGF0ZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICAgPT4gJFByaW9yaXR5RGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIE93bmVyICAgICAgICA9PiAkVGVzdE93bmVyTG9naW4sCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSAgPT4gJFRlc3RSZXNwb25zaWJsZUxvZ2luLAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCDDpMO2w7zDn8OEw5bDnOKCrNC40YEnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5ICEiw4LCpyQlJi8oKT0/w4PCnCrDg8KEw4PClkw6TEAsLi0nLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdlbWFpbC1leHRlcm5hbCcsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlICAgICAgICAgICAgICAgICAgICAgID0+ICdhZ2VudCcsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1RpY2tldCB3aXRoIGV4dGVybmFsIGN1c3RvbWVyIHVzZXInLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ICAgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICAgID0+IDEsCiAgICAgICAgRXh0ZXJuYWxDdXN0b21lciA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICdzb21lb25lQHNvbWVob3RzLmNvbScsCiAgICAgICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJFF1ZXVlc1swXS0+e05hbWV9LAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICRUeXBlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAkU3RhdGVEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICRQcmlvcml0eURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBPd25lciAgICAgICAgPT4gJFRlc3RPd25lckxvZ2luLAogICAgICAgICAgICAgICAgUmVzcG9uc2libGUgID0+ICRUZXN0UmVzcG9uc2libGVMb2dpbiwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3Qgw6TDtsO8w5/DhMOWw5zigqzQuNGBJywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keSAhIsOCwqckJSYvKCk9P8ODwpwqw4PChMODwpZMOkxALC4tJywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnZW1haWwtZXh0ZXJuYWwnLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggVGltZVVuaXRzIDAnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlICAgICAgICA9PiAkUXVldWVzWzBdLT57TmFtZX0sCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJFR5cGVEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU2VydmljZSAgICAgID0+ICRTZXJ2aWNlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFNMQSAgICAgICAgICA9PiAkU0xBRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAkU3RhdGVEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICRQcmlvcml0eURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBPd25lciAgICAgICAgPT4gJFRlc3RPd25lckxvZ2luLAogICAgICAgICAgICAgICAgUmVzcG9uc2libGUgID0+ICRUZXN0UmVzcG9uc2libGVMb2dpbiwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3Qgw6TDtsO8w5/DhMOWw5zigqzQuNGBJywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ2VtYWlsLWV4dGVybmFsJywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgICAgICAgICAgICAgPT4gJ2FnZW50JywKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1RpY2tldCB3aXRoIFRpbWVVbml0cyBmcmFjdGlvbmFsJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJFF1ZXVlc1swXS0+e05hbWV9LAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICRUeXBlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFNlcnZpY2UgICAgICA9PiAkU2VydmljZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBTTEEgICAgICAgICAgPT4gJFNMQURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJFN0YXRlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAkUHJpb3JpdHlEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgT3duZXIgICAgICAgID0+ICRUZXN0T3duZXJMb2dpbiwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlICA9PiAkVGVzdFJlc3BvbnNpYmxlTG9naW4sCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0IMOkw7bDvMOfw4TDlsOc4oKs0LjRgScsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdlbWFpbC1leHRlcm5hbCcsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlICAgICAgICAgICAgICAgICAgICAgID0+ICdhZ2VudCcsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNS41LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1RpY2tldCB3aXRoIElEcyBBZ2VudCAoTm8gUGVybWlzc2lvbiknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBBdXRoID0+IHsKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRVc2VyTG9naW4yLAogICAgICAgICAgICBQYXNzd29yZCAgPT4gJFBhc3N3b3JkMiwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAoKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBJRHMgQ3VzdG9tZXIgKFdpdGggUGVybWlzc2lvbnMpJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQXV0aCA9PiB7CiAgICAgICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgICAgICAgICAgPT4gJEN1c3RvbWVyUGFzc3dvcmQsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBJRHMgQ3VzdG9tZXIgKE5vIFBlcm1pc3Npb24pJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1sxXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQXV0aCA9PiB7CiAgICAgICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXJMb2dpbjIsCiAgICAgICAgICAgIFBhc3N3b3JkICAgICAgICAgID0+ICRDdXN0b21lclBhc3N3b3JkMiwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0NyZWF0ZSBEeW5hbWljRmllbGRzICh3aXRoIGVtcHR5IHZhbHVlKScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICJVbml0dGVzdDEkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAiVW5pdHRlc3QyJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gIlVuaXR0ZXN0MyRSYW5kb21JRCIsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCgogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdDcmVhdGUgRHluYW1pY0ZpZWxkcyAod2l0aCBub3QgZW1wdHkgdmFsdWUpJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gIlVuaXR0ZXN0MSRSYW5kb21JRCIsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJ1ZhbHVlOcOfw7zDny3jgqvjgrnjgr8xMjM0JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gIlVuaXR0ZXN0MiRSYW5kb21JRCIsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJzInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAiVW5pdHRlc3QzJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiBbIDEsIDIgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0NyZWF0ZSBEeW5hbWljRmllbGRzICh3aXRoIHdyb25nIHZhbHVlKScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICJVbml0dGVzdDEkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+IHsgV3JvbmcgPT4gJ1ZhbHVlJyB9LCAgICAjIHZhbHVlIHR5cGUgZGVwZW5kcyBvbiB0aGUgZHluYW1pYyBmaWVsZAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAiVW5pdHRlc3QyJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiB7IFdyb25nID0+ICdWYWx1ZScgfSwgICAgIyB2YWx1ZSB0eXBlIGRlcGVuZHMgb24gdGhlIGR5bmFtaWMgZmllbGQKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCik7CgojIGRlYnVnZ2VyIG9iamVjdApteSAkRGVidWdnZXJPYmplY3QgPSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyLT5uZXcoCiAgICBEZWJ1Z2dlckNvbmZpZyA9PiB7CiAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJ2RlYnVnJywKICAgICAgICBUZXN0TW9kZSAgICAgICA9PiAxLAogICAgfSwKICAgIFdlYnNlcnZpY2VJRCAgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBDb21tdW5pY2F0aW9uVHlwZSA9PiAnUHJvdmlkZXInLAopOwokU2VsZi0+SXMoCiAgICByZWYgJERlYnVnZ2VyT2JqZWN0LAogICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXInLAogICAgJ0RlYnVnZ2VyT2JqZWN0IGluc3RhbnRpYXRlIGNvcnJlY3RseScsCik7Cgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewoKICAgICMgY3JlYXRlIGxvY2FsIG9iamVjdAogICAgbXkgJExvY2FsT2JqZWN0ID0gIktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OiRUZXN0LT57T3BlcmF0aW9ufSItPm5ldygKICAgICAgICBEZWJ1Z2dlck9iamVjdCA9PiAkRGVidWdnZXJPYmplY3QsCiAgICAgICAgV2Vic2VydmljZUlEICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICJLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjokVGVzdC0+e09wZXJhdGlvbn0iLAogICAgICAgIHJlZiAkTG9jYWxPYmplY3QsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDcmVhdGUgbG9jYWwgb2JqZWN0IiwKICAgICk7CgogICAgbXkgJUF1dGggPSAoCiAgICAgICAgVXNlckxvZ2luID0+ICRVc2VyTG9naW4sCiAgICAgICAgUGFzc3dvcmQgID0+ICRQYXNzd29yZCwKICAgICk7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkVGVzdC0+e0F1dGh9ICkgKSB7CiAgICAgICAgJUF1dGggPSAleyAkVGVzdC0+e0F1dGh9IH07CiAgICB9CgogICAgIyBzdGFydCByZXF1ZXN0ZXIgd2l0aCBvdXIgd2Vic2VydmljZQogICAgbXkgJExvY2FsUmVzdWx0ID0gJExvY2FsT2JqZWN0LT5SdW4oCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgSW52b2tlciAgICAgID0+ICRUZXN0LT57T3BlcmF0aW9ufSwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlQXV0aCwKICAgICAgICAgICAgJXsgJFRlc3QtPntSZXF1ZXN0RGF0YX0gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIHJlc3VsdAogICAgJFNlbGYtPklzKAogICAgICAgICdIQVNIJywKICAgICAgICByZWYgJExvY2FsUmVzdWx0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICMgY3JlYXRlIHJlcXVlc3RlciBvYmplY3QKICAgIG15ICRSZXF1ZXN0ZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwogICAgJFNlbGYtPklzKAogICAgICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICAgICAgcmVmICRSZXF1ZXN0ZXJPYmplY3QsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDcmVhdGUgcmVxdWVzdGVyIG9iamVjdCIsCiAgICApOwoKICAgICMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYnNlcnZpY2UKICAgIG15ICRSZXF1ZXN0ZXJSZXN1bHQgPSAkUmVxdWVzdGVyT2JqZWN0LT5SdW4oCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgSW52b2tlciAgICAgID0+ICRUZXN0LT57T3BlcmF0aW9ufSwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlQXV0aCwKICAgICAgICAgICAgJXsgJFRlc3QtPntSZXF1ZXN0RGF0YX0gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIHJlc3VsdAogICAgJFNlbGYtPklzKAogICAgICAgICdIQVNIJywKICAgICAgICByZWYgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgc3RydWN0dXJlIGlzIHZhbGlkIiwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntTdWNjZXNzfSwKICAgICAgICAkVGVzdC0+e1N1Y2Nlc3NSZXF1ZXN0fSwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciBzdWNjZXNzZnVsIHJlc3VsdCIsCiAgICApOwoKICAgICMgdGVzdHMgc3VwcG9zZWQgdG8gc3VjY2VlZAogICAgaWYgKCAkVGVzdC0+e1N1Y2Nlc3NDcmVhdGV9ICkgewoKICAgICAgICAjIGxvY2FsIHJlc3VsdHMKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IFRpY2tldElEIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgVGlja2V0TnVtYmVyIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgQXJ0aWNsZUlEIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfSwKICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9yIGlzIHVuZGVmaW5lZC4iLAogICAgICAgICk7CgogICAgICAgICMgcmVxdWVzdGVyIHJlc3VsdHMKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgVGlja2V0SUQgd2l0aCBUcnVlLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IFRpY2tldE51bWJlciB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgQXJ0aWNsZUlEIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntFcnJvcn0sCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgRXJyb3IgaXMgdW5kZWZpbmVkLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGlja2V0IG9iamVjdAogICAgICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgICAgICMgZ2V0IHRoZSBUaWNrZXQgZW50cnkgKGZyb20gbG9jYWwgcmVzdWx0KQogICAgICAgIG15ICVMb2NhbFRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJExvY2FsUmVzdWx0LT57RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVMb2NhbFRpY2tldERhdGEgKSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBjcmVhdGVkIGxvY2FsIHRpY2tldCBzdHJ1Y3R1cmUgd2l0aCBUcnVlLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGhlIFRpY2tldCBlbnRyeSAoZnJvbSByZXF1ZXN0ZXIgcmVzdWx0KQogICAgICAgIG15ICVSZXF1ZXN0ZXJUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVJlcXVlc3RlclRpY2tldERhdGEgKSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBjcmVhdGVkIHJlcXVlc3RlciB0aWNrZXQgc3RydWN0dXJlIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgdGlja2V0IGF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgdGVzdAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsVGlja2V0RGF0YXtUaXRsZX0sCiAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57VGlja2V0fS0+e1RpdGxlfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBUaWNrZXQtPlRpdGxlIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iLAoKICAgICAgICApOwoKICAgICAgICAjIGV4dGVybmFsIGN1c3RvbWVycyBvbmx5IHNldCBpdCdzIHZhbHVlIGluIGFydGljbGUgKGlmIG5vIEZyb20gaXMgZGVmaW5lZCksIHRpY2tldAogICAgICAgICMgaXMgY3JlYXRlZCB3aXRoIGFuIGVtcHR5IGN1c3RvbWVyCiAgICAgICAgaWYgKCAkVGVzdC0+e0V4dGVybmFsQ3VzdG9tZXJ9ICkgewogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkTG9jYWxUaWNrZXREYXRhe0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBUaWNrZXQtPkN1c3RvbWVyVXNlciBpcyBlbXB0eS4iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJExvY2FsVGlja2V0RGF0YXtDdXN0b21lclVzZXJJRH0sCiAgICAgICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e1RpY2tldH0tPntDdXN0b21lclVzZXJ9LAogICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBUaWNrZXQtPkN1c3RvbWVyVXNlciBtYXRjaCB0ZXN0IGRlZmluaXRpb24uIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhRdWV1ZSBUeXBlIFNlcnZpY2UgU0xBIFN0YXRlIFByaW9yaXR5IE93bmVyIFJlc3BvbnNpYmxlKSkgewogICAgICAgICAgICBpZiAoICRUZXN0LT57UmVxdWVzdERhdGF9LT57VGlja2V0fS0+eyAkQXR0cmlidXRlIC4gJ0lEJyB9ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRMb2NhbFRpY2tldERhdGF7ICRBdHRyaWJ1dGUgLiAnSUQnIH0sCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntUaWNrZXR9LT57ICRBdHRyaWJ1dGUgLiAnSUQnIH0sCiAgICAgICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBUaWNrZXQtPiRBdHRyaWJ1dGUiIC4gJ0lEJyAuICIgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRMb2NhbFRpY2tldERhdGF7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntUaWNrZXR9LT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBUaWNrZXQtPiRBdHRyaWJ1dGUgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBsb2NhbCBhcnRpY2xlIGluZm9ybWF0aW9uCiAgICAgICAgbXkgJUxvY2FsQXJ0aWNsZURhdGEgPSAkVGlja2V0T2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICBBcnRpY2xlSUQgICAgID0+ICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgcmVxdWVzdGVyIGFydGljbGUgaW5mb3JtYXRpb24KICAgICAgICBteSAlUmVxdWVzdGVyQXJ0aWNsZURhdGEgPSAkVGlja2V0T2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICBBcnRpY2xlSUQgICAgID0+ICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhTdWJqZWN0IEJvZHkgQ29udGVudFR5cGUgTWltZVR5cGUgQ2hhcnNldCBGcm9tKSkgewogICAgICAgICAgICBpZiAoICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXJ0aWNsZX0tPnskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkTG9jYWxBcnRpY2xlRGF0YXskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0FydGljbGV9LT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBBcnRpY2xlLT4kQXR0cmlidXRlIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KEFydGljbGVUeXBlIFNlbmRlclR5cGUpKSB7CiAgICAgICAgICAgIGlmICggJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntBcnRpY2xlfS0+eyAkQXR0cmlidXRlIC4gJ0lEJyB9ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRMb2NhbEFydGljbGVEYXRheyAkQXR0cmlidXRlIC4gJ0lEJyB9LAogICAgICAgICAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXJ0aWNsZX0tPnsgJEF0dHJpYnV0ZSAuICdJRCcgfSwKICAgICAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIGxvY2FsIEFydGljbGUtPiRBdHRyaWJ1dGUiIC4gJ0lEJyAuICIgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRMb2NhbEFydGljbGVEYXRheyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXJ0aWNsZX0tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIGxvY2FsIEFydGljbGUtPiRBdHRyaWJ1dGUgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGR5bmFtaWMgZmllbGRzCiAgICAgICAgbXkgQFJlcXVlc3RlZER5bmFtaWNGaWVsZHM7CiAgICAgICAgaWYgKCByZWYgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntEeW5hbWljRmllbGR9IGVxICdIQVNIJyApIHsKICAgICAgICAgICAgcHVzaCBAUmVxdWVzdGVkRHluYW1pY0ZpZWxkcywgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntEeW5hbWljRmllbGR9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgQFJlcXVlc3RlZER5bmFtaWNGaWVsZHMgPSBAeyAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0R5bmFtaWNGaWVsZH0gfTsKICAgICAgICB9CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGQgKEBSZXF1ZXN0ZWREeW5hbWljRmllbGRzKSB7CiAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgICRMb2NhbFRpY2tldERhdGF7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGQtPntOYW1lfSB9IC8vICcnLAogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZC0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gbG9jYWwgVGlja2V0LT5EeW5hbWljRmllbGRfIgogICAgICAgICAgICAgICAgICAgIC4gJER5bmFtaWNGaWVsZC0+e05hbWV9CiAgICAgICAgICAgICAgICAgICAgLiAiIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBhdHRhY2htZW50cwogICAgICAgIG15ICVBdHRhY2htZW50SW5kZXggPSAkVGlja2V0T2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgICAgICAgICA9PiAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIFN0cmlwUGxhaW5Cb2R5QXNBdHRhY2htZW50ID0+IDMsCiAgICAgICAgICAgIEFydGljbGUgICAgICAgICAgICAgICAgICAgID0+IFwlTG9jYWxBcnRpY2xlRGF0YSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSBAQXR0YWNobWVudHM7CiAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICBmb3IgbXkgJEZpbGVJRCAoIHNvcnQga2V5cyAlQXR0YWNobWVudEluZGV4ICkgewogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRGaWxlSUQ7CiAgICAgICAgICAgIG15ICVBdHRhY2htZW50ID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJExvY2FsUmVzdWx0LT57RGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgRmlsZUlEICAgID0+ICRGaWxlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoIFwlQXR0YWNobWVudCApOwoKICAgICAgICAgICAgIyBjb252ZXJ0IGNvbnRlbnQgdG8gYmFzZTY0CiAgICAgICAgICAgICRBdHRhY2htZW50e0NvbnRlbnR9ID0gZW5jb2RlX2Jhc2U2NCggJEF0dGFjaG1lbnR7Q29udGVudH0sICcnICk7CgogICAgICAgICAgICAjIGRlbGV0ZSBub3QgbmVlZGVkIGF0dHJpYnV0ZXMKICAgICAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KENvbnRlbnRBbHRlcm5hdGl2ZSBDb250ZW50SUQgRmlsZXNpemUgRmlsZXNpemVSYXcpKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgJEF0dGFjaG1lbnR7JEF0dHJpYnV0ZX07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHVzaCBAQXR0YWNobWVudHMsIHslQXR0YWNobWVudH07CiAgICAgICAgfQoKICAgICAgICBteSBAUmVxdWVzdGVkQXR0YWNobWVudHM7CiAgICAgICAgaWYgKCByZWYgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntBdHRhY2htZW50fSBlcSAnSEFTSCcgKSB7CiAgICAgICAgICAgIHB1c2ggQFJlcXVlc3RlZEF0dGFjaG1lbnRzLCAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0F0dGFjaG1lbnR9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgQFJlcXVlc3RlZEF0dGFjaG1lbnRzID0gQHsgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntBdHRhY2htZW50fSB9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICBcQEF0dGFjaG1lbnRzLAogICAgICAgICAgICBcQFJlcXVlc3RlZEF0dGFjaG1lbnRzLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIGxvY2FsIFRpY2tldC0+QXR0YWNobWVudCBtYXRjaCB0ZXN0IGRlZmluaXRpb24uIiwKICAgICAgICApOwoKICAgICAgICAjIHJlbW92ZSBhdHRyaWJ1dGVzIHRoYXQgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gbG9jYWwgYW5kIHJlcXVlc3RlciByZXNwb25zZXMKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoCiAgICAgICAgICAgIHF3KFRpY2tldElEIFRpY2tldE51bWJlciBDcmVhdGVkIENoYW5nZWQgQWdlIENyZWF0ZVRpbWVVbml4IFVubG9ja1RpbWVvdXQpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIGRlbGV0ZSAkTG9jYWxUaWNrZXREYXRheyRBdHRyaWJ1dGV9OwogICAgICAgICAgICBkZWxldGUgJFJlcXVlc3RlclRpY2tldERhdGF7JEF0dHJpYnV0ZX07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgIFwlTG9jYWxUaWNrZXREYXRhLAogICAgICAgICAgICBcJVJlcXVlc3RlclRpY2tldERhdGEsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgdGlja2V0IHJlc3VsdCBtYXRjaGVkIHdpdGggcmVtb3RlIHJlc3VsdC4iLAogICAgICAgICk7CgogICAgICAgICMgcmVtb3ZlIGF0dHJpYnV0ZXMgdGhhdCBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSBsb2NhbCBhbmQgcmVxdWVzdGVyIHJlc3BvbnNlcwogICAgICAgIGZvciBteSAkQXR0cmlidXRlICgKICAgICAgICAgICAgcXcoIEFnZSBBZ2VUaW1lVW5peCBBcnRpY2xlSUQgVGlja2V0SUQgQ3JlYXRlZCBDaGFuZ2VkIEluY29taW5nVGltZSBUaWNrZXROdW1iZXIKICAgICAgICAgICAgQ3JlYXRlVGltZVVuaXgKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBkZWxldGUgJExvY2FsQXJ0aWNsZURhdGF7JEF0dHJpYnV0ZX07CiAgICAgICAgICAgIGRlbGV0ZSAkUmVxdWVzdGVyQXJ0aWNsZURhdGF7JEF0dHJpYnV0ZX07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgIFwlTG9jYWxBcnRpY2xlRGF0YSwKICAgICAgICAgICAgXCVSZXF1ZXN0ZXJBcnRpY2xlRGF0YSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCBhcnRpY2xlIHJlc3VsdCBtYXRjaGVkIHdpdGggcmVtb3RlIHJlc3VsdC4iLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRoZSB0aWNrZXRzCiAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntUaWNrZXRJRH0KICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgQWxsb3cgc29tZSB0aW1lIGZvciBhbGwgaGlzdG9yeSBlbnRyaWVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHRpY2tldCBiZWZvcmUgZGVsZXRpbmcgaXQsCiAgICAgICAgICAgICMgICBvdGhlcndpc2UgVGlja2V0RGVsZXRlIGNvdWxkIGZhaWwuCiAgICAgICAgICAgIHNsZWVwIDE7CgogICAgICAgICAgICBteSAkVGlja2V0RGVsZXRlID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2FuaXR5IGNoZWNrCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFRpY2tldERlbGV0ZSwKICAgICAgICAgICAgICAgICJUaWNrZXREZWxldGUoKSBzdWNjZXNzZnVsIGZvciBUaWNrZXQgSUQgJFRpY2tldElEIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyB0ZXN0cyBzdXBwb3NlZCB0byBmYWlsCiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e1RpY2tldElEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgVGlja2V0SUQgd2l0aCBmYWxzZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBUaWNrZXROdW1iZXIgd2l0aCBmYWxzZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBBcnRpY2xlSUQgd2l0aCBmYWxzZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yQ29kZX0sCiAgICAgICAgICAgICRUZXN0LT57RXhwZWN0ZWREYXRhfS0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JDb2RlfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgRXJyb3JDb2RlIG1hdGNoZWQgd2l0aCBleHBlY3RlZCBsb2NhbCBjYWxsIHJlc3VsdC4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgRXJyb3JNZXNzYWdlIHdpdGggdHJ1ZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzTm90KAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvck1lc3NhZ2UgaXMgbm90IGVtcHR5LiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JDb2RlfQogICAgICAgICAgICAgICAgLiAnOiAnCiAgICAgICAgICAgICAgICAuICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgRXJyb3JNZXNzYWdlIChvdXRzaWRlIERhdGEgaGFzaCkgbWF0Y2hlZCB3aXRoIGNvbmNhdGVuYXRpb24iCiAgICAgICAgICAgICAgICAuICIgb2YgRXJyb3JDb2RlIGFuZCBFcnJvck1lc3NhZ2Ugd2l0aGluIERhdGEgaGFzaC4iLAogICAgICAgICk7CgogICAgICAgICMgcmVtb3ZlIEVycm9yTWVzc2FnZSBwYXJhbWV0ZXIgZnJvbSBkaXJlY3QgY2FsbAogICAgICAgICMgcmVzdWx0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBTT0FQIGNhbGwgcmVzdWx0CiAgICAgICAgaWYgKCAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9ICkgewogICAgICAgICAgICBkZWxldGUgJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfTsKICAgICAgICB9CgogICAgICAgICMgc2FuaXR5IGNoZWNrCiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvck1lc3NhZ2UgKG91dHNpZGUgRGF0YSBoYXNoKSBnb3QgcmVtb3ZlZCB0byBjb21wYXJlIgogICAgICAgICAgICAgICAgLiAiIGxvY2FsIGFuZCByZW1vdGUgdGVzdHMuIiwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdCwKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgbWF0Y2hlZCB3aXRoIHJlbW90ZSByZXN1bHQuIiwKICAgICAgICApOwogICAgfQp9CgojIGRlbGV0ZSB3ZWJzZXJ2aWNlCm15ICRXZWJzZXJ2aWNlRGVsZXRlID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VEZWxldGUoCiAgICBJRCAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIFVzZXJJRCA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRXZWJzZXJ2aWNlRGVsZXRlLAogICAgIkRlbGV0ZWQgV2Vic2VydmljZSAkV2Vic2VydmljZUlEIiwKKTsKCiMgZ2V0IERCIG9iamVjdApteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKbXkgJFN1Y2Nlc3M7CgojIGRlbGV0ZSBxdWV1ZXMKZm9yIG15ICRRdWV1ZURhdGEgKEBRdWV1ZXMpIHsKICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHF1ZXVlIFdIRVJFIGlkID0gJFF1ZXVlRGF0YS0+e1F1ZXVlSUR9IiwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiUXVldWUgd2l0aCBJRCAkUXVldWVEYXRhLT57UXVldWVJRH0gaXMgZGVsZXRlZCEiLAogICAgKTsKfQoKIyBkZWxldGUgZ3JvdXAKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSBncm91cHMgV0hFUkUgaWQgPSAkR3JvdXBJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiR3JvdXAgd2l0aCBJRCAkR3JvdXBJRCBpcyBkZWxldGVkISIsCik7CgojIGRlbGV0ZSB0eXBlCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gdGlja2V0X3R5cGUgV0hFUkUgaWQgPSAkVHlwZUlEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJUeXBlIHdpdGggSUQgJFR5cGVJRCBpcyBkZWxldGVkISIsCik7CgojIGRlbGV0ZSBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgYW5kIHNlcnZpY2UKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSUQiLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIlNlcnZpY2UgdXNlciByZWZlcmVuY2VkIHRvIHNlcnZpY2UgSUQgJFNlcnZpY2VJRCBpcyBkZWxldGVkISIsCik7CgokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2Vfc2xhIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIE9SIHNsYV9pZCA9ICRTTEFJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiU2VydmljZSBTTEEgcmVmZXJlbmNlZCB0byBzZXJ2aWNlIElEICRTZXJ2aWNlSUQgaXMgZGVsZXRlZCEiLAopOwoKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gJFNlcnZpY2VJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiU2VydmljZSB3aXRoIElEICRTZXJ2aWNlSUQgaXMgZGVsZXRlZCEiLAopOwoKIyBkZWxldGUgU0xBCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2xhIFdIRVJFIGlkID0gJFNMQUlEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJTTEEgd2l0aCBJRCAkU0xBSUQgaXMgZGVsZXRlZCEiLAopOwoKIyBkZWxldGUgc3RhdGUKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSB0aWNrZXRfc3RhdGUgV0hFUkUgaWQgPSAkU3RhdGVJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiU3RhdGUgd2l0aCBJRCAkU3RhdGVJRCBpcyBkZWxldGVkISIsCik7CgojIGRlbGV0ZSBwcmlvcml0eQokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHRpY2tldF9wcmlvcml0eSBXSEVSRSBpZCA9ICRQcmlvcml0eUlEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJQcmlvcml0eSB3aXRoIElEICRQcmlvcml0eUlEIGlzIGRlbGV0ZWQhIiwKKTsKCiMgZGVsZXRlIGR5bmFtaWMgZmllbGRzCm15ICREZWxldGVGaWVsZExpc3QgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0KAogICAgUmVzdWx0VHlwZSA9PiAnSEFTSCcsCiAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAopOwoKRFlOQU1JQ0ZJRUxEOgpmb3IgbXkgJER5bmFtaWNGaWVsZElEICggc29ydCBrZXlzICV7JERlbGV0ZUZpZWxkTGlzdH0gKSB7CgogICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRJRDsKICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRGVsZXRlRmllbGRMaXN0LT57JER5bmFtaWNGaWVsZElEfTsKCiAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkRGVsZXRlRmllbGRMaXN0LT57JER5bmFtaWNGaWVsZElEfSAhfiBteyBeVW5pdHRlc3QgfXhtczsKCiAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZERlbGV0ZSgKICAgICAgICBJRCAgICAgPT4gJER5bmFtaWNGaWVsZElELAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiRHluYW1pY0ZpZWxkRGVsZXRlKCkgZm9yICREZWxldGVGaWVsZExpc3QtPnskRHluYW1pY0ZpZWxkSUR9IHdpdGggdHJ1ZSIsCiAgICApOwp9CgojIGNsZWFudXAgY2FjaGUKJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L0dlbmVyaWNJbnRlcmZhY2UvT3BlcmF0aW9uL1RpY2tldC9UaWNrZXRTZWFyY2gudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRXhwbGljaXRQYWNrYWdlKQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgTUlNRTo6QmFzZTY0OwoKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXI7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpUaWNrZXRTZWFyY2g7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6U2Vzc2lvbjo6U2Vzc2lvbkNyZWF0ZTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCiMgZ2V0IGNvbmZpZyBvYmplY3QKbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgojIGdldCBoZWxwZXIgb2JqZWN0CiMgc2tpcCBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uCiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewoKICAgICAgICBTa2lwU1NMVmVyaWZ5ID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgZ2V0IGEgcmFuZG9tIG51bWJlcgpteSAkUmFuZG9tSUQgPSAkSGVscGVyLT5HZXRSYW5kb21OdW1iZXIoKTsKCiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgIFZhbHVlID0+IDAsCik7CgojIGdldCB0aW1lIG9iamVjdApteSAkVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyk7CgojIGdldCB0aGUgc3RhcnQgdGltZSBmb3IgdGhlIHRlc3QKbXkgJFN0YXJ0VGltZSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7CgojIGdldCB1c2VyIG9iamVjdApteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgojIGNyZWF0ZSBhIG5ldyB1c2VyIGZvciBjdXJyZW50IHRlc3QKbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyQWRkKAogICAgVXNlckZpcnN0bmFtZSA9PiAnVGVzdCcsCiAgICBVc2VyTGFzdG5hbWUgID0+ICdVc2VyJywKICAgIFVzZXJMb2dpbiAgICAgPT4gJ1Rlc3RVc2VyJyAuICRSYW5kb21JRCwKICAgIFVzZXJQdyAgICAgICAgPT4gJ3NvbWUtcGFzcycsCiAgICBVc2VyRW1haWwgICAgID0+ICd0ZXN0JyAuICRSYW5kb21JRCAuICdlbWFpbEBleGFtcGxlLmNvbScsCiAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICBDaGFuZ2VVc2VySUQgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRVc2VySUQsCiAgICAnVXNlciBBZGQgKCknLAopOwoKIyBjcmVhdGUgdHlwZSBvYmplY3QKbXkgJFR5cGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpOwoKIyBjcmVhdGUgbmV3IHR5cGUKbXkgJFR5cGVJRCA9ICRUeXBlT2JqZWN0LT5UeXBlQWRkKAogICAgTmFtZSAgICA9PiAnVGVzdFR5cGUnIC4gJFJhbmRvbUlELAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVHlwZUlELAogICAgIlR5cGVBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIHR5cGUiLAopOwoKbXkgJVR5cGVEYXRhID0gJFR5cGVPYmplY3QtPlR5cGVHZXQoCiAgICBJRCA9PiAkVHlwZUlELAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVUeXBlRGF0YSApLAogICAgIlF1ZXVlR2V0KCkgLSBmb3IgdGVzdGluZyB0eXBlIiwKKTsKCiMgZ2V0IHNlcnZpY2Ugb2JqZWN0Cm15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCiMgY3JlYXRlIG5ldyBzZXJ2aWNlCm15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RTZXJ2aWNlJyAuICRSYW5kb21JRCwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTZXJ2aWNlSUQsCiAgICAiU2VydmljZUFkZCgpIC0gY3JlYXRlIHRlc3Rpbmcgc2VydmljZSIsCik7CgpteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgVXNlcklEICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVNlcnZpY2VEYXRhICksCiAgICAiU2VydmljZUdldCgpIC0gZm9yIHRlc3Rpbmcgc2VydmljZSIsCik7CgojIGNyZWF0ZSBkeW5hbWljIGZpZWxkIHByb3BlcnRpZXMKbXkgQER5bmFtaWNGaWVsZFByb3BlcnRpZXMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgICA9PiAiREZUMSRSYW5kb21JRCIsCiAgICAgICAgRmllbGRPcmRlciA9PiA5OTkxLAogICAgICAgIEZpZWxkVHlwZSAgPT4gJ1RleHQnLAogICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICBEZWZhdWx0VmFsdWUgPT4gJ0RlZmF1bHQnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gIkRGVDIkUmFuZG9tSUQiLAogICAgICAgIEZpZWxkT3JkZXIgPT4gOTk5MiwKICAgICAgICBGaWVsZFR5cGUgID0+ICdEcm9wZG93bicsCiAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgIERlZmF1bHRWYWx1ZSAgID0+ICdEZWZhdWx0JywKICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgPT4gewogICAgICAgICAgICAgICAgdGlja2V0MV9maWVsZDIgPT4gJ3RpY2tldDFfZmllbGQyJywKICAgICAgICAgICAgICAgIHRpY2tldDJfZmllbGQyID0+ICd0aWNrZXQyX2ZpZWxkMicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICA9PiAiREZUMyRSYW5kb21JRCIsCiAgICAgICAgRmllbGRPcmRlciA9PiA5OTkzLAogICAgICAgIEZpZWxkVHlwZSAgPT4gJ0RhdGVUaW1lJywgICAgICAgICMgbWFuZGF0b3J5LCBzZWxlY3RzIHRoZSBERiBiYWNrZW5kIHRvIHVzZSBmb3IgdGhpcyBmaWVsZAogICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICBEZWZhdWx0VmFsdWUgPT4gJ0RlZmF1bHQnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gIkRGVDQkUmFuZG9tSUQiLAogICAgICAgIEZpZWxkT3JkZXIgPT4gOTk5MywKICAgICAgICBGaWVsZFR5cGUgID0+ICdDaGVja2JveCcsICAgICAgICAjIG1hbmRhdG9yeSwgc2VsZWN0cyB0aGUgREYgYmFja2VuZCB0byB1c2UgZm9yIHRoaXMgZmllbGQKICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgRGVmYXVsdFZhbHVlID0+ICdEZWZhdWx0JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgID0+ICJERlQ1JFJhbmRvbUlEIiwKICAgICAgICBGaWVsZE9yZGVyID0+IDk5OTUsCiAgICAgICAgRmllbGRUeXBlICA9PiAnTXVsdGlzZWxlY3QnLCAgICAgIyBtYW5kYXRvcnksIHNlbGVjdHMgdGhlIERGIGJhY2tlbmQgdG8gdXNlIGZvciB0aGlzIGZpZWxkCiAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgIERlZmF1bHRWYWx1ZSAgID0+IFsgJ3RpY2tldDJfZmllbGQ1JywgJ3RpY2tldDRfZmllbGQ1JyBdLAogICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyA9PiB7CiAgICAgICAgICAgICAgICB0aWNrZXQxX2ZpZWxkNSA9PiAndGlja2V0MV9maWVsZDUxJywKICAgICAgICAgICAgICAgIHRpY2tldDJfZmllbGQ1ID0+ICd0aWNrZXQyX2ZpZWxkNTInLAogICAgICAgICAgICAgICAgdGlja2V0M19maWVsZDUgPT4gJ3RpY2tldDJfZmllbGQ1MycsCiAgICAgICAgICAgICAgICB0aWNrZXQ0X2ZpZWxkNSA9PiAndGlja2V0Ml9maWVsZDU0JywKICAgICAgICAgICAgICAgIHRpY2tldDVfZmllbGQ1ID0+ICd0aWNrZXQyX2ZpZWxkNTUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9Cik7CgojIGNyZWF0ZSBkeW5hbWljIGZpZWxkcwpteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwpteSBAVGVzdEZpZWxkQ29uZmlnOwoKZm9yIG15ICREeW5hbWljRmllbGRQcm9wZXJ0eSAoQER5bmFtaWNGaWVsZFByb3BlcnRpZXMpIHsKICAgIG15ICRGaWVsZElEID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkQWRkKAogICAgICAgICV7JER5bmFtaWNGaWVsZFByb3BlcnR5fSwKICAgICAgICBMYWJlbCAgICAgID0+ICdEZXNjcmlwdGlvbicsCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgIFJlb3JkZXIgICAgPT4gMCwKICAgICk7CgogICAgcHVzaCBAVGVzdEZpZWxkQ29uZmlnLCAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgSUQgPT4gJEZpZWxkSUQsCiAgICApOwp9CgojIGNyZWF0ZSB0aWNrZXQgb2JqZWN0Cm15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgojIGNyZWF0ZSAzIHRpY2tldHMKCiN0aWNrZXQgaWQgY29udGFpbmVyCm15IEBUaWNrZXRJRHM7CgojIGNyZWF0ZSB0aWNrZXQgMQpteSAkVGlja2V0SUQxID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgT25lIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVySUQgICA9PiAnMTIzNDY1JyAuICRSYW5kb21JRCwKICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJPbmVAZXhhbXBsZS5jb20nLAogICAgU2VydmljZSAgICAgID0+ICdUZXN0U2VydmljZScgLiAkUmFuZG9tSUQsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQxLAogICAgIlRpY2tldENyZWF0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBPbmUgSUQgJFRpY2tldElEMSIsCik7CgpteSAkVGlja2V0TnVtYmVyMSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldE51bWJlckxvb2t1cCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXROdW1iZXIxLAogICAgIlRpY2tldE51bWJlckxvb2t1cCgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBPbmUgSUQgJFRpY2tldElEMSIsCik7CgojIHVwZGF0ZSBlc2NhbGF0aW9uIHRpbWVzIGRpcmVjdGx5IGluIHRoZSBEQgpteSAkRXNjYWxhdGlvblRpbWUgPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpICsgMTIwOwpyZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgIFNRTCA9PiAnCiAgICAgICAgVVBEQVRFIHRpY2tldAogICAgICAgIFNFVCBlc2NhbGF0aW9uX3RpbWUgPSA/LCBlc2NhbGF0aW9uX3Jlc3BvbnNlX3RpbWUgPSA/LCBlc2NhbGF0aW9uX3VwZGF0ZV90aW1lID0gPywKICAgICAgICAgICAgZXNjYWxhdGlvbl9zb2x1dGlvbl90aW1lID0gPywgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPwogICAgICAgIFdIRVJFIGlkID0gPycsCiAgICBCaW5kID0+IFsKICAgICAgICBcJEVzY2FsYXRpb25UaW1lLAogICAgICAgIFwkRXNjYWxhdGlvblRpbWUsCiAgICAgICAgXCRFc2NhbGF0aW9uVGltZSwKICAgICAgICBcJEVzY2FsYXRpb25UaW1lLAogICAgICAgIFwnMScsCiAgICAgICAgXCRUaWNrZXRJRDEsCiAgICBdLAopOwoKIyBjcmVhdGUgYmFja2VuZCBvYmplY3QgYW5kIGRlbGVnYXRlcwpteSAkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKJFNlbGYtPklzKAogICAgcmVmICRCYWNrZW5kT2JqZWN0LAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0JhY2tlbmQgb2JqZWN0IHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseScsCik7CgokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFRlc3RGaWVsZENvbmZpZ1swXSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQxLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICd0aWNrZXQxX2ZpZWxkMScsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkVGVzdEZpZWxkQ29uZmlnWzFdLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDEsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJ3RpY2tldDFfZmllbGQyJywKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRUZXN0RmllbGRDb25maWdbMl0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAnMjAwMS0wMS0wMSAwMTowMTowMScsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkVGVzdEZpZWxkQ29uZmlnWzNdLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDEsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJzAnLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFRlc3RGaWVsZENvbmZpZ1s0XSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQxLAogICAgVmFsdWUgICAgICAgICAgICAgID0+IFsgJ3RpY2tldDFfZmllbGQ1MScsICd0aWNrZXQxX2ZpZWxkNTInLCAndGlja2V0MV9maWVsZDUzJyBdLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgojIGdldCB0aGUgVGlja2V0IGVudHJ5CiMgd2l0aG91dCBkeW5hbWljIGZpZWxkcwpteSAlVGlja2V0RW50cnlPbmUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRDEsCiAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldEVudHJ5T25lICksCiAgICAiVGlja2V0R2V0KCkgc3VjY2Vzc2Z1bCBmb3IgTG9jYWwgVGlja2V0R2V0IE9uZSBJRCAkVGlja2V0SUQxIiwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVUaWNrZXRFbnRyeU9uZSApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeU9uZXskS2V5fSApIHsKICAgICAgICAkVGlja2V0RW50cnlPbmV7JEtleX0gPSAnJzsKICAgIH0KICAgIGlmICggJEtleSBlcSAnQWdlJyApIHsKICAgICAgICBkZWxldGUgJFRpY2tldEVudHJ5T25leyRLZXl9OwogICAgfQp9CgojIGdldCB0aGUgVGlja2V0IGVudHJ5CiMgd2l0aCBkeW5hbWljIGZpZWxkcwpteSAlVGlja2V0RW50cnlPbmVERiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElEMSwKICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0RW50cnlPbmVERiApLAogICAgIlRpY2tldEdldCgpIHN1Y2Nlc3NmdWwgd2l0aCBERiBmb3IgTG9jYWwgVGlja2V0R2V0IE9uZSBJRCAkVGlja2V0SUQxIiwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVUaWNrZXRFbnRyeU9uZURGICkgewogICAgaWYgKCAhJFRpY2tldEVudHJ5T25lREZ7JEtleX0gKSB7CiAgICAgICAgJFRpY2tldEVudHJ5T25lREZ7JEtleX0gPSAnJzsKICAgIH0KICAgIGlmICggJEtleSBlcSAnQWdlJyApIHsKICAgICAgICBkZWxldGUgJFRpY2tldEVudHJ5T25lREZ7JEtleX07CiAgICB9Cn0KCiMgYWRkIHRpY2tldCBpZApwdXNoIEBUaWNrZXRJRHMsICRUaWNrZXRJRDE7CgojIGNyZWF0ZSB0aWNrZXQgMgpteSAkVGlja2V0SUQyID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVHdvIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVySUQgICA9PiAnMTIzNDY1JyAuICRSYW5kb21JRCwKICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJUd28nIC4gJFJhbmRvbUlEIC4gJ0BleGFtcGxlLmNvbScsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQyLAogICAgIlRpY2tldENyZWF0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBUd28gSUQgJFRpY2tldElEMiIsCik7CgpteSAkVGlja2V0TnVtYmVyMiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldE51bWJlckxvb2t1cCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXROdW1iZXIyLAogICAgIlRpY2tldE51bWJlckxvb2t1cCgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBPbmUgSUQgJFRpY2tldElEMiIsCik7CgojIHNldCBkeW5hbWljIGZpZWxkIHZhbHVlcwokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFRlc3RGaWVsZENvbmZpZ1swXSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQyLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICd0aWNrZXQyX2ZpZWxkMScsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkVGVzdEZpZWxkQ29uZmlnWzFdLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDIsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJ3RpY2tldDJfZmllbGQyJywKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRUZXN0RmllbGRDb25maWdbMl0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMiwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAnMjAxMS0xMS0xMSAxMToxMToxMScsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkVGVzdEZpZWxkQ29uZmlnWzNdLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDIsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJzEnLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFRlc3RGaWVsZENvbmZpZ1s0XSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQyLAogICAgVmFsdWUgICAgICAgICAgICAgID0+IFsKICAgICAgICAndGlja2V0MV9maWVsZDUnLAogICAgICAgICd0aWNrZXQyX2ZpZWxkNScsCiAgICAgICAgJ3RpY2tldDRfZmllbGQ1JywKICAgIF0sCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgZ2V0IHRoZSBUaWNrZXQgZW50cnkKIyB3aXRob3V0IERGCm15ICVUaWNrZXRFbnRyeVR3byA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElEMiwKICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0RW50cnlUd28gKSwKICAgICJUaWNrZXRHZXQoKSBzdWNjZXNzZnVsIGZvciBMb2NhbCBUaWNrZXRHZXQgVHdvIElEICRUaWNrZXRJRDIiLAopOwoKZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJVRpY2tldEVudHJ5VHdvICkgewogICAgaWYgKCAhJFRpY2tldEVudHJ5VHdveyRLZXl9ICkgewogICAgICAgICRUaWNrZXRFbnRyeVR3b3skS2V5fSA9ICcnOwogICAgfQogICAgaWYgKCAkS2V5IGVxICdBZ2UnICkgewogICAgICAgIGRlbGV0ZSAkVGlja2V0RW50cnlUd297JEtleX07CiAgICB9Cn0KCiMgZ2V0IHRoZSBUaWNrZXQgZW50cnkKIyB3aXRoIERGCm15ICVUaWNrZXRFbnRyeVR3b0RGID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQyLAogICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXRFbnRyeVR3b0RGICksCiAgICAiVGlja2V0R2V0KCkgc3VjY2Vzc2Z1bCBmb3IgTG9jYWwgVGlja2V0R2V0IFR3byBJRCAkVGlja2V0SUQyIiwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVUaWNrZXRFbnRyeVR3b0RGICkgewogICAgaWYgKCAhJFRpY2tldEVudHJ5VHdvREZ7JEtleX0gKSB7CiAgICAgICAgJFRpY2tldEVudHJ5VHdvREZ7JEtleX0gPSAnJzsKICAgIH0KICAgIGlmICggJEtleSBlcSAnQWdlJyApIHsKICAgICAgICBkZWxldGUgJFRpY2tldEVudHJ5VHdvREZ7JEtleX07CiAgICB9Cn0KCiMgYWRkIHRpY2tldCBpZApwdXNoIEBUaWNrZXRJRHMsICRUaWNrZXRJRDI7CgojIGNyZWF0ZSB0aWNrZXQgMwpteSAkVGlja2V0SUQzID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGhyZWUgVGl0bGUnLAogICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICcxIHZlcnkgbG93JywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVySUQgICA9PiAnMTIzNDY1JyAuICRSYW5kb21JRCwKICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJUaHJlZUBleGFtcGxlLmNvbScsCiAgICBUeXBlICAgICAgICAgPT4gJ1Rlc3RUeXBlJyAuICRSYW5kb21JRCwKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRDMsCiAgICAiVGlja2V0Q3JlYXRlKCkgc3VjY2Vzc2Z1bCBmb3IgVGlja2V0IFRocmVlIElEICRUaWNrZXRJRDMiLAopOwoKIyBnZXQgdGhlIFRpY2tldCBlbnRyeQpteSAlVGlja2V0RW50cnlUaHJlZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElEMywKICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0RW50cnlUaHJlZSApLAogICAgIlRpY2tldEdldCgpIHN1Y2Nlc3NmdWwgZm9yIExvY2FsIFRpY2tldEdldCBUaHJlZSBJRCAkVGlja2V0SUQzIiwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVUaWNrZXRFbnRyeVRocmVlICkgewogICAgaWYgKCAhJFRpY2tldEVudHJ5VGhyZWV7JEtleX0gKSB7CiAgICAgICAgJFRpY2tldEVudHJ5VGhyZWV7JEtleX0gPSAnJzsKICAgIH0KICAgIGlmICggJEtleSBlcSAnQWdlJyApIHsKICAgICAgICBkZWxldGUgJFRpY2tldEVudHJ5VGhyZWV7JEtleX07CiAgICB9Cn0KCiMgYWRkIHRpY2tldCBpZApwdXNoIEBUaWNrZXRJRHMsICRUaWNrZXRJRDM7CgojIGNyZWF0ZSB0aWNrZXQgNApteSAkVGlja2V0SUQ0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgRm91ciBUaXRsZSDDpMO2w7zDn8OEw5bDnOKCrNC40YEnLAogICAgUXVldWUgICAgICAgID0+ICdKdW5rJywKICAgIExvY2sgICAgICAgICA9PiAnbG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVySUQgICA9PiAnNjU0MzIxJyAuICRSYW5kb21JRCwKICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJGb3VyQGV4YW1wbGUuY29tJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRDQsCiAgICAiVGlja2V0Q3JlYXRlKCkgc3VjY2Vzc2Z1bCBmb3IgVGlja2V0IEZvdXIgSUQgJFRpY2tldElENCIsCik7CgojIGZpcnN0IGFydGljbGUKbXkgJEFydGljbGVJRDQxID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUNyZWF0ZSgKICAgIFRpY2tldElEICAgICAgID0+ICRUaWNrZXRJRDQsCiAgICBBcnRpY2xlVHlwZSAgICA9PiAncGhvbmUnLAogICAgU2VuZGVyVHlwZSAgICAgPT4gJ2FnZW50JywKICAgIEZyb20gICAgICAgICAgID0+ICdBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgPGVtYWlsQGV4YW1wbGUuY29tPicsCiAgICBUbyAgICAgICAgICAgICA9PiAnQ3VzdG9tZXIgQSA8Y3VzdG9tZXItYUBleGFtcGxlLmNvbT4nLAogICAgQ2MgICAgICAgICAgICAgPT4gJ0N1c3RvbWVyIEIgPGN1c3RvbWVyLWJAZXhhbXBsZS5jb20+JywKICAgIFJlcGx5VG8gICAgICAgID0+ICdDdXN0b21lciBCIDxjdXN0b21lci1iQGV4YW1wbGUuY29tPicsCiAgICBTdWJqZWN0ICAgICAgICA9PiAnZmlyc3QgYXJ0aWNsZScsCiAgICBCb2R5ICAgICAgICAgICA9PiAnQSB0ZXh0IGZvciB0aGUgYm9keSwgVGl0bGUgw6TDtsO8w5/DhMOWw5zigqzQuNGBJywKICAgIENvbnRlbnRUeXBlICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTE1JywKICAgIEhpc3RvcnlUeXBlICAgID0+ICdPd25lclVwZGF0ZScsCiAgICBIaXN0b3J5Q29tbWVudCA9PiAnZmlyc3QgYXJ0aWNsZScsCiAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgTm9BZ2VudE5vdGlmeSAgPT4gMSwKKTsKCiMgc2Vjb25kIGFydGljbGUKbXkgJEFydGljbGVJRDQyID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUNyZWF0ZSgKICAgIFRpY2tldElEICAgID0+ICRUaWNrZXRJRDQsCiAgICBBcnRpY2xlVHlwZSA9PiAncGhvbmUnLAogICAgU2VuZGVyVHlwZSAgPT4gJ2FnZW50JywKICAgIEZyb20gICAgICAgID0+ICdBbm90IFJlYWwgQWdlbnQgPGVtYWlsQGV4YW1wbGUuY29tPicsCiAgICBUbyAgICAgICAgICA9PiAnQ3VzdG9tZXIgQSA8Y3VzdG9tZXItYUBleGFtcGxlLmNvbT4nLAogICAgQ2MgICAgICAgICAgPT4gJ0N1c3RvbWVyIEIgPGN1c3RvbWVyLWJAZXhhbXBsZS5jb20+JywKICAgIFJlcGx5VG8gICAgID0+ICdDdXN0b21lciBCIDxjdXN0b21lci1iQGV4YW1wbGUuY29tPicsCiAgICBTdWJqZWN0ICAgICA9PiAnc2Vjb25kIGFydGljbGUnLAogICAgQm9keSAgICAgICAgPT4gJ0EgdGV4dCBmb3IgdGhlIGJvZHksIG5vdCB0b28gbG9uZycsCiAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xNScsCgogICAgIyAgICBBdHRhY2htZW50ICAgICA9PiBcQEF0dGFjaG1lbnRzLAogICAgSGlzdG9yeVR5cGUgICAgPT4gJ093bmVyVXBkYXRlJywKICAgIEhpc3RvcnlDb21tZW50ID0+ICdzZWNvbmQgYXJ0aWNsZScsCiAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgTm9BZ2VudE5vdGlmeSAgPT4gMSwKKTsKCiMgc2F2ZSBhcnRpY2xlcyB3aXRob3V0IGF0dGFjaG1lbnRzCm15IEBBcnRpY2xlV2l0aG91dEF0dGFjaG1lbnRzID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZVdpdGhvdXRBdHRhY2htZW50cykgewoKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7JEFydGljbGV9ICkgewogICAgICAgIGlmICggISRBcnRpY2xlLT57JEtleX0gKSB7CiAgICAgICAgICAgICRBcnRpY2xlLT57JEtleX0gPSAnJzsKICAgICAgICB9CiAgICAgICAgaWYgKCAkS2V5IGVxICdBZ2UnIHx8ICRLZXkgZXEgJ0FnZVRpbWVVbml4JyApIHsKICAgICAgICAgICAgZGVsZXRlICRBcnRpY2xlLT57JEtleX07CiAgICAgICAgfQogICAgfQp9CgojIGZpbGUgY2hlY2tzCmZvciBteSAkRmlsZSAocXcoeGxzIHR4dCBkb2MgcG5nIHBkZikpIHsKICAgIG15ICRMb2NhdGlvbiA9ICRDb25maWdPYmplY3QtPkdldCgnSG9tZScpCiAgICAgICAgLiAiL3NjcmlwdHMvdGVzdC9zYW1wbGUvU3RkQXR0YWNobWVudC9TdGRBdHRhY2htZW50LVRlc3QxLiRGaWxlIjsKCiAgICBteSAkQ29udGVudFJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPkZpbGVSZWFkKAogICAgICAgIExvY2F0aW9uID0+ICRMb2NhdGlvbiwKICAgICAgICBNb2RlICAgICA9PiAnYmlubW9kZScsCiAgICAgICAgVHlwZSAgICAgPT4gJ0xvY2FsJywKICAgICk7CgogICAgbXkgJEFydGljbGVXcml0ZUF0dGFjaG1lbnQgPSAkVGlja2V0T2JqZWN0LT5BcnRpY2xlV3JpdGVBdHRhY2htZW50KAogICAgICAgIENvbnRlbnQgICAgID0+ICR7JENvbnRlbnRSZWZ9LAogICAgICAgIEZpbGVuYW1lICAgID0+ICJTdGRBdHRhY2htZW50LVRlc3QxLiRGaWxlIiwKICAgICAgICBDb250ZW50VHlwZSA9PiAkRmlsZSwKICAgICAgICBBcnRpY2xlSUQgICA9PiAkQXJ0aWNsZUlENDIsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7Cn0KCiMgZ2V0IGFydGljbGVzIGFuZCBhdHRhY2htZW50cwpteSBAQXJ0aWNsZUJveCA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQ0LAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgc3RhcnQgYXJ0aWNsZSBsb29wCkFSVElDTEU6CmZvciBteSAkQXJ0aWNsZSAoQEFydGljbGVCb3gpIHsKCiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyRBcnRpY2xlfSApIHsKICAgICAgICBpZiAoICEkQXJ0aWNsZS0+eyRLZXl9ICkgewogICAgICAgICAgICAkQXJ0aWNsZS0+eyRLZXl9ID0gJyc7CiAgICAgICAgfQogICAgICAgIGlmICggJEtleSBlcSAnQWdlJyB8fCAkS2V5IGVxICdBZ2VUaW1lVW5peCcgKSB7CiAgICAgICAgICAgIGRlbGV0ZSAkQXJ0aWNsZS0+eyRLZXl9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBhdHRhY2htZW50IGluZGV4ICh3aXRob3V0IGF0dGFjaG1lbnRzKQogICAgbXkgJUF0bUluZGV4ID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICBDb250ZW50UGF0aCAgICAgICAgICAgICAgICA9PiAkQXJ0aWNsZS0+e0NvbnRlbnRQYXRofSwKICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgICAgICAgICA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgU3RyaXBQbGFpbkJvZHlBc0F0dGFjaG1lbnQgPT4gMywKICAgICAgICBBcnRpY2xlICAgICAgICAgICAgICAgICAgICA9PiAkQXJ0aWNsZSwKICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICBuZXh0IEFSVElDTEUgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCBcJUF0bUluZGV4ICk7CgogICAgbXkgQEF0dGFjaG1lbnRzOwogICAgQVRUQUNITUVOVDoKICAgIGZvciBteSAkRmlsZUlEICggc29ydCBrZXlzICVBdG1JbmRleCApIHsKICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRGaWxlSUQ7CiAgICAgICAgbXkgJUF0dGFjaG1lbnQgPSAkVGlja2V0T2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudCgKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgRmlsZUlEICAgID0+ICRGaWxlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoIFwlQXR0YWNobWVudCApOwoKICAgICAgICAjIGNvbnZlcnQgY29udGVudCB0byBiYXNlNjQKICAgICAgICAkQXR0YWNobWVudHtDb250ZW50fSAgICAgICAgICAgID0gZW5jb2RlX2Jhc2U2NCggJEF0dGFjaG1lbnR7Q29udGVudH0gKTsKICAgICAgICAkQXR0YWNobWVudHtDb250ZW50SUR9ICAgICAgICAgID0gJyc7CiAgICAgICAgJEF0dGFjaG1lbnR7Q29udGVudEFsdGVybmF0aXZlfSA9ICcnOwogICAgICAgIHB1c2ggQEF0dGFjaG1lbnRzLCB7JUF0dGFjaG1lbnR9OwogICAgfQoKICAgICMgc2V0IEF0dGFjaG1lbnRzIGRhdGEKICAgICRBcnRpY2xlLT57QXRtc30gPSBcQEF0dGFjaG1lbnRzOwoKfSAgICAjIGZpbmlzaCBhcnRpY2xlIGxvb3AKCiMgZ2V0IHRoZSBUaWNrZXQgZW50cnkKbXkgJVRpY2tldEVudHJ5Rm91ciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElENCwKICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0RW50cnlGb3VyICksCiAgICAiVGlja2V0R2V0KCkgc3VjY2Vzc2Z1bCBmb3IgTG9jYWwgVGlja2V0R2V0IEZvdXIgSUQgJFRpY2tldElENCIsCik7Cgpmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlVGlja2V0RW50cnlGb3VyICkgewogICAgaWYgKCAhJFRpY2tldEVudHJ5Rm91cnskS2V5fSApIHsKICAgICAgICAkVGlja2V0RW50cnlGb3VyeyRLZXl9ID0gJyc7CiAgICB9CiAgICBpZiAoICRLZXkgZXEgJ0FnZScgKSB7CiAgICAgICAgZGVsZXRlICRUaWNrZXRFbnRyeUZvdXJ7JEtleX07CiAgICB9Cn0KCiMgYWRkIHRpY2tldCBpZApwdXNoIEBUaWNrZXRJRHMsICRUaWNrZXRJRDQ7CgojIHNldCB3ZWJzZXJ2aWNlIG5hbWUKbXkgJFdlYnNlcnZpY2VOYW1lID0gJy1UZXN0LScgLiAkUmFuZG9tSUQ7CgojIGNyZWF0ZSB3ZWJzZXJ2aWNlIG9iamVjdApteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CiRTZWxmLT5JcygKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScsCiAgICByZWYgJFdlYnNlcnZpY2VPYmplY3QsCiAgICAiQ3JlYXRlIHdlYnNlcnZpY2Ugb2JqZWN0IiwKKTsKCm15ICRXZWJzZXJ2aWNlSUQgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUFkZCgKICAgIE5hbWUgICA9PiAkV2Vic2VydmljZU5hbWUsCiAgICBDb25maWcgPT4gewogICAgICAgIERlYnVnZ2VyID0+IHsKICAgICAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJ2RlYnVnJywKICAgICAgICB9LAogICAgICAgIFByb3ZpZGVyID0+IHsKICAgICAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VJRCwKICAgICJBZGRlZCBXZWJzZXJ2aWNlIiwKKTsKCiMgZ2V0IHJlbW90ZSBob3N0IHdpdGggc29tZSBwcmVjYXV0aW9ucyBmb3IgY2VydGFpbiB1bml0IHRlc3Qgc3lzdGVtcwpteSAkSG9zdCA9ICRIZWxwZXItPkdldFRlc3RIVFRQSG9zdG5hbWUoKTsKCiMgcHJlcGFyZSB3ZWJzZXJ2aWNlIGNvbmZpZwpteSAkUmVtb3RlU3lzdGVtID0KICAgICRDb25maWdPYmplY3QtPkdldCgnSHR0cFR5cGUnKQogICAgLiAnOi8vJwogICAgLiAkSG9zdAogICAgLiAnLycKICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpCiAgICAuICcvbnBoLWdlbmVyaWNpbnRlcmZhY2UucGwvV2Vic2VydmljZUlELycKICAgIC4gJFdlYnNlcnZpY2VJRDsKCm15ICRXZWJzZXJ2aWNlQ29uZmlnID0gewoKICAgICMgICAgTmFtZSA9PiAnJywKICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgJ1Rlc3QgZm9yIFRpY2tldCBDb25uZWN0b3IgdXNpbmcgU09BUCB0cmFuc3BvcnQgYmFja2VuZC4nLAogICAgRGVidWdnZXIgPT4gewogICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgVGVzdE1vZGUgICAgICAgPT4gMSwKICAgIH0sCiAgICBQcm92aWRlciA9PiB7CiAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgVHlwZSAgID0+ICdIVFRQOjpTT0FQJywKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMDAwMDAwMCwKICAgICAgICAgICAgICAgIE5hbWVTcGFjZSA9PiAnaHR0cDovL290cnMub3JnL1NvYXBUZXN0SW50ZXJmYWNlLycsCiAgICAgICAgICAgICAgICBFbmRwb2ludCAgPT4gJFJlbW90ZVN5c3RlbSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiB7CiAgICAgICAgICAgIFRpY2tldFNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUaWNrZXQ6OlRpY2tldFNlYXJjaCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlc3Npb25DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnU2Vzc2lvbjo6U2Vzc2lvbkNyZWF0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICBSZXF1ZXN0ZXIgPT4gewogICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgIFR5cGUgICA9PiAnSFRUUDo6U09BUCcsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBOYW1lU3BhY2UgPT4gJ2h0dHA6Ly9vdHJzLm9yZy9Tb2FwVGVzdEludGVyZmFjZS8nLAogICAgICAgICAgICAgICAgRW5jb2RpbmcgID0+ICdVVEYtOCcsCiAgICAgICAgICAgICAgICBFbmRwb2ludCAgPT4gJFJlbW90ZVN5c3RlbSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEludm9rZXIgPT4gewogICAgICAgICAgICBUaWNrZXRTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGVzdDo6VGVzdFNpbXBsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlc3Npb25DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGVzdDo6VGVzdFNpbXBsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCn07CgojIHVwZGF0ZSB3ZWJzZXJ2aWNlIHdpdGggcmVhbCBjb25maWcKbXkgJFdlYnNlcnZpY2VVcGRhdGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZVVwZGF0ZSgKICAgIElEICAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIE5hbWUgICAgPT4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29uZmlnICA9PiAkV2Vic2VydmljZUNvbmZpZywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gJFVzZXJJRCwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZVVwZGF0ZSwKICAgICJVcGRhdGVkIFdlYnNlcnZpY2UgJFdlYnNlcnZpY2VJRCAtICRXZWJzZXJ2aWNlTmFtZSIsCik7CgojIEdldCBTZXNzaW9uSUQKIyBjcmVhdGUgcmVxdWVzdGVyIG9iamVjdApteSAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyk7CiRTZWxmLT5JcygKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICByZWYgJFJlcXVlc3RlclNlc3Npb25PYmplY3QsCiAgICAiU2Vzc2lvbklEIC0gQ3JlYXRlIHJlcXVlc3RlciBvYmplY3QiLAopOwoKIyBjcmVhdGUgYSBuZXcgdXNlciBmb3IgY3VycmVudCB0ZXN0Cm15ICRVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKKTsKbXkgJFBhc3N3b3JkID0gJFVzZXJMb2dpbjsKCiMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYnNlcnZpY2UKbXkgJFJlcXVlc3RlclNlc3Npb25SZXN1bHQgPSAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdC0+UnVuKAogICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBJbnZva2VyICAgICAgPT4gJ1Nlc3Npb25DcmVhdGUnLAogICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICBVc2VyTG9naW4gPT4gJFVzZXJMb2dpbiwKICAgICAgICBQYXNzd29yZCAgPT4gJFBhc3N3b3JkLAogICAgfSwKKTsKCm15ICROZXdTZXNzaW9uSUQgPSAkUmVxdWVzdGVyU2Vzc2lvblJlc3VsdC0+e0RhdGF9LT57U2Vzc2lvbklEfTsKCm15ICRUZXN0Q291bnRlciA9IDE7CgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gJFRpY2tldE51bWJlcjEsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+IFsKICAgICAgICAgICAgICAgICRUaWNrZXROdW1iZXIxLAogICAgICAgICAgICAgICAgJFRpY2tldE51bWJlcjIsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldCcsICAgICMgZm9yY2Ugb3JkZXIsIGJlY2F1c2UgdGhlIEFnZSAoZGVmYXVsdCkgY2FuIGJlIHRoZSBzYW1lCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ0Rvd24nLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaXRsZSA9PiAnVGlja2V0IFR3byBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaXRsZSA9PiBbCiAgICAgICAgICAgICAgICAnVGlja2V0IE9uZSBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgJ1RpY2tldCBUd28gVGl0bGUgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0JywgICAgIyBmb3JjZSBvcmRlciwgYmVjYXVzZSB0aGUgQWdlIChkZWZhdWx0KSBjYW4gYmUgdGhlIHNhbWUKICAgICAgICAgICAgT3JkZXJCeSA9PiAnRG93bicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpdGxlICA9PiAnVGlja2V0IFR3byBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBRdWV1ZXMgPT4gJ1JhdycKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQyLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGl0bGUgID0+ICdUaWNrZXQgVHdvIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIFF1ZXVlcyA9PiAnUmF3JywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQyLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGl0bGUgPT4gJ1RpY2tldCBUd28gVGl0bGUgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgTG9ja3MgPT4gJ3VubG9jaycsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpdGxlICA9PiAnVGlja2V0IFR3byBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBTdGF0ZXMgPT4gJ25ldycsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpdGxlICAgICAgPT4gJ1RpY2tldCBUd28gVGl0bGUgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgUHJpb3JpdGllcyA9PiAnMyBub3JtYWwnLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDdXN0b21lcklEID0+ICcxMjM0NjUnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBTb3J0QnkgICAgID0+ICdUaWNrZXQnLCAgICAgICAgICAgICAgICMgZm9yY2Ugb3JkZXIsIGJlY2F1c2UgdGhlIEFnZSAoZGVmYXVsdCkgY2FuIGJlIHRoZSBzYW1lCiAgICAgICAgICAgIE9yZGVyQnkgICAgPT4gJ0Rvd24nLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBRdWV1ZXMgICAgID0+IFsnSnVuayddLAogICAgICAgICAgICBDdXN0b21lcklEID0+ICc2NTQzMjEnIC4gJFJhbmRvbUlELAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQ0XSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUeXBlcyA9PiBbICdUZXN0VHlwZScgLiAkUmFuZG9tSUQgXSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEM10sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQzLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgU3RhdGVzID0+IFsnbmV3J10sCiAgICAgICAgICAgIFRpdGxlICA9PiAnVGlja2V0IFR3byBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBTdGF0ZXMgID0+IFsnbmV3J10sCiAgICAgICAgICAgIFRpdGxlICAgPT4gJyonIC4gJFJhbmRvbUlELAogICAgICAgICAgICBTb3J0QnkgID0+ICdUaWNrZXQnLCAgICAgICAgICAjIGZvcmNlIG9yZGVyLCBiZWNhdXNlIHRoZSBBZ2UgKGRlZmF1bHQpIGNhbiBiZSB0aGUgc2FtZQogICAgICAgICAgICBPcmRlckJ5ID0+ICdEb3duJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGl0bGUgICAgICA9PiAnKiDDpMO2w7zDn8OEw5bDnOKCrNC40YEnLAogICAgICAgICAgICBDdXN0b21lcklEID0+ICc2NTQzMjEnIC4gJFJhbmRvbUlELAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQ0XSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBQcmlvcml0aWVzID0+IFsnMSB2ZXJ5IGxvdyddLAogICAgICAgICAgICBDdXN0b21lcklEID0+ICcxMjM0NjUnIC4gJFJhbmRvbUlELAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQzXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDMsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICAiRHluYW1pY0ZpZWxkX0RGVDEkUmFuZG9tSUQiID0+IHsKICAgICAgICAgICAgICAgIEVxdWFscyA9PiAndGlja2V0Ml9maWVsZDEnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICAiRHluYW1pY0ZpZWxkX0RGVDEkUmFuZG9tSUQiID0+IHsKICAgICAgICAgICAgICAgIExpa2UgPT4gJypfZmllbGQxJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU29ydEJ5ID0+ICdUaWNrZXROdW1iZXInLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyRGF0ZSA9PgogICAgICAgICAgICAgICAgJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKCBTeXN0ZW1UaW1lID0+ICRTdGFydFRpbWUgKSwKICAgICAgICAgICAgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSA9PgogICAgICAgICAgICAgICAgJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKCBTeXN0ZW1UaW1lID0+ICRTdGFydFRpbWUgKSwKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0JywgICAgIyBmb3JjZSBvcmRlciwgYmVjYXVzZSB0aGUgQWdlIChkZWZhdWx0KSBjYW4gYmUgdGhlIHNhbWUKICAgICAgICAgICAgT3JkZXJCeSA9PiAnRG93bicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQ0LCAkVGlja2V0SUQzLCAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDQsICRUaWNrZXRJRDMsICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBERiAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgPT4KICAgICAgICAgICAgICAgICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCggU3lzdGVtVGltZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpICsgMSApLAogICAgICAgICAgICBTb3J0QnkgID0+ICdUaWNrZXQnLCAgICAjIGZvcmNlIG9yZGVyLCBiZWNhdXNlIHRoZSBBZ2UgKGRlZmF1bHQpIGNhbiBiZSB0aGUgc2FtZQogICAgICAgICAgICBPcmRlckJ5ID0+ICdEb3duJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSAgICA9PiB7fSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhICAgID0+IHt9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IExpbWl0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0TGFzdENoYW5nZVRpbWVOZXdlckRhdGUgPT4KICAgICAgICAgICAgICAgICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCggU3lzdGVtVGltZSA9PiAkU3RhcnRUaW1lICksCiAgICAgICAgICAgIFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgPT4KICAgICAgICAgICAgICAgICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCggU3lzdGVtVGltZSA9PiAkU3RhcnRUaW1lICksCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldCcsICAgICMgZm9yY2Ugb3JkZXIsIGJlY2F1c2UgdGhlIEFnZSAoZGVmYXVsdCkgY2FuIGJlIHRoZSBzYW1lCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ0Rvd24nLAogICAgICAgICAgICBMaW1pdCAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDRdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElENCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBFc2NhbGF0aW9uVGltZSAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldEVzY2FsYXRpb25UaW1lTmV3ZXJNaW51dGVzID0+IDEyMCwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IEVzY2FsYXRpb25SZXNwb25zZVRpbWUgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRFc2NhbGF0aW9uUmVzcG9uc2VUaW1lTmV3ZXJNaW51dGVzID0+IDEyMCwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IEVzY2FsYXRpb25VcGRhdGVUaW1lICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0RXNjYWxhdGlvblVwZGF0ZVRpbWVOZXdlck1pbnV0ZXMgPT4gMTIwLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgRXNjYWxhdGlvblNvbHV0aW9uVGltZSAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldEVzY2FsYXRpb25Tb2x1dGlvblRpbWVOZXdlck1pbnV0ZXMgPT4gMTIwLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCgogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IENvbnRlbnRTZWFyY2ggUGFyYW1ldGVyIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBCb2R5ICAgICAgICAgID0+ICdub3QgdG9vIGxvbmcnLAogICAgICAgICAgICBTdWJqZWN0ICAgICAgID0+ICdub3QgdG9vIGxvbmcnLAogICAgICAgICAgICBDb250ZW50U2VhcmNoID0+ICdPUicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDRdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElENCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKKTsKCiMgQWRkIGEgd3JvbmcgdmFsdWUgdGVzdCBmb3IgZWFjaCBwb3NzaWJsZSBwYXJhbWV0ZXIgb24gZGlyZWN0IHNlYXJjaAoKZm9yIG15ICRJdGVtICgKICAgIHF3KFRpY2tldE51bWJlciBUaXRsZSBGcm9tIFRvIENjIFN1YmplY3QgQm9keSBDdXN0b21lcklEIEN1c3RvbWVyVXNlckxvZ2luIFN0YXRlVHlwZQogICAgRnVsbHRleHQKICAgICkKICAgICkKewogICAgbXkgJEZhaWxUZXN0ID0gewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICRJdGVtIiwKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgJEl0ZW0gPT4gJ05vdEFSZWFsJyAuICRJdGVtLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhICAgID0+IHt9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgICAgPT4ge30sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfTsKCiAgICAjIHB1c2ggdGVzdAogICAgcHVzaCBAVGVzdHMsICRGYWlsVGVzdDsKfQoKIyBBcnJheXMgYXMgc3RyaW5ncwpmb3IgbXkgJEl0ZW0gKAogICAgcXcoU3RhdGVJRHMgU3RhdGVUeXBlSURzIFF1ZXVlSURzIFByaW9yaXR5SURzIE93bmVySURzCiAgICBDcmVhdGVkUXVldWVJRHMgQ3JlYXRlZFVzZXJJRHMgV2F0Y2hVc2VySURzIFJlc3BvbnNpYmxlSURzCiAgICBUeXBlSURzIFNlcnZpY2VJRHMgU0xBSURzIExvY2tJRHMgUXVldWVzIFR5cGVzIFN0YXRlcwogICAgUHJpb3JpdGllcyBTZXJ2aWNlcyBTTEFzIExvY2tzIENyZWF0ZWRUeXBlcyBDcmVhdGVkVXNlcklEcwogICAgQ3JlYXRlZFR5cGVzIENyZWF0ZWRUeXBlSURzIENyZWF0ZWRQcmlvcml0aWVzCiAgICBDcmVhdGVkUHJpb3JpdHlJRHMgQ3JlYXRlZFN0YXRlcyBDcmVhdGVkU3RhdGVJRHMKICAgIENyZWF0ZWRRdWV1ZXMgQ3JlYXRlZFF1ZXVlSURzCiAgICApCiAgICApCnsKICAgIG15ICRGYWlsVGVzdCA9IHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAkSXRlbSIsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgICRJdGVtID0+ICdOb3RBUmVhbCcgLiAkSXRlbSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSAgICA9PiB7fSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhICAgID0+IHt9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH07CgogICAgIyBwdXNoIHRlc3QKICAgIHB1c2ggQFRlc3RzLCAkRmFpbFRlc3Q7Cn0KCiMgQXJyYXlzCmZvciBteSAkSXRlbSAoCiAgICBxdyhTdGF0ZUlEcyBTdGF0ZVR5cGVJRHMgUXVldWVJRHMgUHJpb3JpdHlJRHMgT3duZXJJRHMKICAgIENyZWF0ZWRRdWV1ZUlEcyBDcmVhdGVkVXNlcklEcyBXYXRjaFVzZXJJRHMgUmVzcG9uc2libGVJRHMKICAgIFR5cGVJRHMgU2VydmljZUlEcyBTTEFJRHMgTG9ja0lEcyBRdWV1ZXMgVHlwZXMgU3RhdGVzCiAgICBQcmlvcml0aWVzIFNlcnZpY2VzIFNMQXMgTG9ja3MgQ3JlYXRlZFR5cGVzIENyZWF0ZWRVc2VySURzCiAgICBDcmVhdGVkVHlwZXMgQ3JlYXRlZFR5cGVJRHMgQ3JlYXRlZFByaW9yaXRpZXMKICAgIENyZWF0ZWRQcmlvcml0eUlEcyBDcmVhdGVkU3RhdGVzIENyZWF0ZWRTdGF0ZUlEcwogICAgQ3JlYXRlZFF1ZXVlcyBDcmVhdGVkUXVldWVJRHMKICAgICkKICAgICkKewogICAgbXkgJEZhaWxUZXN0ID0gewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICRJdGVtIiwKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgJEl0ZW0gPT4gWwogICAgICAgICAgICAgICAgJ05vdEFSZWFsJyAuICRJdGVtIC4gJ09uZScsCiAgICAgICAgICAgICAgICAnTm90QVJlYWwnIC4gJEl0ZW0gLiAnVHdvJywKICAgICAgICAgICAgICAgICdOb3RBUmVhbCcgLiAkSXRlbSAuICdUaHJlZScsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgICAgPT4ge30sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSAgICA9PiB7fSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9OwoKICAgICMgcHVzaCB0ZXN0CiAgICBwdXNoIEBUZXN0cywgJEZhaWxUZXN0Owp9CgojIGRlYnVnZ2VyIG9iamVjdApteSAkRGVidWdnZXJPYmplY3QgPSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyLT5uZXcoCiAgICBEZWJ1Z2dlckNvbmZpZyA9PiB7CiAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJ2RlYnVnJywKICAgICAgICBUZXN0TW9kZSAgICAgICA9PiAxLAogICAgfSwKICAgIFdlYnNlcnZpY2VJRCAgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBDb21tdW5pY2F0aW9uVHlwZSA9PiAnUHJvdmlkZXInLAopOwokU2VsZi0+SXMoCiAgICByZWYgJERlYnVnZ2VyT2JqZWN0LAogICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXInLAogICAgJ0RlYnVnZ2VyT2JqZWN0IGluc3RhbnRpYXRlIGNvcnJlY3RseScsCik7Cgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewoKICAgICMgY3JlYXRlIGxvY2FsIG9iamVjdAogICAgbXkgJExvY2FsT2JqZWN0ID0gIktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OiRUZXN0LT57T3BlcmF0aW9ufSItPm5ldygKICAgICAgICBEZWJ1Z2dlck9iamVjdCA9PiAkRGVidWdnZXJPYmplY3QsCiAgICAgICAgV2Vic2VydmljZUlEICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICJLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjokVGVzdC0+e09wZXJhdGlvbn0iLAogICAgICAgIHJlZiAkTG9jYWxPYmplY3QsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDcmVhdGUgbG9jYWwgb2JqZWN0IiwKICAgICk7CgogICAgIyBzdGFydCByZXF1ZXN0ZXIgd2l0aCBvdXIgd2Vic2VydmljZQogICAgbXkgJExvY2FsUmVzdWx0ID0gJExvY2FsT2JqZWN0LT5SdW4oCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgSW52b2tlciAgICAgID0+ICRUZXN0LT57T3BlcmF0aW9ufSwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgID0+ICRQYXNzd29yZCwKICAgICAgICAgICAgJXsgJFRlc3QtPntSZXF1ZXN0RGF0YX0gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIHJlc3VsdAogICAgJFNlbGYtPklzKAogICAgICAgICdIQVNIJywKICAgICAgICByZWYgJExvY2FsUmVzdWx0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICMgY3JlYXRlIHJlcXVlc3RlciBvYmplY3QKICAgIG15ICRSZXF1ZXN0ZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwogICAgJFNlbGYtPklzKAogICAgICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICAgICAgcmVmICRSZXF1ZXN0ZXJPYmplY3QsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDcmVhdGUgcmVxdWVzdGVyIG9iamVjdCIsCiAgICApOwoKICAgICMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYnNlcnZpY2UKICAgIG15ICRSZXF1ZXN0ZXJSZXN1bHQgPSAkUmVxdWVzdGVyT2JqZWN0LT5SdW4oCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgSW52b2tlciAgICAgID0+ICRUZXN0LT57T3BlcmF0aW9ufSwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJE5ld1Nlc3Npb25JRCwKICAgICAgICAgICAgJXsgJFRlc3QtPntSZXF1ZXN0RGF0YX0gfSwKICAgICAgICAgICAgfQogICAgKTsKCiAgICAjIGNoZWNrIHJlc3VsdAogICAgJFNlbGYtPklzKAogICAgICAgICdIQVNIJywKICAgICAgICByZWYgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgc3RydWN0dXJlIGlzIHZhbGlkIiwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntTdWNjZXNzfSwKICAgICAgICAkVGVzdC0+e1N1Y2Nlc3NSZXF1ZXN0fSwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciBzdWNjZXNzZnVsIHJlc3VsdCIsCiAgICApOwoKICAgICMgcmVtb3ZlIEVycm9yTWVzc2FnZSBwYXJhbWV0ZXIgZnJvbSBkaXJlY3QgY2FsbAogICAgIyByZXN1bHQgdG8gYmUgY29uc2lzdGVudCB3aXRoIFNPQVAgY2FsbCByZXN1bHQKICAgIGlmICggJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfSApIHsKICAgICAgICBkZWxldGUgJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfTsKICAgIH0KCiAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAkVGVzdC0+e0V4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YX0sCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgc3VjY2VzcyBzdGF0dXMgKG5lZWRzIGNvbmZpZ3VyZWQgYW5kIHJ1bm5pbmcgd2Vic2VydmVyKSIsCiAgICApOwoKICAgIGlmICggJFRlc3QtPntFeHBlY3RlZFJldHVybkxvY2FsRGF0YX0gKSB7CiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkTG9jYWxSZXN1bHQsCiAgICAgICAgICAgICRUZXN0LT57RXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGF9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBtYXRjaGVkIHdpdGggZXhwZWN0ZWQgbG9jYWwgY2FsbCByZXN1bHQuIiwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkTG9jYWxSZXN1bHQsCiAgICAgICAgICAgICRUZXN0LT57RXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgbWF0Y2hlZCB3aXRoIHJlbW90ZSByZXN1bHQuIiwKICAgICAgICApOwogICAgfQoKfSAgICAjZW5kIGxvb3AKCiMgY2xlYW51cAoKIyBjbGVhbnVwIHdlYnNlcnZpY2UKbXkgJFdlYnNlcnZpY2VEZWxldGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZURlbGV0ZSgKICAgIElEICAgICA9PiAkV2Vic2VydmljZUlELAogICAgVXNlcklEID0+ICRVc2VySUQsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VEZWxldGUsCiAgICAiRGVsZXRlZCBXZWJzZXJ2aWNlICRXZWJzZXJ2aWNlSUQiLAopOwoKIyBkZWxldGUgdGhlIHRpY2tldHMKZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewogICAgbXkgJFRpY2tldERlbGV0ZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRCwKICAgICk7CgogICAgIyBzYW5pdHkgY2hlY2sKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRUaWNrZXREZWxldGUsCiAgICAgICAgIlRpY2tldERlbGV0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBJRCAkVGlja2V0SUQiLAogICAgKTsKfQoKIyBkZWxldGUgZHluYW1pYyBmaWVsZHMKZm9yIG15ICRUZXN0RmllbGRDb25maWdJdGVtIChAVGVzdEZpZWxkQ29uZmlnKSB7CiAgICBteSAkVGVzdEZpZWxkQ29uZmlnSXRlbUlEID0gJFRlc3RGaWVsZENvbmZpZ0l0ZW0tPntJRH07CgogICAgbXkgJERGRGVsZXRlID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkRGVsZXRlKAogICAgICAgIElEICAgICAgPT4gJFRlc3RGaWVsZENvbmZpZ0l0ZW1JRCwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgUmVvcmRlciA9PiAwLAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVjawogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJERGRGVsZXRlLAogICAgICAgICJEeW5hbWljRmllbGREZWxldGUoKSBzdWNjZXNzZnVsIGZvciBGaWVsZCBJRCAkVGVzdEZpZWxkQ29uZmlnSXRlbUlEIiwKICAgICk7Cn0KCiMgZ2V0IERCIG9iamVjdApteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiMgZGVsZXRlIHVzZXIKbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSB1c2VyX3ByZWZlcmVuY2VzIFdIRVJFIHVzZXJfaWQgPSAkVXNlcklEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJVc2VyIHByZWZlcmVuY2UgcmVmZXJlbmNlZCB0byBVc2VyIElEICRVc2VySUQgaXMgZGVsZXRlZCEiLAopOwokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHVzZXJzIFdIRVJFIGlkID0gJFVzZXJJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiVXNlciB3aXRoIElEICRVc2VySUQgaXMgZGVsZXRlZCEiLAopOwoKIyBkZWxldGUgdHlwZQokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHRpY2tldF90eXBlIFdIRVJFIGlkID0gJFR5cGVJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiVHlwZSB3aXRoIElEICRUeXBlSUQgaXMgZGVsZXRlZCEiLAopOwoKIyBjbGVhbnVwIGNhY2hlCiRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCk7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L1Byb2Nlc3NNYW5hZ2VtZW50L1RyYW5zaXRpb25BY3Rpb24vVGlja2V0U0xBU2V0LnQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCiMgZ2V0IG5lZWRlZCBvYmplY3RzCm15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKbXkgJFNMQU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7Cm15ICRUaWNrZXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwpteSAkTW9kdWxlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6VHJhbnNpdGlvbkFjdGlvbjo6VGlja2V0U0xBU2V0Jyk7CgojIGdldCBoZWxwZXIgb2JqZWN0CiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgojIGRlZmluZSB2YXJpYWJsZXMKbXkgJFVzZXJJRCAgICAgPSAxOwpteSAkTW9kdWxlTmFtZSA9ICdUaWNrZXRTTEFTZXQnOwpteSAkUmFuZG9tSUQgICA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgojIGFkZCBhIGN1c3RvbWVyIHVzZXIKbXkgJFRlc3RDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKCiMgc2V0IHVzZXIgZGV0YWlscwpteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKCk7Cm15ICRUZXN0VXNlcklEICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxvb2t1cCgKICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKKTsKCiMKIyBDcmVhdGUgbmV3IHNlcnZpY2VzCiMKbXkgQFNlcnZpY2VzID0gKAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ1NlcnZpY2UwJyAuICRSYW5kb21JRCwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgfSwKKTsKCmZvciBteSAkU2VydmljZURhdGEgKEBTZXJ2aWNlcykgewogICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKCAleyRTZXJ2aWNlRGF0YX0gKTsKCiAgICAjIHNhbml0eSB0ZXN0CiAgICAkU2VsZi0+SXNOb3QoCiAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICB1bmRlZiwKICAgICAgICAiU2VydmljZUFkZCgpIGZvciAkU2VydmljZURhdGEtPntOYW1lfSwgU2VydmljZUlEIHNob3VsZCBub3QgYmUgdW5kZWYiLAogICAgKTsKCiAgICAjIHN0b3JlIHRoZSBTZXJ2aWNlSUQKICAgICRTZXJ2aWNlRGF0YS0+e1NlcnZpY2VJRH0gPSAkU2VydmljZUlEOwp9CgojCiMgQ3JlYXRlIG5ldyBTTEFzCiMKbXkgQFNMQXMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgICA9PiAnU0xBMCcgLiAkUmFuZG9tSUQsCiAgICAgICAgU2VydmljZUlEcyA9PiBbICRTZXJ2aWNlc1swXS0+e1NlcnZpY2VJRH0gXSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gJ1NMQTEnIC4gJFJhbmRvbUlELAogICAgICAgIFNlcnZpY2VJRHMgPT4gWyAkU2VydmljZXNbMF0tPntTZXJ2aWNlSUR9IF0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgID0+ICdTTEEyJyAuICRSYW5kb21JRCwKICAgICAgICBTZXJ2aWNlSURzID0+IFtdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIH0sCik7Cgpmb3IgbXkgJFNMQURhdGEgKEBTTEFzKSB7CiAgICBteSAkU0xBSUQgPSAkU0xBT2JqZWN0LT5TTEFBZGQoICV7JFNMQURhdGF9ICk7CgogICAgIyBzYW5pdHkgdGVzdAogICAgJFNlbGYtPklzTm90KAogICAgICAgICRTTEFJRCwKICAgICAgICB1bmRlZiwKICAgICAgICAiU0xBQWRkKCkgZm9yICRTTEFEYXRhLT57TmFtZX0sIFNMQUlEIHNob3VsZCBub3QgYmUgdW5kZWYiLAogICAgKTsKCiAgICAjIHN0b3JlIHRoZSBTTEFJRAogICAgJFNMQURhdGEtPntTTEFJRH0gPSAkU0xBSUQ7Cn0KCiMKIyBBc3NpZ24gc2VydmljZXMgdG8gY3VzdG9tZXIgKDAgYW5kIDEpCiMKbXkgJFN1Y2Nlc3MgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZXNbMF0tPntTZXJ2aWNlSUR9LAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIHNhbml0eSB0ZXN0CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgpIGZvciB1c2VyICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sIGFuZCBTZXJ2aWNlICRTZXJ2aWNlc1swXS0+e05hbWV9IgogICAgICAgIC4gIiB3aXRoIHRydWUiLAopOwoKIwojIENyZWF0ZSBhIHRlc3QgdGlja2V0cwojCm15IEBUaWNrZXREYXRhOwpmb3IgbXkgJEl0ZW0gKCAwIC4uIDEgKSB7CiAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgVGl0bGUgPT4gKCAkSXRlbSA9PSAwICkgPyAkU0xBc1swXS0+e1NMQUlEfSA6ICd0ZXN0JywKICAgICAgICBRdWV1ZUlEICAgICAgID0+IDEsCiAgICAgICAgTG9jayAgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICBQcmlvcml0eSAgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgU3RhdGVJRCAgICAgICA9PiAxLAogICAgICAgIFR5cGVJRCAgICAgICAgPT4gMSwKICAgICAgICBTZXJ2aWNlICAgICAgID0+ICggJEl0ZW0gPT0gMCApID8gJFNlcnZpY2VzWzBdLT57TmFtZX0gOiB1bmRlZiwKICAgICAgICBDdXN0b21lclVzZXIgID0+ICggJEl0ZW0gPT0gMCApID8gJFRlc3RDdXN0b21lclVzZXJMb2dpbiA6IHVuZGVmLAogICAgICAgIE93bmVySUQgICAgICAgPT4gMSwKICAgICAgICBSZXNwb25zaWJsZUlEID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVja3MKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRUaWNrZXRJRCwKICAgICAgICAiVGlja2V0Q3JlYXRlKCkgLSAkVGlja2V0SUQiLAogICAgKTsKCiAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICBVc2VySUQgICA9PiAkVXNlcklELAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldCApLAogICAgICAgICJUaWNrZXRHZXQoKSAtIEdldCBUaWNrZXQgd2l0aCBJRCAkVGlja2V0SUQuIiwKICAgICk7CgogICAgcHVzaCBAVGlja2V0RGF0YSwgXCVUaWNrZXQ7Cn0KCiMgUnVuKCkgdGVzdHMKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ05vIFBhcmFtcycsCiAgICAgICAgQ29uZmlnICA9PiB1bmRlZiwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm8gVXNlcklEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gdW5kZWYsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJ3Rlc3QnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ05vIFRpY2tldCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiB1bmRlZiwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJ3Rlc3QnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ05vIENvbmZpZycsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHt9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIENvbmZpZycsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE5vQWdlbnROb3RpZnkgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdXcm9uZyBUaWNrZXQgRm9ybWF0JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEEgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIENvbmZpZyBGb3JtYXQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIFNMQScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNMQSA9PiAnTm90RXhpc3RpbmcnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIFNMQUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJ05vdEV4aXN0aW5nJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdOb3QgYXNzaWduZWQgU0xBJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBID0+ICRTTEFzWzJdLT57TmFtZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm90IEFzc2lnbmVkIFNMQUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNMQXNbMl0tPntTTEFJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiVGlja2V0IHdpdGhvdXQgc2VydmljZSB3aXRoIFNMQSAkU0xBc1swXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzFdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNMQXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJUaWNrZXQgd2l0aG91dCBzZXJ2aWNlIHdpdGggU0xBSUQgJFNMQXNbMV0tPntOYW1lfSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVsxXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNMQUlEID0+ICRTTEFzWzBdLT57U0xBSUR9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgU0xBICRTTEFzWzBdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEEgPT4gJFNMQXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFNMQSAkU0xBc1sxXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBID0+ICRTTEFzWzFdLT57TmFtZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBTTEFJRCAkU0xBc1swXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNMQXNbMF0tPntTTEFJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBTTEFJRCAkU0xBc1sxXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNMQXNbMF0tPntTTEFJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBUaWNrZXQtPlRpdGxlIiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJzxPVFJTX1RJQ0tFVF9UaXRsZT4nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgVGlja2V0LT5Ob3RFeGlzdGluZyIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNMQUlEID0+ICc8T1RSU19USUNLRVRfTm90RXhpc3Rpbmc+JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFVzaW5nIERpZmZlcmVudCBVc2VySUQiLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEEgICAgPT4gJFNMQXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVGVzdFVzZXJJRCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH0sCik7Cgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewoKICAgICMgbWFrZSBhIGRlZXAgY29weSB0byBhdm9pZCBjaGFuZ2luZyB0aGUgZGVmaW5pdGlvbgogICAgbXkgJE9yaWdUZXN0ID0gU3RvcmFibGU6OmRjbG9uZSgkVGVzdCk7CgogICAgbXkgJFN1Y2Nlc3MgPSAkTW9kdWxlT2JqZWN0LT5SdW4oCiAgICAgICAgJXsgJFRlc3QtPntDb25maWd9IH0sCiAgICAgICAgUHJvY2Vzc0VudGl0eUlEICAgICAgICAgID0+ICdQMScsCiAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCAgICAgICAgID0+ICdBMScsCiAgICAgICAgVHJhbnNpdGlvbkVudGl0eUlEICAgICAgID0+ICdUMScsCiAgICAgICAgVHJhbnNpdGlvbkFjdGlvbkVudGl0eUlEID0+ICdUQTEnLAogICAgKTsKCiAgICBpZiAoICRUZXN0LT57U3VjY2Vzc30gKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRNb2R1bGVOYW1lIFJ1bigpIC0gVGVzdDonJFRlc3QtPntOYW1lfScgfCBleGVjdXRlZCB3aXRoIFRydWUiCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGlja2V0CiAgICAgICAgbXkgJFRpY2tldElEID0gJFRpY2tldERhdGFbMF0tPntUaWNrZXRJRH07CiAgICAgICAgaWYgKCAkVGVzdC0+e0NvbmZpZ30tPntUaWNrZXR9LT57VGlja2V0SUR9IGVxICRUaWNrZXREYXRhWzFdLT57VGlja2V0SUR9ICkgewogICAgICAgICAgICAkVGlja2V0SUQgPSAkVGlja2V0RGF0YVsxXS0+e1RpY2tldElEfTsKICAgICAgICB9CiAgICAgICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIEFUVFJJQlVURToKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkVGVzdC0+e0NvbmZpZ30tPntDb25maWd9IH0gKSB7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGRlZmluZWQgJFRpY2tldHskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiAkQXR0cmlidXRlIGZvciBUaWNrZXRJRDoiCiAgICAgICAgICAgICAgICAgICAgLiAiICRUaWNrZXRJRCBleGlzdHMgd2l0aCBUcnVlIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRFeHBlY3RlZFZhbHVlID0gJFRlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9OwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9CiAgICAgICAgICAgICAgICA9fiBte1xBPE9UUlNfVElDS0VUXyhbQS1aYS16MC05X10rKT5cen1tc3gKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEV4cGVjdGVkVmFsdWUgPSAkVGlja2V0eyQxfSAvLyAnJzsKICAgICAgICAgICAgICAgICRTZWxmLT5Jc05vdCgKICAgICAgICAgICAgICAgICAgICAkVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJE9yaWdUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAiJE1vZHVsZU5hbWUgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IEF0dHJpYnV0ZTogJEF0dHJpYnV0ZSB2YWx1ZTogJE9yaWdUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPnskQXR0cmlidXRlfSBzaG91bGQgYmVlbiByZXBsYWNlZCIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkVGlja2V0eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgJEV4cGVjdGVkVmFsdWUsCiAgICAgICAgICAgICAgICAiJE1vZHVsZU5hbWUgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IEF0dHJpYnV0ZTogJEF0dHJpYnV0ZSBmb3IgVGlja2V0SUQ6IgogICAgICAgICAgICAgICAgICAgIC4gIiAkVGlja2V0SUQgbWF0Y2ggZXhwZWN0ZWQgdmFsdWUiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+e1VzZXJJRH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPntVc2VySUR9LAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAiJE1vZHVsZU5hbWUgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IEF0dHJpYnV0ZTogVXNlcklEIGZvciBUaWNrZXRJRDoiCiAgICAgICAgICAgICAgICAgICAgLiAiICRUaWNrZXRJRCBzaG91bGQgYmUgcmVtb3ZlZCAoYXMgaXQgd2FzIHVzZWQpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJE1vZHVsZU5hbWUgUnVuKCkgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IGV4ZWN1dGVkIHdpdGggRmFsc2UiCiAgICAgICAgKTsKICAgIH0KfQoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlLgoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L1Byb2Nlc3NNYW5hZ2VtZW50L1RyYW5zaXRpb25BY3Rpb24vVGlja2V0U2VydmljZVNldC50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7Cm15ICRUaWNrZXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwpteSAkTW9kdWxlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6VHJhbnNpdGlvbkFjdGlvbjo6VGlja2V0U2VydmljZVNldCcpOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKIyBkZWZpbmUgdmFyaWFibGVzCm15ICRVc2VySUQgICAgID0gMTsKbXkgJE1vZHVsZU5hbWUgPSAnVGlja2V0U2VydmljZVNldCc7Cm15ICRSYW5kb21JRCAgID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiMgYWRkIGEgY3VzdG9tZXIgdXNlcgpteSAkVGVzdEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwoKIyBzZXQgdXNlciBkZXRhaWxzCm15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoKTsKbXkgJFRlc3RVc2VySUQgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTG9va3VwKAogICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAopOwoKIwojIENyZWF0ZSBuZXcgc2VydmljZXMKIwpteSBAU2VydmljZXMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICA9PiAnU2VydmljZTAnIC4gJFJhbmRvbUlELAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ1NlcnZpY2UxJyAuICRSYW5kb21JRCwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgID0+ICdTZXJ2aWNlMicgLiAkUmFuZG9tSUQsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgIH0sCik7Cgpmb3IgbXkgJFNlcnZpY2VEYXRhIChAU2VydmljZXMpIHsKICAgIG15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCggJXskU2VydmljZURhdGF9ICk7CgogICAgIyBzYW5pdHkgdGVzdAogICAgJFNlbGYtPklzTm90KAogICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgdW5kZWYsCiAgICAgICAgIlNlcnZpY2VBZGQoKSBmb3IgJFNlcnZpY2VEYXRhLT57TmFtZX0sIFNlcnZpY2VJRCBzaG91bGQgbm90IGJlIHVuZGVmIiwKICAgICk7CgogICAgIyBzdG9yZSB0aGUgU2VydmljZUlECiAgICAkU2VydmljZURhdGEtPntTZXJ2aWNlSUR9ID0gJFNlcnZpY2VJRDsKfQoKIwojIEFzc2lnbiBzZXJ2aWNlcyB0byBjdXN0b21lciAoMCBhbmQgMSkKIwpteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlc1swXS0+e1NlcnZpY2VJRH0sCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IHRlc3QKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKCkgZm9yIHVzZXIgJFRlc3RDdXN0b21lclVzZXJMb2dpbiwgYW5kIFNlcnZpY2UgJFNlcnZpY2VzWzBdLT57TmFtZX0iCiAgICAgICAgLiAiIHdpdGggdHJ1ZSIsCik7CgokU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlc1sxXS0+e1NlcnZpY2VJRH0sCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IHRlc3QKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKCkgZm9yIHVzZXIgJFRlc3RDdXN0b21lclVzZXJMb2dpbiwgYW5kIFNlcnZpY2UgJFNlcnZpY2VzWzFdLT57TmFtZX0iCiAgICAgICAgLiAiIHdpdGggdHJ1ZSIsCik7CgojCiMgQ3JlYXRlIGEgdGVzdCB0aWNrZXRzCiMKbXkgQFRpY2tldERhdGE7CmZvciBteSAkSXRlbSAoIDAgLi4gMSApIHsKICAgIG15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgICAgICBUaXRsZSA9PiAoICRJdGVtID09IDAgKSA/ICRTZXJ2aWNlc1swXS0+e1NlcnZpY2VJRH0gOiAndGVzdCcsCiAgICAgICAgUXVldWVJRCAgICAgICA9PiAxLAogICAgICAgIExvY2sgICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgUHJpb3JpdHkgICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgIFN0YXRlSUQgICAgICAgPT4gMSwKICAgICAgICBUeXBlSUQgICAgICAgID0+IDEsCiAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAoICRJdGVtID09IDAgKSA/ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gOiB1bmRlZiwKICAgICAgICBPd25lcklEICAgICAgID0+IDEsCiAgICAgICAgUmVzcG9uc2libGVJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICk7CgogICAgIyBzYW5pdHkgY2hlY2tzCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgIlRpY2tldENyZWF0ZSgpIC0gJFRpY2tldElEIiwKICAgICk7CgogICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRCwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0ICksCiAgICAgICAgIlRpY2tldEdldCgpIC0gR2V0IFRpY2tldCB3aXRoIElEICRUaWNrZXRJRC4iLAogICAgKTsKCiAgICBwdXNoIEBUaWNrZXREYXRhLCBcJVRpY2tldDsKCn0KCiMgUnVuKCkgdGVzdHMKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ05vIFBhcmFtcycsCiAgICAgICAgQ29uZmlnICA9PiB1bmRlZiwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm8gVXNlcklEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gdW5kZWYsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJ3Rlc3QnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ05vIFRpY2tldCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiB1bmRlZiwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJ3Rlc3QnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ05vIENvbmZpZycsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHt9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIENvbmZpZycsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE5vQWdlbnROb3RpZnkgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdXcm9uZyBUaWNrZXQgRm9ybWF0JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdXcm9uZyBDb25maWcgRm9ybWF0JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gMSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdXcm9uZyBTZXJ2aWNlJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU2VydmljZSA9PiAnTm90RXhpc3RpbmcnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIFNlcnZpY2VJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAnTm90RXhpc3RpbmcnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ05vdCBhc3NpZ25lZCBTZXJ2aWNlJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU2VydmljZSA9PiAkU2VydmljZXNbMl0tPntOYW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdOb3QgQXNzaWduZWQgU2VydmljZUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlc1syXS0+e1NlcnZpY2VJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiVGlja2V0IHdpdGhvdXQgY3VzdG9tZXIgd2l0aCBTZXJ2aWNlICRTZXJ2aWNlc1swXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzFdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlc1swXS0+e05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIlRpY2tldCB3aXRob3V0IGN1c3RvbWVyIHdpdGggU2VydmljZUlEICRTZXJ2aWNlc1sxXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzFdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlc1swXS0+e1NlcnZpY2VJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBTZXJ2aWNlICRTZXJ2aWNlc1swXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU2VydmljZSA9PiAkU2VydmljZXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFNlcnZpY2UgJFNlcnZpY2VzWzFdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICRTZXJ2aWNlc1sxXS0+e05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgU2VydmljZUlEICRTZXJ2aWNlc1swXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlc1swXS0+e1NlcnZpY2VJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBTZXJ2aWNlSUQgJFNlcnZpY2VzWzFdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VzWzFdLT57U2VydmljZUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFRpY2tldC0+VGl0bGUiLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJzxPVFJTX1RJQ0tFVF9UaXRsZT4nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIldyb25nIFRpY2tldC0+Tm90RXhpc3RpbmciLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJzxPVFJTX1RJQ0tFVF9Ob3RFeGlzdGluZz4nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgVXNpbmcgRGlmZmVyZW50IFVzZXJJRCIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gJFNlcnZpY2VzWzBdLT57TmFtZX0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgIyBtYWtlIGEgZGVlcCBjb3B5IHRvIGF2b2lkIGNoYW5naW5nIHRoZSBkZWZpbml0aW9uCiAgICBteSAkT3JpZ1Rlc3QgPSBTdG9yYWJsZTo6ZGNsb25lKCRUZXN0KTsKCiAgICBteSAkU3VjY2VzcyA9ICRNb2R1bGVPYmplY3QtPlJ1bigKICAgICAgICAleyAkVGVzdC0+e0NvbmZpZ30gfSwKICAgICAgICBQcm9jZXNzRW50aXR5SUQgICAgICAgICAgPT4gJ1AxJywKICAgICAgICBBY3Rpdml0eUVudGl0eUlEICAgICAgICAgPT4gJ0ExJywKICAgICAgICBUcmFuc2l0aW9uRW50aXR5SUQgICAgICAgPT4gJ1QxJywKICAgICAgICBUcmFuc2l0aW9uQWN0aW9uRW50aXR5SUQgPT4gJ1RBMScsCiAgICApOwoKICAgIGlmICggJFRlc3QtPntTdWNjZXNzfSApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJE1vZHVsZU5hbWUgUnVuKCkgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IGV4ZWN1dGVkIHdpdGggVHJ1ZSIKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aWNrZXQKICAgICAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0RGF0YVswXS0+e1RpY2tldElEfTsKICAgICAgICBpZiAoICRUZXN0LT57Q29uZmlnfS0+e1RpY2tldH0tPntUaWNrZXRJRH0gZXEgJFRpY2tldERhdGFbMV0tPntUaWNrZXRJRH0gKSB7CiAgICAgICAgICAgICRUaWNrZXRJRCA9ICRUaWNrZXREYXRhWzFdLT57VGlja2V0SUR9OwogICAgICAgIH0KCiAgICAgICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIEFUVFJJQlVURToKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkVGVzdC0+e0NvbmZpZ30tPntDb25maWd9IH0gKSB7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGRlZmluZWQgJFRpY2tldHskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiAkQXR0cmlidXRlIGZvciBUaWNrZXRJRDoiCiAgICAgICAgICAgICAgICAgICAgLiAiICRUaWNrZXRJRCBleGlzdHMgd2l0aCBUcnVlIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRFeHBlY3RlZFZhbHVlID0gJFRlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9OwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9CiAgICAgICAgICAgICAgICA9fiBte1xBPE9UUlNfVElDS0VUXyhbQS1aYS16MC05X10rKT5cen1tc3gKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEV4cGVjdGVkVmFsdWUgPSAkVGlja2V0eyQxfSAvLyAnJzsKICAgICAgICAgICAgICAgICRTZWxmLT5Jc05vdCgKICAgICAgICAgICAgICAgICAgICAkVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJE9yaWdUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAiJE1vZHVsZU5hbWUgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IEF0dHJpYnV0ZTogJEF0dHJpYnV0ZSB2YWx1ZTogJE9yaWdUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPnskQXR0cmlidXRlfSBzaG91bGQgYmVlbiByZXBsYWNlZCIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkVGlja2V0eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgJEV4cGVjdGVkVmFsdWUsCiAgICAgICAgICAgICAgICAiJE1vZHVsZU5hbWUgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IEF0dHJpYnV0ZTogJEF0dHJpYnV0ZSBmb3IgVGlja2V0SUQ6IgogICAgICAgICAgICAgICAgICAgIC4gIiAkVGlja2V0SUQgbWF0Y2ggZXhwZWN0ZWQgdmFsdWUiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+e1VzZXJJRH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPntVc2VySUR9LAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAiJE1vZHVsZU5hbWUgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IEF0dHJpYnV0ZTogVXNlcklEIGZvciBUaWNrZXRJRDoiCiAgICAgICAgICAgICAgICAgICAgLiAiICRUaWNrZXRJRCBzaG91bGQgYmUgcmVtb3ZlZCAoYXMgaXQgd2FzIHVzZWQpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJE1vZHVsZU5hbWUgUnVuKCkgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IGV4ZWN1dGVkIHdpdGggRmFsc2UiCiAgICAgICAgKTsKICAgIH0KfQoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlLgoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L1Byb2Nlc3NNYW5hZ2VtZW50L1Byb2Nlc3MudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkUXVldWVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwpteSAkUHJvY2Vzc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2VzcycpOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKIyBjcmVhdGUgY29tbW9uIG9iamVjdHMgdG8gYmUgdXNlZCBpbiBBY3Rpdml0eURpYWxvZyBvYmplY3QgY3JlYXRpb24KbXkgJUNvbW1vbk9iamVjdDsKJENvbW1vbk9iamVjdHtBY3Rpdml0eU9iamVjdH0gICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6QWN0aXZpdHknKTsKJENvbW1vbk9iamVjdHtBY3Rpdml0eURpYWxvZ09iamVjdH0gICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6QWN0aXZpdHlEaWFsb2cnKTsKJENvbW1vbk9iamVjdHtUcmFuc2l0aW9uT2JqZWN0fSAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6VHJhbnNpdGlvbicpOwokQ29tbW9uT2JqZWN0e1RyYW5zaXRpb25BY3Rpb25PYmplY3R9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uJyk7CiRDb21tb25PYmplY3R7VGlja2V0T2JqZWN0fSAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgojIGRlZmluZSBuZWVkZWQgdmFyaWFibGVzCm15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgojIGNyZWF0ZSBzb21lIHF1ZXVlcyBpbiB0aGUgc3lzdGVtCm15ICVRdWV1ZURhdGExID0gKAogICAgTmFtZSAgICAgICAgICAgID0+ICdRdWV1ZTEnIC4gJFJhbmRvbUlELAogICAgVmFsaWRJRCAgICAgICAgID0+IDEsCiAgICBHcm91cElEICAgICAgICAgPT4gMSwKICAgIFN5c3RlbUFkZHJlc3NJRCA9PiAxLAogICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICBTaWduYXR1cmVJRCAgICAgPT4gMSwKICAgIENvbW1lbnQgICAgICAgICA9PiAnU29tZSBjb21tZW50JywKICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAopOwoKbXkgJVF1ZXVlRGF0YTIgPSAoCiAgICBOYW1lICAgICAgICAgICAgPT4gJ1F1ZXVlMicgLiAkUmFuZG9tSUQsCiAgICBWYWxpZElEICAgICAgICAgPT4gMSwKICAgIEdyb3VwSUQgICAgICAgICA9PiAxLAogICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICBTYWx1dGF0aW9uSUQgICAgPT4gMSwKICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgQ29tbWVudCAgICAgICAgID0+ICdTb21lIGNvbW1lbnQnLAogICAgVXNlcklEICAgICAgICAgID0+IDEsCik7CgpteSAlUXVldWVEYXRhMyA9ICgKICAgIE5hbWUgICAgICAgICAgICA9PiAnUXVldWUzJyAuICRSYW5kb21JRCwKICAgIFZhbGlkSUQgICAgICAgICA9PiAxLAogICAgR3JvdXBJRCAgICAgICAgID0+IDEsCiAgICBTeXN0ZW1BZGRyZXNzSUQgPT4gMSwKICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgU2lnbmF0dXJlSUQgICAgID0+IDEsCiAgICBDb21tZW50ICAgICAgICAgPT4gJ1NvbWUgY29tbWVudCcsCiAgICBVc2VySUQgICAgICAgICAgPT4gMSwKKTsKCm15ICRRdWV1ZUlEMSA9ICRRdWV1ZU9iamVjdC0+UXVldWVBZGQoJVF1ZXVlRGF0YTEpOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPklzTm90KAogICAgJFF1ZXVlSUQxLAogICAgdW5kZWYsCiAgICAiUXVldWVBZGQoKSAtIEFkZGVkIHF1ZXVlICckUXVldWVEYXRhMXtOYW1lfScgZm9yIEFDTCBjaGVjayAtIHNob3VsZCBub3QgYmUgdW5kZWYiCik7CgpteSAkUXVldWVJRDIgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKCVRdWV1ZURhdGEyKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5Jc05vdCgKICAgICRRdWV1ZUlEMiwKICAgIHVuZGVmLAogICAgIlF1ZXVlQWRkKCkgLSBBZGRlZCBxdWV1ZSAnJFF1ZXVlRGF0YTJ7TmFtZX0nIGZvciBBQ0wgY2hlY2sgLSBzaG91bGQgbm90IGJlIHVuZGVmIgopOwoKbXkgJFF1ZXVlSUQzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUFkZCglUXVldWVEYXRhMyk7CgojIHNhbml0eSBjaGVjawokU2VsZi0+SXNOb3QoCiAgICAkUXVldWVJRDMsCiAgICB1bmRlZiwKICAgICJRdWV1ZUFkZCgpIC0gQWRkZWQgcXVldWUgJyRRdWV1ZURhdGEze05hbWV9JyBmb3IgQUNMIGNoZWNrIC0gc2hvdWxkIG5vdCBiZSB1bmRlZiIKKTsKCm15ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKCk7CgojIEdldCBTZXJ2aWNlT2JqZWN0LgpteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CgpteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICRSYW5kb21JRCwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgokU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlELAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgpteSAkU0xBSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKICAgIFNlcnZpY2VJRHMgPT4gWyRTZXJ2aWNlSURdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgIE5hbWUgICAgICAgPT4gJFJhbmRvbUlELAogICAgVmFsaWRJRCAgICA9PiAxLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKbXkgJFRpY2tldElEID0gJENvbW1vbk9iamVjdHtUaWNrZXRPYmplY3R9LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgPT4gJ1Byb2Nlc3MgVW5pdHRlc3QgVGVzdHRpY2tldCcsCiAgICBRdWV1ZSAgICAgICAgPT4gJFF1ZXVlRGF0YTN7TmFtZX0sCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQgfHwgMCwKICAgICJUaWNrZXRDcmVhdGUoKSBUZXN0dGlja2V0IGZvciBVbml0dGVzdHMgY3JlYXRlZCIsCik7CgpteSBAVGVzdHMgPSAoCgogICAgIyBHZXQgb24gbm8gY29uZmlnCiAgICB7CiAgICAgICAgUHJvY2Vzc0dldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyAgICAgICAgICA9PiB7fSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICd1bmtub3duMTIzJywKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzR2V0KCkgKE5vIENvbmZpZyknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ0ZhbHNlJywKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIEdldCBvbiBubyBQcm9jZXNzRW50aXR5SUQKICAgIHsKICAgICAgICBQcm9jZXNzR2V0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAndW5rbm93bjEyMycsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc0dldCgpIChObyBQcm9jZXNzRW50aXR5SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgICAgIH0KICAgIH0sCgogICAgIyBHZXQgb24gaW52YWxpZCBQcm9jZXNzRW50aXR5SUQKICAgIHsKICAgICAgICBQcm9jZXNzR2V0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAndW5rbm93bjEyMycsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc0dldCgpICh1bmtub3duIFByb2Nlc3NFbnRpdHlJRCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ0ZhbHNlJywKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIEdldCBvbiB2YWxpZCBQcm9jZXNzRW50aXR5SUQKICAgIHsKICAgICAgICBQcm9jZXNzR2V0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAnUDEnLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgPT4gJ1Byb2Nlc3NHZXQoKSAoa25vd24gUHJvY2Vzc0VudGl0eUlEKScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICA9PiAnUmVzdWx0JywKICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgR2V0IG9uIHZhbGlkIFByb2Nlc3NFbnRpdHlJRCBVVEY4CiAgICB7CiAgICAgICAgUHJvY2Vzc0dldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnw6TDtsO8w5/DhMOWw5zigqzQuNGBw6HDqcOtw7rDs8O6w4HDicONw5PDmsOxw5Et44Kr44K544K/LeeUqOi/juS9v+eUqC3Qr9C30YvQuicsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzR2V0KCkgKGtub3duIFByb2Nlc3NFbnRpdHlJRCBVVEY4KScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICA9PiAnUmVzdWx0JywKICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4KICAgICAgICAgICAgICAgICAgICAnw6TDtsO8w5/DhMOWw5zigqzQuNGBw6HDqcOtw7rDs8O6w4HDicONw5PDmsOxw5Et44Kr44K544K/LeeUqOi/juS9v+eUqC3Qr9C30YvQuicsCiAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIExpc3Qgb24gaW52YWxpZCBDb25maWcKICAgIHsKICAgICAgICBQcm9jZXNzTGlzdCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIFByb2Nlc3NTdGF0ZSAgICA9PiBbICdBY3RpdmUnLCAnRmFkZUF3YXknLCAnSW5hY3RpdmUnIF0sCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc0xpc3QoKSAoaW52YWxpZCBDb25maWcpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgICAgIH0KICAgIH0sCgogICAgIyBMaXN0IG9uIHZhbGlkIENvbmZpZywgbWlzc2luZyBQcm9jZXNzU3RhdGUKICAgIHsKICAgICAgICBQcm9jZXNzTGlzdCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgUHJvY2Vzc1N0YXRlICAgID0+IFtdLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgPT4gJ1Byb2Nlc3NMaXN0KCkgKHZhbGlkIENvbmZpZywgbWlzc2luZyBQcm9jZXNzU3RhdGUpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBMaXN0IG9uIHZhbGlkIENvbmZpZywgcmlnaHQgUHJvY2Vzc1N0YXRlCiAgICB7CiAgICAgICAgUHJvY2Vzc0xpc3QgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIFByb2Nlc3NTdGF0ZSAgICA9PiBbICdBY3RpdmUnLCAnRmFkZUF3YXknLCAnSW5hY3RpdmUnIF0sCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc0xpc3QoKSAodmFsaWQgQ29uZmlnLCByaWdodCBQcm9jZXNzU3RhdGUpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgID0+ICdSZXN1bHQnLAogICAgICAgICAgICBSZXN1bHQgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJ1AxJyA9PiAnQm9vayBPcmRlcnMnCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBMaXN0IG9uIHZhbGlkIENvbmZpZywgd3JvbmcgUHJvY2Vzc1N0YXRlCiAgICB7CiAgICAgICAgUHJvY2Vzc0xpc3QgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIFByb2Nlc3NTdGF0ZSAgICA9PiBbICdGYWRlQXdheScsICdJbmFjdGl2ZScgXSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzTGlzdCgpICh2YWxpZCBDb25maWcsIHdyb25nIFByb2Nlc3NTdGF0ZSknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ1Jlc3VsdCcsCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICA9PiB7fSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIExpc3Qgb24gdmFsaWQgQ29uZmlnLCB3cm9uZyBpbnRlcmZhY2UKICAgIHsKICAgICAgICBQcm9jZXNzTGlzdCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5RGlhbG9nJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0FEMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgID0+IFsnQ3VzdG9tZXJJbnRlcmZhY2UnXSwKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnQWN0aXZpdHkgRGlhbG9nIDEnLAogICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICdBRDEgUHJvY2VzcyBTaG9ydCcsCiAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgPT4gJ0FEMSBQcm9jZXNzIExvbmcgZGVzY3JpcHRpb24nLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgID0+ICcwNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAnMicsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgPT4gJzA4LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+ICczJywKICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRzICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRfTWFrZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheSAgICAgICAgICA9PiAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgPT4gJ01ha2UgTG9uZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydCA9PiAnTWFrZSBTaG9ydCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBGaWVsZE9yZGVyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfTWFrZScsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgIFN1Ym1pdEFkdmljZVRleHQgPT4gJ05PVEU6IElmIHlvdSBzdWJtaXQgdGhlIGZvcm0gLi4uJywKICAgICAgICAgICAgICAgICAgICAgICAgU3VibWl0QnV0dG9uVGV4dCA9PiAnTWFrZSBhbiBpbnF1aXJ5JywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIFByb2Nlc3NTdGF0ZSAgICA9PiBbJ0FjdGl2ZSddLAogICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgPT4gWydBZ2VudEludGVyZmFjZSddLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgPT4gJ1Byb2Nlc3NMaXN0KCkgKHZhbGlkIENvbmZpZywgd3JvbmcgSW50ZXJmYWNlKScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICA9PiAnUmVzdWx0JywKICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgID0+IHt9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTGlzdCBvbiB2YWxpZCBDb25maWcsIHJpZ2h0IGludGVyZmFjZQogICAgewogICAgICAgIFByb2Nlc3NMaXN0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6QWN0aXZpdHlEaWFsb2cnID0+IHsKICAgICAgICAgICAgICAgICAgICAnQUQxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSAgICAgICAgPT4gWydBZ2VudEludGVyZmFjZSddLAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdBY3Rpdml0eSBEaWFsb2cgMScsCiAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJ0FEMSBQcm9jZXNzIFNob3J0JywKICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICA9PiAnQUQxIFByb2Nlc3MgTG9uZyBkZXNjcmlwdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgPT4gJzA3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+ICcyJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICA9PiAnMDgtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gJzMnLAogICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZF9NYWtlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICAgICAgICAgID0+IDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICA9PiAnTWFrZSBMb25nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICdNYWtlIFNob3J0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkT3JkZXIgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF9NYWtlJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgU3VibWl0QWR2aWNlVGV4dCA9PiAnTk9URTogSWYgeW91IHN1Ym1pdCB0aGUgZm9ybSAuLi4nLAogICAgICAgICAgICAgICAgICAgICAgICBTdWJtaXRCdXR0b25UZXh0ID0+ICdNYWtlIGFuIGlucXVpcnknLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgUHJvY2Vzc1N0YXRlICAgID0+IFsnQWN0aXZlJ10sCiAgICAgICAgICAgIEludGVyZmFjZSAgICAgICA9PiBbJ0FnZW50SW50ZXJmYWNlJ10sCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc0xpc3QoKSAodmFsaWQgQ29uZmlnLCByaWdodCBJbnRlcmZhY2UpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgID0+ICdSZXN1bHQnLAogICAgICAgICAgICBSZXN1bHQgICAgICAgICAgPT4geyAnUDEnID0+ICdCb29rIE9yZGVycycgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFByb2Nlc3NTdGFydHBvaW50R2V0IG9uIGludmFsaWQgQ29uZmlnCiAgICB7CiAgICAgICAgUHJvY2Vzc1N0YXJ0cG9pbnRHZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAnUDEnLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgPT4gJ1Byb2Nlc3NTdGFydHBvaW50R2V0KCkgKGludmFsaWQgU3RhcnQpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBQcm9jZXNzU3RhcnRwb2ludEdldCBvbiB2YWxpZCBDb25maWcKICAgIHsKICAgICAgICBQcm9jZXNzU3RhcnRwb2ludEdldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzU3RhcnRwb2ludEdldCgpICh2YWxpZCBTdGFydCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ1Jlc3VsdCcsCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBBY3Rpdml0eXNldCAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBUcmFuc2l0aW9uIG9uIG1pc3NpbmcgUHJvY2Vzc0VudGl0eUlECiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gdW5kZWYsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgICA9PiAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobWlzc2luZyBQcm9jZXNzRW50aXR5SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiBvbiBtaXNzaW5nIEFjdGl2aXR5RW50aXR5SUQKICAgIHsKICAgICAgICBQcm9jZXNzVHJhbnNpdGlvbiA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+IHVuZGVmLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgID0+ICdQcm9jZXNzVHJhbnNpdGlvbigpIChtaXNzaW5nIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiBvbiBtaXNzaW5nIFRpY2tldElECiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gJ1AxJywKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTEnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+IHVuZGVmLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICAgPT4gJ1Byb2Nlc3NUcmFuc2l0aW9uKCkgKG1pc3NpbmcgVGlja2V0SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiBvbiBtaXNzaW5nIFVzZXJJRAogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICAgPT4gJ1Byb2Nlc3NUcmFuc2l0aW9uKCkgKG1pc3NpbmcgVXNlcklEKScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICAgPT4gJ0ZhbHNlJywKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIFRyYW5zaXRpb24gb24gaW52YWxpZCBUaWNrZXRJRAogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICAgPT4gJ1Byb2Nlc3NUcmFuc2l0aW9uKCkgKGludmFsaWQgVGlja2V0SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiBvbiBpbnZhbGlkIFByb2Nlc3MgQ29uZmlndXJhdGlvbgogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gJ1AxJywKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTEnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgID0+ICdQcm9jZXNzVHJhbnNpdGlvbigpIChpbnZhbGlkIFByb2Nlc3MgQ29uZmlndXJhdGlvbiknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgICAgIH0KICAgIH0sCgogICAgIyBUcmFuc2l0aW9uIG9uIG1pc3NpbmcgQWN0aXZpdHNldHMgaW4gUHJvY2Vzcy0+UGF0aAogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgICA9PiAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobWlzc2luZyByZXF1aXJlZCBBY3Rpdml0eSBpbiBQYXRoIENvbmZpZyknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgICAgIERlYnVnICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIFRyYW5zaXRpb24gb24gbm8gbWF0Y2hpbmcgVHJhbnNpdGlvbgogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpUcmFuc2l0aW9uJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVHJhbnNpdGlvbiAxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmQxID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAnOTk5OTk5OTk5OTk5OTk5OTk5OTknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICA9PiAnUHJvY2VzcyBVbml0dGVzdCBUZXN0dGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVHJhbnNpdGlvbiAyJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmQxID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAnOTk5OTk5OTk5OTk5OTk5OTk5OTknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICA9PiAnUHJvY2VzcyBVbml0dGVzdCBUZXN0dGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICAgPT4gJ1Byb2Nlc3NUcmFuc2l0aW9uKCkgKG5vIG1hdGNoaW5nIFRyYW5zaXRpb24pJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgICAgICBEZWJ1ZyAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0KICAgIH0sCgogICAgIyBUcmFuc2l0aW9uIG9uIG1hdGNoaW5nIFRyYW5zaXRpb24gQ2hlY2sgT25seQogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpUcmFuc2l0aW9uJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVHJhbnNpdGlvbiAxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmQxID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAnOTk5OTk5OTk5OTk5OTk5OTk5OTknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICA9PiAnUHJvY2VzcyBVbml0dGVzdCBUZXN0dGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVHJhbnNpdGlvbiAyJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmQxID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAxIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAyIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0EzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAzIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0E0JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSA0IG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hlY2tPbmx5ICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgID0+ICdQcm9jZXNzVHJhbnNpdGlvbigpIChtYXRjaGluZyBUcmFuc2l0aW9uIENoZWNrIE9ubHkpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgICA9PiAnUmVzdWx0JywKICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiBvbiBtYXRjaGluZyBUcmFuc2l0aW9uIGNoYW5nZSBBY3Rpdml0eUVudGl0eUlEIG9uIFRpY2tldAogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpUcmFuc2l0aW9uJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVHJhbnNpdGlvbiAxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmQxID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAnOTk5OTk5OTk5OTk5OTk5OTk5OTknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICA9PiAnUHJvY2VzcyBVbml0dGVzdCBUZXN0dGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVHJhbnNpdGlvbiAyJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmQxID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAxIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAyIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0EzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAzIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0E0JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSA0IG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hlY2tPbmx5ICAgICAgICA9PiAwLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgID0+ICdQcm9jZXNzVHJhbnNpdGlvbigpIChtYXRjaGluZyBUcmFuc2l0aW9uIGNoYW5nZSBBY3Rpdml0eUVudGl0eUlEKScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICAgPT4gJ1RydWUnLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0IG9uIG5vIEFjdGl2aXR5RW50aXR5SUQKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+IHVuZGVmLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAnUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0KCkgKFNldCBBY3Rpdml0eUVudGl0eUlEIG9uIFRpY2tldCB3aXRoIG5vIEFjdGl2aXR5RW50aXR5SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgPT4gJ0ZhbHNlJywKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCBvbiBubyBQcm9jZXNzRW50aXR5SUQKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiB1bmRlZiwKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAnUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0KCkgKFNldCBBY3Rpdml0eUVudGl0eUlEIG9uIFRpY2tldCB3aXRoIG5vIFByb2Nlc3NFbnRpdHlJRCknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnRmFsc2UnLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0IG9uIG5vIFRpY2tldElECiAgICB7CiAgICAgICAgUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6QWN0aXZpdHknID0+IHsKICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDEgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gJ1AxJywKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+IHVuZGVmLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICdQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQoKSAoU2V0IEFjdGl2aXR5RW50aXR5SUQgb24gVGlja2V0IHdpdGggbm8gVGlja2V0SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgPT4gJ0ZhbHNlJywKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCBvbiBpbnZhbGlkIEFjdGl2aXR5RW50aXR5SUQKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICdQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQoKSAoU2V0IEFjdGl2aXR5RW50aXR5SUQgb24gVGlja2V0IHdpdGggaW52YWxpZCBBY3Rpdml0eUVudGl0eUlEKScsCiAgICAgICAgICAgIFRlc3RUeXBlID0+ICdGYWxzZScsCiAgICAgICAgICAgIH0KICAgIH0sCgogICAgIyBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgb24gaW52YWxpZCBQcm9jZXNzRW50aXR5SUQKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDInLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICdQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQoKSAoU2V0IEFjdGl2aXR5RW50aXR5SUQgb24gVGlja2V0IHdpdGggaW52YWxpZCBQcm9jZXNzRW50aXR5SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgPT4gJ0ZhbHNlJywKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCBvbiB2YWxpZCBDb25maWcKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICdQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQoKSAoU2V0IEFjdGl2aXR5RW50aXR5SUQgb24gVGlja2V0IHdpdGggdmFsaWQgQ29uZmlnKScsCiAgICAgICAgICAgIFRlc3RUeXBlID0+ICdUcnVlJywKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIFByb2Nlc3NUaWNrZXRQcm9jZXNzU2V0IG9uIGludmFsaWQgQ29uZmlnCiAgICB7CiAgICAgICAgUHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMTcnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJ1Byb2Nlc3NUaWNrZXRQcm9jZXNzU2V0KCkgKFNldCBQcm9jZXNzRW50aXR5SUQgb24gVGlja2V0IHdpdGggaW52YWxpZCBQcm9jZXNzRW50aXR5SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgPT4gJ0ZhbHNlJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIFByb2Nlc3NUaWNrZXRQcm9jZXNzU2V0IG9uIGludmFsaWQgVGlja2V0SUQKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0UHJvY2Vzc1NldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgID0+IHVuZGVmLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJ1Byb2Nlc3NUaWNrZXRQcm9jZXNzU2V0KCkgKFNldCBQcm9jZXNzRW50aXR5SUQgb24gVGlja2V0IHdpdGggaW52YWxpZCBUaWNrZXRJRCknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnRmFsc2UnLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgUHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQgb24gdmFsaWQgQ29uZmlnCiAgICB7CiAgICAgICAgUHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAnUHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQoKSAoU2V0IFByb2Nlc3NFbnRpdHlJRCBvbiBUaWNrZXQgd2l0aCB2YWxpZCBDb25maWcpJywKICAgICAgICAgICAgVGVzdFR5cGUgPT4gJ1RydWUnLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiArIFF1ZXVlTW92ZSBUcmFuc2l0aW9uQWN0aW9uIG9uIG1hdGNoaW5nIFRyYW5zaXRpb24gY2hhbmdlIEFjdGl2aXR5RW50aXR5SUQgb24gVGlja2V0CiAgICAjIGFuZCBtb3ZlIGl0IHRvIFF1ZXVlMQogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpUcmFuc2l0aW9uJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVHJhbnNpdGlvbiAxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmQxID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAnOTk5OTk5OTk5OTk5OTk5OTk5OTknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICA9PiAnUHJvY2VzcyBVbml0dGVzdCBUZXN0dGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVHJhbnNpdGlvbiAyJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmQxID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb25BY3Rpb24gPT4gWydUQTEnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6QWN0aXZpdHknID0+IHsKICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDEgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDIgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnQTMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDMgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnQTQnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDQgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6VHJhbnNpdGlvbkFjdGlvbicgPT4gewogICAgICAgICAgICAgICAgICAgICdUQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUXVldWUgTW92ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6VHJhbnNpdGlvbkFjdGlvbjo6VGlja2V0UXVldWVTZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gJFF1ZXVlRGF0YTF7TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ1RBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdRdWV1ZSBNb3ZlJywKICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uOjpUaWNrZXRRdWV1ZVNldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiAkUXVldWVEYXRhMntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnVEEzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1F1ZXVlIE1vdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGUgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb25BY3Rpb246OlRpY2tldFF1ZXVlU2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+ICRRdWV1ZURhdGEze05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoZWNrT25seSAgICAgICAgPT4gMCwKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJ1Byb2Nlc3NUcmFuc2l0aW9uKCkgKG1hdGNoaW5nIFRyYW5zaXRpb24gY2hhbmdlIEFjdGl2aXR5RW50aXR5SUQgYW5kIEFjdGlvbiBRdWV1ZSBNb3ZlIHRvIE1pc2MpJywKICAgICAgICAgICAgVGVzdFR5cGUgPT4gJ1RydWUnLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiArIFF1ZXVlTW92ZSBUcmFuc2l0aW9uQWN0aW9uIG9uIG1hdGNoaW5nIFRyYW5zaXRpb24gY2hhbmdlIEFjdGl2aXR5RW50aXR5SUQgb24gVGlja2V0IDEKICAgICMgYmFjayB0byBBMSBhbmQgbW92ZSBpdCBiYWNrIHRvIFF1ZXVlMwogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpUcmFuc2l0aW9uJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVHJhbnNpdGlvbiAxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmQxID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAnOTk5OTk5OTk5OTk5OTk5OTk5OTknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICA9PiAnUHJvY2VzcyBVbml0dGVzdCBUZXN0dGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVHJhbnNpdGlvbiAyJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmQxID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnVDQnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgPT4gJ1Byb2Nlc3MgVW5pdHRlc3QgVGVzdHRpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJRCAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbkFjdGlvbiA9PiBbJ1RBMSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUNCcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb25BY3Rpb24gPT4gWydUQTMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMiBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMyBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBNCcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgNCBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpUcmFuc2l0aW9uQWN0aW9uJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1RBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdRdWV1ZSBNb3ZlJywKICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uOjpUaWNrZXRRdWV1ZVNldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiAkUXVldWVEYXRhMXtOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnVEEyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1F1ZXVlIE1vdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGUgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb25BY3Rpb246OlRpY2tldFF1ZXVlU2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+ICRRdWV1ZURhdGEye05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdUQTMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUXVldWUgTW92ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6VHJhbnNpdGlvbkFjdGlvbjo6VGlja2V0UXVldWVTZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gJFF1ZXVlRGF0YTN7TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hlY2tPbmx5ICAgICAgICA9PiAwLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobWF0Y2hpbmcgVHJhbnNpdGlvbiBjaGFuZ2UgQWN0aXZpdHlFbnRpdHlJRCBhbmQgVHJhbnNpdGlvbkFjdGlvbiBRdWV1ZSBNb3ZlIHRvIFJhdyknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnVHJ1ZScsCiAgICAgICAgICAgIH0KICAgIH0sCgogIyBUcmFuc2l0aW9uICsgVGlja2V0U2VydmljZVNldCArIFRpY2tldFNMQVNldCBUcmFuc2l0aW9uQWN0aW9uIG9uIG1hdGNoaW5nIFRyYW5zaXRpb24gY2hhbmdlIFNlcnZpY2UgYW5kIFNMQSBvbiBUaWNrZXQKICAgIHsKICAgICAgICBQcm9jZXNzVHJhbnNpdGlvbiA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6VHJhbnNpdGlvbicgPT4gewogICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1RyYW5zaXRpb24gMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kMSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRzID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICA9PiAnUHJvY2VzcyBVbml0dGVzdCBUZXN0dGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb25BY3Rpb24gPT4gWyAnVEExJywgJ1RBMicgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4ge30sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6QWN0aXZpdHknID0+IHsKICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDEgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDIgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OlRyYW5zaXRpb25BY3Rpb24nID0+IHsKICAgICAgICAgICAgICAgICAgICAnVEExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NlcnZpY2UgU2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uOjpUaWNrZXRTZXJ2aWNlU2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdUQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU0xBIFNldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6VHJhbnNpdGlvbkFjdGlvbjo6VGlja2V0U0xBU2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMQUlEID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoZWNrT25seSAgICAgICAgPT4gMCwKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJ1Byb2Nlc3NUcmFuc2l0aW9uKCkgKG1hdGNoaW5nIFRyYW5zaXRpb24gQWN0aW9ucyBTZXJ2aWNlIFNldCBhbmQgU0xBIFNldCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICA9PiAnVGlja2V0VmFsdWVzJywKICAgICAgICAgICAgRXhwZWN0ZWRSZXN1bHQgPT4gewogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgPT4gJFNMQUlELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAopOwoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKICAgIGlmICggJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0gKSB7CgogICAgICAgICMgU2V0IENvbmZpZwogICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259e0NvbmZpZ30gKSApIHsKICAgICAgICAgICAgZm9yIG15ICRDb25maWcgKCBzb3J0IGtleXMgJXsgJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn17Q29uZmlnfSB9ICkgewogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn17Q29uZmlnfXskQ29uZmlnfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGF2ZSBhIHRlc3Qgd2l0aCBkZWJ1ZyBvbiwgd2UgbmVlZCBhIG5ldyBQcm9jZXNzT2JqZWN0CiAgICAgICAgIyB3aXRoIERlYnVnIHR1cm5lZCBvbgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn17RGVidWd9ICkgewogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IHVuZGVmOwogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2Vzcy0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAlQ29tbW9uT2JqZWN0LAogICAgICAgICAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgICAgICAgICBEZWJ1ZyAgICAgICAgPT4gJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn17RGVidWd9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBleGN1c2UgcHJvY2VzcyBvYmplY3QgY2FsbAogICAgICAgIG15ICRSZXN1bHQgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc1RyYW5zaXRpb24oICV7ICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259IH0gKTsKCiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NUcmFuc2l0aW9ufXtUZXN0VHlwZX0gZXEgJ0ZhbHNlJyApIHsKCiAgICAgICAgICAgICMgUHJvY2Vzc1RyYW5zaXRpb24gLSBDaGVjayBvbiBGYWxzZQogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn17TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn17VGVzdFR5cGV9IGVxICdUcnVlJyApIHsKCiAgICAgICAgICAgICMgUHJvY2Vzc1RyYW5zaXRpb24gLSBDaGVjayBvbiBUcnVlCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259e1Rlc3RUeXBlfSBlcSAnUmVzdWx0JyApIHsKICAgICAgICAgICAgbXkgJEV4cGVjdGVkUmVzdWx0ID0gJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn17UmVzdWx0fTsKCiAgICAgICAgICAgICMgUHJvY2Vzc1RyYW5zaXRpb24gLSBDaGVjayBnaXZlbiBhbmQgZXhwZWN0ZWQgcmVzdWx0CiAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgICRSZXN1bHQsCiAgICAgICAgICAgICAgICAkRXhwZWN0ZWRSZXN1bHQsCiAgICAgICAgICAgICAgICAkVGVzdC0+e1Byb2Nlc3NUcmFuc2l0aW9ufXtNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NUcmFuc2l0aW9ufS0+e1Rlc3RUeXBlfSBlcSAnVGlja2V0VmFsdWVzJyApIHsKCiAgICAgICAgICAgICMgUHJvY2Vzc1RybnNpdGlvbiAtIENoZWNrIHRpY2tldCB2YWx1ZXMgYWZ0ZXIgYWxsIHRyYW5zaXRpb24gYWN0aW9ucwogICAgICAgICAgICBteSAlVGlja2V0ID0gJENvbW1vbk9iamVjdHtUaWNrZXRPYmplY3R9LT5UaWNrZXRHZXQoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259LT57RXhwZWN0ZWRSZXN1bHR9IH0gKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJFRpY2tldHskQXR0cmlidXRlfSAvLyAnJywKICAgICAgICAgICAgICAgICAgICAkVGVzdC0+e1Byb2Nlc3NUcmFuc2l0aW9ufS0+e0V4cGVjdGVkUmVzdWx0fS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICIkVGVzdC0+e1Byb2Nlc3NUcmFuc2l0aW9ufS0+e01lc3NhZ2V9IC0gVGlja2V0ICRBdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYWQgYSB0ZXN0IHdpdGggZGVidWcgb24sIHJlc3RvcmUgUHJvY2Vzc09iamVjdCB0byBkZWZhdWx0CiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NUcmFuc2l0aW9ufXtEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRUZXN0LT57UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXR9ICkgewoKICAgICAgICAjIFNldCBDb25maWcKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRQcm9jZXNzU2V0fXtDb25maWd9ICkgKSB7CiAgICAgICAgICAgIGZvciBteSAkQ29uZmlnICggc29ydCBrZXlzICV7ICRUZXN0LT57UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXR9e0NvbmZpZ30gfSApIHsKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+IHt9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRUZXN0LT57UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXR9e0NvbmZpZ317JENvbmZpZ30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIElmIHdlIGhhdmUgYSB0ZXN0IHdpdGggZGVidWcgb24sIHdlIG5lZWQgYSBuZXcgUHJvY2Vzc09iamVjdAogICAgICAgICMgd2l0aCBEZWJ1ZyB0dXJuZWQgb24KICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXR9e0RlYnVnfSApIHsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSB1bmRlZjsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgJUNvbW1vbk9iamVjdCwKICAgICAgICAgICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgICAgICAgICAgRGVidWcgICAgICAgID0+ICRUZXN0LT57UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXR9e0RlYnVnfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZXhlY3V0ZSBwcm9jZXNzIG9iamVjdCBjYWxsCiAgICAgICAgbXkgJFJlc3VsdCA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzVGlja2V0UHJvY2Vzc1NldCggJXsgJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH0gfSApOwoKICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXR9e1Rlc3RUeXBlfSBlcSAnRmFsc2UnICkgewoKICAgICAgICAgICAgIyBQcm9jZXNzVGlja2V0UHJvY2Vzc1NldCAtIENoZWNrIG9uIEZhbHNlCiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRSZXN1bHQsCiAgICAgICAgICAgICAgICAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRQcm9jZXNzU2V0fXtNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRQcm9jZXNzU2V0fXtUZXN0VHlwZX0gZXEgJ1RydWUnICkgewoKICAgICAgICAgICAgIyBQcm9jZXNzVGlja2V0UHJvY2Vzc1NldCAtIENoZWNrIG9uIFRydWUKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH17TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIElmIHdlIGhhZCBhIHRlc3Qgd2l0aCBkZWJ1ZyBvbiwgcmVzdG9yZSBQcm9jZXNzT2JqZWN0IHRvIGRlZmF1bHQKICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXR9e0RlYnVnfSApIHsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSB1bmRlZjsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgJUNvbW1vbk9iamVjdCwKICAgICAgICAgICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXR9ICkgewoKICAgICAgICAjIFNldCBDb25maWcKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH17Q29uZmlnfSApICkgewogICAgICAgICAgICBmb3IgbXkgJENvbmZpZyAoIHNvcnQga2V5cyAleyAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH17Q29uZmlnfSB9ICkgewogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFRlc3QtPntQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXR9e0NvbmZpZ317JENvbmZpZ30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIElmIHdlIGhhdmUgYSB0ZXN0IHdpdGggZGVidWcgb24sIHdlIG5lZWQgYSBuZXcgUHJvY2Vzc09iamVjdAogICAgICAgICMgd2l0aCBEZWJ1ZyB0dXJuZWQgb24KICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0fXtEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgICAgIERlYnVnICAgICAgICA9PiAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH17RGVidWd9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBleGVjdXRlIHByb2Nlc3Mgb2JqZWN0IGNhbGwKICAgICAgICBteSAkUmVzdWx0ID0gJFByb2Nlc3NPYmplY3QtPlByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCggJXsgJFRlc3QtPntQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXR9IH0gKTsKCiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH17VGVzdFR5cGV9IGVxICdGYWxzZScgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCAtIENoZWNrIG9uIEZhbHNlCiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRSZXN1bHQsCiAgICAgICAgICAgICAgICAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH17TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXR9e1Rlc3RUeXBlfSBlcSAnVHJ1ZScgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCAtIENoZWNrIG9uIFRydWUKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXR9e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYWQgYSB0ZXN0IHdpdGggZGVidWcgb24sIHJlc3RvcmUgUHJvY2Vzc09iamVjdCB0byBkZWZhdWx0CiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH17RGVidWd9ICkgewogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IHVuZGVmOwogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2Vzcy0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAlQ29tbW9uT2JqZWN0LAogICAgICAgICAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NMaXN0fSApIHsKCiAgICAgICAgIyBTZXQgQ29uZmlnCiAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFRlc3QtPntQcm9jZXNzTGlzdH17Q29uZmlnfSApICkgewogICAgICAgICAgICBmb3IgbXkgJENvbmZpZyAoIHNvcnQga2V5cyAleyAkVGVzdC0+e1Byb2Nlc3NMaXN0fXtDb25maWd9IH0gKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e1Byb2Nlc3NMaXN0fXtDb25maWd9eyRDb25maWd9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYXZlIGEgdGVzdCB3aXRoIGRlYnVnIG9uLCB3ZSBuZWVkIGEgbmV3IFByb2Nlc3NPYmplY3QKICAgICAgICAjIHdpdGggRGVidWcgdHVybmVkIG9uCiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NMaXN0fXtEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgICAgIERlYnVnICAgICAgICA9PiAkVGVzdC0+e1Byb2Nlc3NMaXN0fXtEZWJ1Z30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGV4ZWN1dGUgcHJvY2VzcyBvYmplY3QgY2FsbAogICAgICAgIG15ICRSZXN1bHQgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc0xpc3QoICV7ICRUZXN0LT57UHJvY2Vzc0xpc3R9IH0gKTsKCiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NMaXN0fXtUZXN0VHlwZX0gZXEgJ0ZhbHNlJyApIHsKCiAgICAgICAgICAgICMgUHJvY2Vzc0xpc3QgLSBDaGVjayBvbiBGYWxzZQogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzTGlzdH17TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzTGlzdH17VGVzdFR5cGV9IGVxICdUcnVlJyApIHsKCiAgICAgICAgICAgICMgUHJvY2Vzc0xpc3QgLSBDaGVjayBvbiBUcnVlCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc0xpc3R9e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRUZXN0LT57UHJvY2Vzc0xpc3R9e1Rlc3RUeXBlfSBlcSAnUmVzdWx0JyApIHsKICAgICAgICAgICAgbXkgJEV4cGVjdGVkUmVzdWx0ID0gJFRlc3QtPntQcm9jZXNzTGlzdH17UmVzdWx0fTsKCiAgICAgICAgICAgICMgUHJvY2Vzc0xpc3QgLSBDaGVjayBnaXZlbiBhbmQgZXhwZWN0ZWQgcmVzdWx0CiAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgICRSZXN1bHQsCiAgICAgICAgICAgICAgICAkRXhwZWN0ZWRSZXN1bHQsCiAgICAgICAgICAgICAgICAkVGVzdC0+e1Byb2Nlc3NMaXN0fXtNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGFkIGEgdGVzdCB3aXRoIGRlYnVnIG9uLCByZXN0b3JlIFByb2Nlc3NPYmplY3QgdG8gZGVmYXVsdAogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzTGlzdH17RGVidWd9ICkgewogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IHVuZGVmOwogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2Vzcy0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAlQ29tbW9uT2JqZWN0LAogICAgICAgICAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NHZXR9ICkgewoKICAgICAgICAjIFNldCBDb25maWcKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkVGVzdC0+e1Byb2Nlc3NHZXR9e0NvbmZpZ30gKSApIHsKICAgICAgICAgICAgZm9yIG15ICRDb25maWcgKCBzb3J0IGtleXMgJXsgJFRlc3QtPntQcm9jZXNzR2V0fXtDb25maWd9IH0gKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e1Byb2Nlc3NHZXR9e0NvbmZpZ317JENvbmZpZ30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIElmIHdlIGhhdmUgYSB0ZXN0IHdpdGggZGVidWcgb24sIHdlIG5lZWQgYSBuZXcgUHJvY2Vzc09iamVjdAogICAgICAgICMgd2l0aCBEZWJ1ZyB0dXJuZWQgb24KICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc0dldH17RGVidWd9ICkgewogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IHVuZGVmOwogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2Vzcy0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAlQ29tbW9uT2JqZWN0LAogICAgICAgICAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgICAgICAgICBEZWJ1ZyAgICAgICAgPT4gJFRlc3QtPntQcm9jZXNzR2V0fXtEZWJ1Z30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGV4ZWN1dGUgcHJvY2VzcyBvYmplY3QgY2FsbAogICAgICAgIG15ICRSZXN1bHQgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc0dldCggJXsgJFRlc3QtPntQcm9jZXNzR2V0fSB9ICk7CgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzR2V0fXtUZXN0VHlwZX0gZXEgJ0ZhbHNlJyApIHsKCiAgICAgICAgICAgICMgUHJvY2Vzc0dldCAtIENoZWNrIG9uIEZhbHNlCiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRSZXN1bHQsCiAgICAgICAgICAgICAgICAkVGVzdC0+e1Byb2Nlc3NHZXR9e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRUZXN0LT57UHJvY2Vzc0dldH17VGVzdFR5cGV9IGVxICdUcnVlJyApIHsKCiAgICAgICAgICAgICMgUHJvY2Vzc0dldCAtIENoZWNrIG9uIFRydWUKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzR2V0fXtNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NHZXR9e1Rlc3RUeXBlfSBlcSAnUmVzdWx0JyApIHsKICAgICAgICAgICAgbXkgJEV4cGVjdGVkUmVzdWx0ID0gJFRlc3QtPntQcm9jZXNzR2V0fXtSZXN1bHR9OwoKICAgICAgICAgICAgIyBQcm9jZXNzR2V0IC0gQ2hlY2sgZ2l2ZW4gYW5kIGV4cGVjdGVkIHJlc3VsdAogICAgICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJEV4cGVjdGVkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzR2V0fXtNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGFkIGEgdGVzdCB3aXRoIGRlYnVnIG9uLCByZXN0b3JlIFByb2Nlc3NPYmplY3QgdG8gZGVmYXVsdAogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzTGlzdH17RGVidWd9ICkgewogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IHVuZGVmOwogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2Vzcy0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAlQ29tbW9uT2JqZWN0LAogICAgICAgICAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fSApIHsKCiAgICAgICAgIyBTZXQgQ29uZmlnCiAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFRlc3QtPntQcm9jZXNzU3RhcnRwb2ludEdldH17Q29uZmlnfSApICkgewogICAgICAgICAgICBmb3IgbXkgJENvbmZpZyAoIHNvcnQga2V5cyAleyAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fXtDb25maWd9IH0gKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fXtDb25maWd9eyRDb25maWd9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYXZlIGEgdGVzdCB3aXRoIGRlYnVnIG9uLCB3ZSBuZWVkIGEgbmV3IFByb2Nlc3NPYmplY3QKICAgICAgICAjIHdpdGggRGVidWcgdHVybmVkIG9uCiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fXtEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgICAgIERlYnVnICAgICAgICA9PiAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fXtEZWJ1Z30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGV4ZWN1dGUgcHJvY2VzcyBvYmplY3QgY2FsbAogICAgICAgIG15ICRSZXN1bHQgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc1N0YXJ0cG9pbnRHZXQoICV7ICRUZXN0LT57UHJvY2Vzc1N0YXJ0cG9pbnRHZXR9IH0gKTsKCiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fXtUZXN0VHlwZX0gZXEgJ0ZhbHNlJyApIHsKCiAgICAgICAgICAgICMgUHJvY2Vzc1N0YXJ0cG9pbnRHZXQgLSBDaGVjayBvbiBGYWxzZQogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzU3RhcnRwb2ludEdldH17TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzU3RhcnRwb2ludEdldH17VGVzdFR5cGV9IGVxICdUcnVlJyApIHsKCiAgICAgICAgICAgICMgUHJvY2Vzc1N0YXJ0cG9pbnRHZXQgLSBDaGVjayBvbiBUcnVlCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc1N0YXJ0cG9pbnRHZXR9e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYWQgYSB0ZXN0IHdpdGggZGVidWcgb24sIHJlc3RvcmUgUHJvY2Vzc09iamVjdCB0byBkZWZhdWx0CiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fXtEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Cn0KCiMgY2xlYW51cCBpcyBkb25lIGJ5IFJlc3RvcmVEYXRhYmFzZQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L1RpY2tldC9UaWNrZXRBQ0wudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRVc2VyT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwpteSAkQ3VzdG9tZXJVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpOwpteSAkU2VydmljZU9iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKbXkgJFF1ZXVlT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwpteSAkVHlwZU9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKbXkgJFByaW9yaXR5T2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScpOwpteSAkU0xBT2JqZWN0ICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwpteSAkU3RhdGVPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRlJyk7Cm15ICREeW5hbWljRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7Cm15ICRTdG9yYWJsZU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RvcmFibGUnKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgc2V0IHZhbGlkIG9wdGlvbnMKbXkgJVZhbGlkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKJVZhbGlkTGlzdCA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiMgc2V0IHVzZXIgb3B0aW9ucwpteSAkVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICBHcm91cHMgPT4gWydhZG1pbiddLAopIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCm15ICRVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAopOwpteSAlVXNlckRhdGEgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKKTsKbXkgJE5ld1VzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgR3JvdXBzID0+IFsnYWRtaW4nXSwKKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgpteSAkTmV3VXNlcklEID0gJFVzZXJPYmplY3QtPlVzZXJMb29rdXAoCiAgICBVc2VyTG9naW4gPT4gJE5ld1VzZXJMb2dpbiwKKTsKbXkgJU5ld1VzZXJEYXRhID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgVXNlcklEID0+ICROZXdVc2VySUQsCik7CgojIHNldCBjdXN0b21lciB1c2VyIG9wdGlvbnMKbXkgJEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpCiAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7CgpteSAlQ3VzdG9tZXJVc2VyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICBVc2VyID0+ICRDdXN0b21lclVzZXJMb2dpbiwKKTsKCm15ICROZXdDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKQogICAgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IGN1c3RvbWVyIHVzZXIiOwoKbXkgJU5ld0N1c3RvbWVyVXNlckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgVXNlciA9PiAkTmV3Q3VzdG9tZXJVc2VyTG9naW4sCik7CgpteSAkUmFuZG9tSUQgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwoKIyBzZXQgcXVldWUgb3B0aW9ucwpteSAkUXVldWVOYW1lID0gJ1F1ZXVlXycgLiAkUmFuZG9tSUQ7Cm15ICRRdWV1ZUlEICAgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKAogICAgTmFtZSAgICAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICBWYWxpZElEICAgICAgICAgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIEdyb3VwSUQgICAgICAgICA9PiAxLAogICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICBTYWx1dGF0aW9uSUQgICAgPT4gMSwKICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgQ29tbWVudCAgICAgICAgID0+ICdTb21lIGNvbW1lbnQnLAogICAgVXNlcklEICAgICAgICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRRdWV1ZUlELAogICAgIlF1ZXVlQWRkKCkgSUQgKCRRdWV1ZUlEKSBhZGRlZCBzdWNjZXNzZnVsbHkiCik7CgpteSAkTmV3UXVldWVOYW1lID0gJ05ld1F1ZXVlXycgLiAkUmFuZG9tSUQ7Cm15ICROZXdRdWV1ZUlEICAgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKAogICAgTmFtZSAgICAgICAgICAgID0+ICROZXdRdWV1ZU5hbWUsCiAgICBWYWxpZElEICAgICAgICAgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIEdyb3VwSUQgICAgICAgICA9PiAxLAogICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICBTYWx1dGF0aW9uSUQgICAgPT4gMSwKICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgQ29tbWVudCAgICAgICAgID0+ICdTb21lIGNvbW1lbnQnLAogICAgVXNlcklEICAgICAgICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICROZXdRdWV1ZUlELAogICAgIlF1ZXVlQWRkKCkgSUQgKCROZXdRdWV1ZUlEKSBhZGRlZCBzdWNjZXNzZnVsbHkiCik7CgojIHNldCBzZXJ2aWNlIG9wdGlvbnMKbXkgJFNlcnZpY2VOYW1lID0gJ1NlcnZpY2VfJyAuICRSYW5kb21JRDsKbXkgJFNlcnZpY2VJRCAgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICBWYWxpZElEID0+ICRWYWxpZExpc3R7J3ZhbGlkJ30sCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTZXJ2aWNlSUQsCiAgICAiU2VydmljZUFkZCgpIElEICgkU2VydmljZUlEKSBhZGRlZCBzdWNjZXNzZnVsbHkiCik7CgpteSAkTmV3U2VydmljZU5hbWUgPSAnTmV3U2VydmljZV8nIC4gJFJhbmRvbUlEOwpteSAkTmV3U2VydmljZUlEICAgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgPT4gJE5ld1NlcnZpY2VOYW1lLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1NlcnZpY2VJRCwKICAgICJTZXJ2aWNlQWRkKCkgSUQgKCROZXdTZXJ2aWNlSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCiMgc2V0IHR5cGUgb3B0aW9ucwpteSAkVHlwZU5hbWUgPSAnVHlwZV8nIC4gJFJhbmRvbUlEOwpteSAkVHlwZUlEICAgPSAkVHlwZU9iamVjdC0+VHlwZUFkZCgKICAgIE5hbWUgICAgPT4gJFR5cGVOYW1lLAogICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0eyd2YWxpZCd9LAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVHlwZUlELAogICAgIlR5cGVBZGQoKSBJRCAoJFR5cGVJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKbXkgJE5ld1R5cGVOYW1lID0gJ05ld1R5cGVfJyAuICRSYW5kb21JRDsKbXkgJE5ld1R5cGVJRCAgID0gJFR5cGVPYmplY3QtPlR5cGVBZGQoCiAgICBOYW1lICAgID0+ICROZXdUeXBlTmFtZSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1R5cGVJRCwKICAgICJUeXBlQWRkKCkgSUQgKCROZXdUeXBlSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCiMgc2V0IHByaW9yaXR5IG9wdGlvbnMKbXkgJFByaW9yaXR5TmFtZSA9ICdQcmlvcml0eV8nIC4gJFJhbmRvbUlEOwpteSAkUHJpb3JpdHlJRCAgID0gJFByaW9yaXR5T2JqZWN0LT5Qcmlvcml0eUFkZCgKICAgIE5hbWUgICAgPT4gJFByaW9yaXR5TmFtZSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFByaW9yaXR5SUQsCiAgICAiUHJpb3JpdHlBZGQoKSBJRCAoJFByaW9yaXR5SUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICROZXdQcmlvcml0eU5hbWUgPSAnTmV3UHJpb3JpdHlfJyAuICRSYW5kb21JRDsKbXkgJE5ld1ByaW9yaXR5SUQgICA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlBZGQoCiAgICBOYW1lICAgID0+ICROZXdQcmlvcml0eU5hbWUsCiAgICBWYWxpZElEID0+ICRWYWxpZExpc3R7J3ZhbGlkJ30sCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICROZXdQcmlvcml0eUlELAogICAgIlByaW9yaXR5QWRkKCkgSUQgKCROZXdQcmlvcml0eUlEKSBhZGRlZCBzdWNjZXNzZnVsbHkiCik7CgojIHNldCBTTEEgb3B0aW9ucwpteSAkU0xBTmFtZSA9ICdTTEFfJyAuICRSYW5kb21JRDsKbXkgJFNMQUlEICAgPSAkU0xBT2JqZWN0LT5TTEFBZGQoCiAgICBOYW1lICAgID0+ICRTTEFOYW1lLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNMQUlELAogICAgIlNMQUFkZCgpIElEICgkU0xBSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICROZXdTTEFOYW1lID0gJ05ld1NMQV8nIC4gJFJhbmRvbUlEOwpteSAkTmV3U0xBSUQgICA9ICRTTEFPYmplY3QtPlNMQUFkZCgKICAgIE5hbWUgICAgPT4gJE5ld1NMQU5hbWUsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0eyd2YWxpZCd9LAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkTmV3U0xBSUQsCiAgICAiU0xBQWRkKCkgSUQgKCROZXdTTEFJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKIyBzZXQgc3RhdGUgb3B0aW9ucwpteSAkU3RhdGVOYW1lID0gJ1N0YXRlXycgLiAkUmFuZG9tSUQ7Cm15ICRTdGF0ZUlEICAgPSAkU3RhdGVPYmplY3QtPlN0YXRlQWRkKAogICAgTmFtZSAgICA9PiAkU3RhdGVOYW1lLAogICAgVmFsaWRJRCA9PiAxLAogICAgVHlwZUlEICA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU3RhdGVJRCwKICAgICJTdGF0ZUFkZCgpIElEICgkU3RhdGVJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKbXkgJE5ld1N0YXRlTmFtZSA9ICdOZXdTdGF0ZV8nIC4gJFJhbmRvbUlEOwpteSAkTmV3U3RhdGVJRCAgID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUFkZCgKICAgIE5hbWUgICAgPT4gJE5ld1N0YXRlTmFtZSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFR5cGVJRCAgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1N0YXRlSUQsCiAgICAiU3RhdGVBZGQoKSBJRCAoJE5ld1N0YXRlSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCiMgc2V0IGR5bmFtaWNfZmllbGQgb3B0aW9ucwpteSAkRHluYW1pY0ZpZWxkTmFtZSA9ICdEeW5hbWljRmllbGQnIC4gJFJhbmRvbUlEOwpteSAkRHluYW1pY0ZpZWxkSUQgICA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgIE5hbWUgICAgICAgPT4gJER5bmFtaWNGaWVsZE5hbWUsCiAgICBMYWJlbCAgICAgID0+ICdhIGRlc2NyaXB0aW9uJywKICAgIEZpZWxkT3JkZXIgPT4gOTk5OTksCiAgICBGaWVsZFR5cGUgID0+ICdUZXh0JywKICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICBDb25maWcgICAgID0+IHsKICAgICAgICBEZWZhdWx0VmFsdWUgPT4gJ0RlZmF1bHQnLAogICAgfSwKICAgIFJlb3JkZXIgPT4gMCwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJER5bmFtaWNGaWVsZElELAogICAgIkR5bmFtaWNGaWVsZEFkZCgpIElEICgkRHluYW1pY0ZpZWxkSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICREeW5hbWljRmllbGREYXRhID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgSUQgICAgID0+ICREeW5hbWljRmllbGRJRCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBUT0RPIGludGVncmF0ZSB0aGlzIHRlc3RzIHdpdGggZGF0YWJhc2UgdGVzdHMKIyBzZXQgdGVzdGluZyBBQ0xzIG9wdGlvbnMKbXkgJVRlc3RBQ0xzID0gKAogICAgJ1F1ZXVlLTEnID0+IHsKICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiBbJFF1ZXVlTmFtZV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgICdTZXJ2aWNlLTEnID0+IHsKICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgU2VydmljZSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lID0+IFskU2VydmljZU5hbWVdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnVHlwZS0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIFR5cGUgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiBbJFR5cGVOYW1lXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFF1ZXVlID0+IFsnUmF3J10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnQ3VzdG9tZXJVc2VyLTEnID0+IHsKICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+IHsKICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJEN1c3RvbWVyVXNlckxvZ2luXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ1ByaW9yaXR5LTEnID0+IHsKICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgUHJpb3JpdHkgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiBbJFByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ1JhdyddLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ1NMQS0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIFNMQSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lID0+IFskU0xBTmFtZV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgICdTdGF0ZS0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIFN0YXRlID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTdGF0ZU5hbWVdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgUXVldWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgICdPd25lci0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIE93bmVyID0+IHsKICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgICdSZXNwb25zaWJsZS0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIFJlc3BvbnNpYmxlID0+IHsKICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgICdGcm9udGVuZC0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIEZyb250ZW5kID0+IHsKICAgICAgICAgICAgICAgIEFjdGlvbiA9PiBbICdBZ2VudFRpY2tldFBob25lJywgJ0FnZW50VGlja2V0RW1haWwnIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgICdUaWNrZXQtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgUXVldWUgICAgPT4gWyRRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyRQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgU3RhdGUgICAgPT4gWyRTdGF0ZU5hbWVdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICBBY3Rpb24gPT4gWyAnQWdlbnRUaWNrZXRQaG9uZScsICdBZ2VudFRpY2tldEJvdW5jZScsIF0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnRHluYW1pY0ZpZWxkLTEnID0+IHsKICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZF9GaWVsZDEgPT4gWydJdGVtMSddLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCik7CgokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnVGlja2V0QWNsJywKICAgIFZhbHVlID0+IFwlVGVzdEFDTHMsCik7CgpteSAkR290QUNMcyA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QWNsJyk7CgojIHNhbml0eSBjaGVjawokU2VsZi0+SXNEZWVwbHkoCiAgICAkR290QUNMcywKICAgIFwlVGVzdEFDTHMsCiAgICAiQUNMcyBTZXQgYW5kIEdldCBmcm9tIHN5c2NvbmZpZyIsCik7CgpteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKIyBzZXQgdGlja2V0IG9wdGlvbnMKbXkgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgICA9PiAnU29tZSBUaWNrZXQgVGl0bGUnLAogICAgUXVldWUgICAgICAgICA9PiAkUXVldWVOYW1lLAogICAgU2VydmljZSAgICAgICA9PiAkU2VydmljZU5hbWUsCiAgICBUeXBlICAgICAgICAgID0+ICRUeXBlTmFtZSwKICAgIExvY2sgICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgID0+ICRQcmlvcml0eU5hbWUsCiAgICBTTEEgICAgICAgICAgID0+ICRTTEFOYW1lLAogICAgU3RhdGUgICAgICAgICA9PiAkU3RhdGVOYW1lLAogICAgQ3VzdG9tZXJJRCAgICA9PiAnMTIzNDY1JywKICAgIEN1c3RvbWVyVXNlciAgPT4gJEN1c3RvbWVyVXNlckxvZ2luLAogICAgT3duZXJJRCAgICAgICA9PiAkVXNlcklELAogICAgUmVzcG9uc2libGVJRCA9PiAkVXNlcklELAogICAgVXNlcklEICAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQsCiAgICAiVGlja2V0Q3JlYXRlKCkgSUQgKCRUaWNrZXRJRCkgY3JlYXRlZCBzdWNjZXNzZnVsbHkiLAopOwoKIyBzZXQgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUKbXkgJER5bmFtaWNGaWVsZFZhbHVlU2V0U3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGRWYWx1ZScpLT5WYWx1ZVNldCgKICAgIEZpZWxkSUQgID0+ICREeW5hbWljRmllbGRJRCwKICAgIE9iamVjdElEID0+ICRUaWNrZXRJRCwKICAgIFZhbHVlICAgID0+IFsKICAgICAgICB7CiAgICAgICAgICAgIFZhbHVlVGV4dCA9PiAnSXRlbTEnLAogICAgICAgIH0sCiAgICBdLAogICAgVXNlcklEID0+ICRVc2VySUQsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICREeW5hbWljRmllbGRWYWx1ZVNldFN1Y2Nlc3MsCiAgICAiRHluYW1pY0ZpZWxkIFZhbHVlU2V0KCkgZm9yIER5bmFtaWNGaWVsZCBJRCAoJER5bmFtaWNGaWVsZElEKSwgVGlja2V0IElEICgkVGlja2V0SUQpIgogICAgICAgIC4gInNldCBzdWNjZXNzZnVsbHkiLAopOwoKIyBkZWZpbmUgZm9ybSB1cGRhdGUgYmFzZWQgdGVzdHMKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFF1ZXVlLTEgLSB3cm9uZyBRdWV1ZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBRdWV1ZS0xIC0gd3JvbmcgcmV0dXJuIHR5cGUgKEFjdGlvbiknLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdXcm9uZycsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJFF1ZXVlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoICAgICA9PiAwLAogICAgICAgIFJldHVybkFjdGlvbkRhdGEgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFF1ZXVlLTEgLSB3cm9uZyByZXR1cm4gdHlwZSAoTm9uIEFjdGlvbiknLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdXcm9uZycsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkUXVldWVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFF1ZXVlLTEgLSB3cm9uZyByZXR1cm4gc3ViIHR5cGUnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdXcm9uZycsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJFF1ZXVlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBRdWV1ZS0xIC0gY29ycmVjdCBRdWV1ZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkUXVldWVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFF1ZXVlLTEgLSBjb3JyZWN0IFF1ZXVlSUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgU2VydmljZS0xIC0gY29ycmVjdCBTZXJ2aWNlJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFNlcnZpY2UgICAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFNlcnZpY2UtMSAtIGNvcnJlY3QgU2VydmljZUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBUeXBlLTEgLSBjb3JyZWN0IFR5cGUnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBUeXBlICAgICAgICAgID0+ICRUeXBlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBUeXBlLTEgLSBjb3JyZWN0IFR5cGVJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBDdXN0b21lclVzZXItMSAtIGNvcnJlY3QgQ3VzdG9tZXJVc2VyJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgID0+ICdTdGF0ZScsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRDdXN0b21lclVzZXJEYXRhe1VzZXJJRH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBQcmlvcml0eS0xIC0gY29ycmVjdCBQcmlvcml0eScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJFByaW9yaXR5TmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBQcmlvcml0eS0xIC0gY29ycmVjdCBQcmlvcml0eUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBTTEEtMSAtIGNvcnJlY3QgU0xBJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBTTEEgICAgICAgICAgID0+ICRTTEFOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFNMQS0xIC0gY29ycmVjdCBTTEFJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgU3RhdGUtMSAtIGNvcnJlY3QgU3RhdGUnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICRTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgU3RhdGUtMSAtIGNvcnJlY3QgU3RhdGVJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgT3duZXItMSAtIGNvcnJlY3QgT3duZXInLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIE93bmVyICAgICAgICAgPT4gJFVzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgT3duZXItMSAtIGNvcnJlY3QgT3duZXJJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgUmVzcG9uc2libGUtMSAtIGNvcnJlY3QgUmVzcG9uc2libGUnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFJlc3BvbnNpYmxlICAgPT4gJFVzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBSZXNwb25zaWJsZS0xIC0gY29ycmVjdCBSZXNwb25zaWJsZUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkVXNlcklELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgRnJvbnRlbmQtMSAtIGNvcnJlY3QgQWN0aW9uJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgPT4gJ0FnZW50VGlja2V0UGhvbmUnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFRpY2tldC0xIC0gY29ycmVjdCBUaWNrZXQgdXNpbmcgQWN0aW9uJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhICAgICAgICAgID0+ICctJywKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnQWN0aW9uJywKICAgICAgICAgICAgQWN0aW9uICAgICAgICA9PiAnQWdlbnRUaWNrZXRQaG9uZScsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoICAgICA9PiAxLAogICAgICAgIFJldHVybkFjdGlvbkRhdGEgPT4gewogICAgICAgICAgICAxID0+ICdBZ2VudFRpY2tldFBob25lJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBUaWNrZXQtMSAtIGNvcnJlY3QgVGlja2V0IHVzaW5nIERhdGEnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnQWdlbnRUaWNrZXRQaG9uZScsCiAgICAgICAgICAgICAgICAyID0+ICdBZ2VudFRpY2tldEJvdW5jZScsCiAgICAgICAgICAgICAgICAzID0+ICdBZ2VudFRpY2tldENvbXBvc2UnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCAgICAgPT4gMSwKICAgICAgICBSZXR1cm5BY3Rpb25EYXRhID0+IHsKICAgICAgICAgICAgMSA9PiAnQWdlbnRUaWNrZXRQaG9uZScsCiAgICAgICAgICAgIDIgPT4gJ0FnZW50VGlja2V0Qm91bmNlJywKICAgICAgICB9LAogICAgfSwKCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgRHluYW1pY0ZpZWxkLTEgLSBjb3JyZWN0IER5bmFtaWNGaWVsZCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCAgPT4gewogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkX0ZpZWxkMSA9PiBbJ0l0ZW0xJ10KICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgIH0sCiAgICB9LAopOwoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICBteSAkQ29uZmlnICAgICA9ICRUZXN0LT57Q29uZmlnfTsKICAgIG15ICRBQ0xTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKCAleyAkVGVzdC0+e0NvbmZpZ30gfSApOwoKICAgIGlmICggISRUZXN0LT57U3VjY2Vzc01hdGNofSApIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRBQ0xTdWNjZXNzLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBleGVjdXRlZCB3aXRoIEZhbHNlIiwKICAgICAgICApOwoKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQUNMU3VjY2VzcywKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gZXhlY3V0ZWQgd2l0aCBUcnVlIiwKICAgICAgICApOwoKICAgICAgICBpZiAoICRUZXN0LT57Q29uZmlnfS0+e1JldHVyblR5cGV9IGVxICdBY3Rpb24nICkgewoKICAgICAgICAgICAgIyBnZXQgdGhlIGFjdGlvbiBkYXRhIGZyb20gQUNMCiAgICAgICAgICAgIG15ICVBQ0xBY3Rpb25EYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsQWN0aW9uRGF0YSgpOwoKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgXCVBQ0xBY3Rpb25EYXRhLAogICAgICAgICAgICAgICAgJFRlc3QtPntSZXR1cm5BY3Rpb25EYXRhfSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IEFDTCBhY3Rpb24gZGF0YSIsCiAgICAgICAgICAgICk7CgogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBkYXRhIGZyb20gQUNMCiAgICAgICAgICAgIG15ICVBQ0xEYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpOwoKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgXCVBQ0xEYXRhLAogICAgICAgICAgICAgICAgJFRlc3QtPntSZXR1cm5EYXRhfSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IEFDTCBkYXRhIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Cn0KCiRTZWxmLT5UcnVlKAogICAgMSwKICAgICItLS0gU3RhcnQgRGF0YWJhc2UgQUNMIFRlc3RzIC0tLSIsCik7CgojIGRlZmluZSB0aGUgZGF0YWJhc2UgdGVzdHMKQFRlc3RzID0gKAoKICAgICMgcXVldWUgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUXVldWUtMSAtIFNlbnQgbmV3IHF1ZXVlLCBXcm9uZyBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1RdWV1ZS0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3UXVldWVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ25ldyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJE5ld1F1ZXVlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUXVldWUtMSAtIFNlbnQgbmV3IHF1ZXVlLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVF1ZXVlLTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJE5ld1F1ZXVlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUXVldWUtMSAtIFNlbnQgbmV3IHF1ZXVlLCBXcm9uZyBQcm9wZXJ0aWVzLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVF1ZXVlLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskUXVldWVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskUXVldWVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ25ldyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJE5ld1F1ZXVlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUXVldWUtMSAtIFNlbnQgbmV3IHF1ZXVlLCBDb3JyZWN0IFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1RdWV1ZS0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1F1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFF1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWyduZXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICROZXdRdWV1ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgc2VydmljZSBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TZXJ2aWNlLTEgLSBTZW50IG5ldyBzZXJ2aWNlLCBXcm9uZyBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TZXJ2aWNlLTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1NlcnZpY2VOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFNlcnZpY2UgICAgICAgPT4gJE5ld1NlcnZpY2VOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TZXJ2aWNlLTEgLSBTZW50IG5ldyBzZXJ2aWNlLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVNlcnZpY2UtMS1CJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU2VydmljZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU2VydmljZSAgICAgICA9PiAkTmV3U2VydmljZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TZXJ2aWNlLTEgLSBTZW50IG5ldyBzZXJ2aWNlLCBXcm9uZyBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU2VydmljZS0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU2VydmljZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFNlcnZpY2VOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFNlcnZpY2UgICAgICAgPT4gJE5ld1NlcnZpY2VOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TZXJ2aWNlLTEgLSBTZW50IG5ldyBzZXJ2aWNlLCBDb3JyZWN0IFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TZXJ2aWNlLTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyROZXdTZXJ2aWNlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU2VydmljZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU2VydmljZSAgICAgICA9PiAkTmV3U2VydmljZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0eXBlIGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVR5cGUtMSAtIFNlbnQgbmV3IHR5cGUsIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVR5cGUtMS1BJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3VHlwZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgPT4gJE5ld1R5cGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1UeXBlLTEgLSBTZW50IG5ldyB0eXBlLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVHlwZS0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRUeXBlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gWydNaXNjJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgPT4gJE5ld1R5cGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVHlwZS0xIC0gU2VudCBuZXcgdHlwZSwgV3JvbmcgUHJvcGVydGllcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVR5cGUtMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFR5cGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRUeXBlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVHlwZSAgICAgICAgICA9PiAkTmV3VHlwZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVR5cGUtMSAtIFNlbnQgbmV3IHR5cGUsIENvcnJlY3QgUHJvcGVydGllcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVR5cGUtMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1R5cGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRUeXBlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVHlwZSAgICAgICAgICA9PiAkTmV3VHlwZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBjdXN0b21lciBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1DdXN0b21lclVzZXItMSAtIFNldCBuZXcgQ3VzdG9tZXJVc2VyLCBXcm9uZyBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1DdXN0b21lclVzZXItMS1BJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJE5ld0N1c3RvbWVyVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSAgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkTmV3Q3VzdG9tZXJVc2VyRGF0YXtVc2VySUR9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItQ3VzdG9tZXJVc2VyLTEgLSBTZXQgbmV3IEN1c3RvbWVyVXNlciwgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1DdXN0b21lclVzZXItMS1CJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJEN1c3RvbWVyVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ25ldyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlICA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICROZXdDdXN0b21lclVzZXJEYXRhe1VzZXJJRH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1DdXN0b21lclVzZXItMSAtIFNldCBuZXcgQ3VzdG9tZXJVc2VyLCBXcm9uZyBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItQ3VzdG9tZXJVc2VyLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskQ3VzdG9tZXJVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRDdXN0b21lclVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJE5ld0N1c3RvbWVyVXNlckRhdGF7VXNlcklEfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUN1c3RvbWVyVXNlci0xIC0gU2V0IG5ldyBDdXN0b21lclVzZXIsIENvcnJlY3QgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUN1c3RvbWVyVXNlci0xLVMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJE5ld0N1c3RvbWVyVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskQ3VzdG9tZXJVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlICA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICROZXdDdXN0b21lclVzZXJEYXRhe1VzZXJJRH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHByaW9yaXR5IGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVByaW9yaXR5LTEgLSBTZW50IG5ldyBwcmlvcml0eSwgV3JvbmcgUHJvcGVydGllczogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVByaW9yaXR5LTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyROZXdQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJE5ld1ByaW9yaXR5TmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUHJpb3JpdHktMSAtIFNlbnQgbmV3IHByaW9yaXR5LCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVByaW9yaXR5LTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnbmV3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkTmV3UHJpb3JpdHlOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Qcmlvcml0eS0xIC0gU2VudCBuZXcgcHJpb3JpdHksIFdyb25nIFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Qcmlvcml0eS0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkTmV3UHJpb3JpdHlOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Qcmlvcml0eS0xIC0gU2VudCBuZXcgcHJpb3JpdHksIENvcnJlY3QgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVByaW9yaXR5LTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3UHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBQcmlvcml0eSAgICAgID0+ICROZXdQcmlvcml0eU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgc2xhIGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVNMQS0xIC0gU2VudCBuZXcgU0xBLCBXcm9uZyBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TTEEtMS1BJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFNMQSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyROZXdTTEFOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTTEEgICAgICAgICAgID0+ICROZXdTTEFOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TTEEtMSAtIFNlbnQgbmV3IFNMQSwgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TTEEtMS1CJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFNMQSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTTEFOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ25ldyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFNMQSAgICAgICAgICAgPT4gJE5ld1NMQU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TTEEtMSAtIFNlbnQgbmV3IFNMQSwgV3JvbmcgUHJvcGVydGllcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TTEEtMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU0xBTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFNMQSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTTEFOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTTEEgICAgICAgICAgID0+ICROZXdTTEFOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TTEEtMSAtIFNlbnQgbmV3IFNMQSwgQ29ycmVjdCBQcm9wZXJ0aWVzLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU0xBLTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU0xBID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1NMQU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU0xBTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU0xBICAgICAgICAgICA9PiAkTmV3U0xBTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHN0YXRlIGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVN0YXRlLTEgLSBTZW50IG5ldyBzdGF0ZSwgV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU3RhdGUtMS1BJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1N0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkTmV3U3RhdGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TdGF0ZS0xIC0gU2VudCBuZXcgc3RhdGUsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TdGF0ZS0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ0p1bmsnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkTmV3U3RhdGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVN0YXRlLTEgLSBTZW50IG5ldyBzdGF0ZSwgV3JvbmcgUHJvcGVydGllcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVN0YXRlLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICROZXdTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVN0YXRlLTEgLSBTZW50IG5ldyBzdGF0ZSwgQ29ycmVjdCBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TdGF0ZS0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1N0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFN0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkTmV3U3RhdGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgb3duZXIgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItT3duZXItMSAtIFNlbnQgbmV3IG93bmVyLCBXcm9uZyBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Pd25lci0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3duZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyROZXdVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIE93bmVyICAgICAgICAgPT4gJE5ld1VzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItT3duZXItMSAtIFNlbnQgbmV3IG93bmVyLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLU93bmVyLTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBPd25lciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydjbG9zZWQnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBPd25lciAgICAgICAgID0+ICROZXdVc2VyTG9naW4sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLU93bmVyLTEgLSBTZW50IG5ldyBvd25lciwgV3JvbmcgUHJvcGVydGllcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Pd25lci0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIE93bmVyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3duZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIE93bmVyICAgICAgICAgPT4gJE5ld1VzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItT3duZXItMSAtIFNlbnQgbmV3IG93bmVyLCBDb3JyZWN0IFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Pd25lci0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIE93bmVyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskTmV3VXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3duZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIE93bmVyICAgICAgICAgPT4gJE5ld1VzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyByZXNwb25zaWJsZSBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1SZXNwb25zaWJsZS0xIC0gU2VudCBuZXcgcmVzcG9uc2libGUsIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVJlc3BvbnNpYmxlLTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJE5ld1VzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUmVzcG9uc2libGUgICA9PiAkTmV3VXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1SZXNwb25zaWJsZS0xIC0gU2VudCBuZXcgcmVzcG9uc2libGUsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUmVzcG9uc2libGUtMS1CJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ2Nsb3NlZCddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFJlc3BvbnNpYmxlICAgPT4gJE5ld1VzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVJlc3BvbnNpYmxlLTEgLSBTZW50IG5ldyByZXNwb25zaWJsZSwgV3JvbmcgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVJlc3BvbnNpYmxlLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUmVzcG9uc2libGUgICA9PiAkTmV3VXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1SZXNwb25zaWJsZS0xIC0gU2VudCBuZXcgcmVzcG9uc2libGUsIENvcnJlY3QgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUmVzcG9uc2libGUtMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJE5ld1VzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBSZXNwb25zaWJsZSAgID0+ICROZXdVc2VyTG9naW4sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBmcm9udGVuZCBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Gcm9udGVuZC0xIC0gY29ycmVjdCBBY3Rpb246ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Gcm9udGVuZC0xJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIEZyb250ZW5kID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uID0+IFsgJ0FnZW50VGlja2V0UGhvbmUnLCAnQWdlbnRUaWNrZXRFbWFpbCcgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgQWN0aW9uICAgICAgICA9PiAnQWdlbnRUaWNrZXRQaG9uZScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aWNrZXQgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVGlja2V0LTEgLSBTZW50IG5ldyBwYXJhbXMsIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZSA6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVRpY2tldC0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgICAgPT4gWyROZXdRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbJE5ld1ByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgID0+IFskTmV3U3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gPT4gWydBZ2VudFRpY2tldENvbXBvc2UnXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ0FnZW50VGlja2V0Q2xvc2UnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJE5ld1F1ZXVlTmFtZSwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkTmV3UHJpb3JpdHlOYW1lLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICROZXdTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAoKICAgICAgICAjIEFjdGlvbiBBQ0wgYWx3YXlzIHJldHVybiBmYWxzZQogICAgICAgIFN1Y2Nlc3NNYXRjaCAgICAgPT4gMCwKICAgICAgICBSZXR1cm5BY3Rpb25EYXRhID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVGlja2V0LTEgLSBTZW50IG5ldyBwYXJhbXMsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVGlja2V0LTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSAgICA9PiBbJFF1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgPT4gWyRTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIEFjdGlvbiA9PiBbICdBZ2VudFRpY2tldENsb3NlJywgJ0FnZW50VGlja2V0Qm91bmNlJywgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ0FnZW50VGlja2V0Q2xvc2UnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJE5ld1F1ZXVlTmFtZSwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkTmV3UHJpb3JpdHlOYW1lLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICROZXdTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAoKICAgICAgICAjIEFjdGlvbiBBQ0wgYWx3YXlzIHJldHVybiBmYWxzZQogICAgICAgIFN1Y2Nlc3NNYXRjaCAgICAgPT4gMSwKICAgICAgICBSZXR1cm5BY3Rpb25EYXRhID0+IHsKICAgICAgICAgICAgMSA9PiAnQWdlbnRUaWNrZXRDbG9zZScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVRpY2tldC0xIC0gU2VudCBuZXcgcGFyYW1zLCBXcm9uZyBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1UaWNrZXQtMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSAgICA9PiBbJFF1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgPT4gWyRTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSAgICA9PiBbJFF1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgPT4gWyRTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIEFjdGlvbiA9PiBbJ0FnZW50VGlja2V0Q29tcG9zZSddLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnQWdlbnRUaWNrZXRDbG9zZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkTmV3UXVldWVOYW1lLAogICAgICAgICAgICBQcmlvcml0eSAgICAgID0+ICROZXdQcmlvcml0eU5hbWUsCiAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJE5ld1N0YXRlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoICAgICA9PiAwLAogICAgICAgIFJldHVybkFjdGlvbkRhdGEgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1UaWNrZXQtMiAtIFNlbnQgbmV3IHBhcmFtcywgV3JvbmcgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVGlja2V0LTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgICAgPT4gWyROZXdRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbJE5ld1ByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgID0+IFskTmV3U3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgICAgPT4gWyRRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbJFByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gPT4gWydBZ2VudFRpY2tldENvbXBvc2UnXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ0FnZW50VGlja2V0Q2xvc2UnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJE5ld1F1ZXVlTmFtZSwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkTmV3UHJpb3JpdHlOYW1lLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICROZXdTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAoKICAgICAgICAjIEFjdGlvbiBBQ0wgYWx3YXlzIHJldHVybiBmYWxzZQogICAgICAgIFN1Y2Nlc3NNYXRjaCAgICAgPT4gMSwKICAgICAgICBSZXR1cm5BY3Rpb25EYXRhID0+IHt9CiAgICB9LAoKICAgICMgZHluYW1pYyBmaWVsZHMgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItRHluYW1pY0ZpZWxkLTEgLSBTZW50IG5ldyBkeW5hbWljIGZpZWxkIHZhbHVlLCcKICAgICAgICAgICAgLiAnIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUR5bmFtaWNGaWVsZC0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgPT4gWydJdGVtMiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBEeW5hbWljRmllbGQgID0+IHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lID0+IFsnSXRlbTInXQogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUR5bmFtaWNGaWVsZC0xIC0gU2VudCBuZXcgZHluYW1pYyBmaWVsZCB2YWx1ZSwnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUR5bmFtaWNGaWVsZC0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgPT4gWydJdGVtMSddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnbmV3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCAgPT4gewogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgPT4gWydJdGVtMiddCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUR5bmFtaWNGaWVsZC0xIC0gU2VudCBuZXcgZHluYW1pYyBmaWVsZCB2YWx1ZSwgV3JvbmcgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUR5bmFtaWNGaWVsZC0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lID0+IFsnSXRlbTEnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgPT4gWydJdGVtMSddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBEeW5hbWljRmllbGQgID0+IHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lID0+IFsnSXRlbTInXQogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUR5bmFtaWNGaWVsZC0xIC0gU2VudCBuZXcgZHluYW1pYyBmaWVsZCB2YWx1ZSwgQ29ycmVjdCBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItRHluYW1pY0ZpZWxkLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgPT4gWydJdGVtMiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSA9PiBbJ0l0ZW0xJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCAgPT4gewogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgPT4gWydJdGVtMiddCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHVzZXIgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVXNlci0xIC0gV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVXNlci0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJE5ld1VzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVVzZXItMSAtIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVXNlci0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWycyIGxvdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVXNlci0xIC0gV3JvbmcgUHJvcGVydGllcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Vc2VyLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJE5ld1VzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsnMiBsb3cnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVXNlci0xIC0gQ29ycmVjdCBQcm9wZXJ0aWVzLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVVzZXItMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgfSwKICAgIH0sCik7CgojIEdldCByb2xlIG9iamVjdC4KbXkgJEdyb3VwT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CgojIEFkZCBzb21lIHJvbGVzCm15ICRSb2xlSUQxID0gJEdyb3VwT2JqZWN0LT5Sb2xlQWRkKAogICAgTmFtZSAgICA9PiAidW5pdHRlc3QxLSRSYW5kb21JRCIsCiAgICBDb21tZW50ID0+ICdjb21tZW50IGRlc2NyaWJpbmcgdGhlIHJvbGUnLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwokU2VsZi0+SXNOb3QoCiAgICAkUm9sZUlEMSwKICAgIHVuZGVmLAogICAgIlJvbGVBZGQoKSAtIFJvbGVJRDEiLAopOwpteSAkUm9sZUlEMiA9ICRHcm91cE9iamVjdC0+Um9sZUFkZCgKICAgIE5hbWUgICAgPT4gInVuaXR0ZXN0Mi0kUmFuZG9tSUQiLAogICAgQ29tbWVudCA9PiAnY29tbWVudCBkZXNjcmliaW5nIHRoZSByb2xlJywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPklzTm90KAogICAgJFJvbGVJRDIsCiAgICB1bmRlZiwKICAgICJSb2xlQWRkKCkgLSBSb2xlSUQyIiwKKTsKCm15ICRSZW1vdmVSb2xlcyA9IHN1YiB7CgogICAgZm9yIG15ICRSb2xlSUQgKCAkUm9sZUlEMSwgJFJvbGVJRDIgKSB7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkR3JvdXBPYmplY3QtPlBlcm1pc3Npb25Sb2xlVXNlckFkZCgKICAgICAgICAgICAgVUlEICAgID0+ICRVc2VySUQsCiAgICAgICAgICAgIFJJRCAgICA9PiAkUm9sZUlELAogICAgICAgICAgICBBY3RpdmUgPT4gMCwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJUZXN0IHVzZXIgcmVtb3ZlZCBmcm9tIFJvbGUgJFJvbGVJRCIsCiAgICAgICAgKTsKICAgIH0KfTsKCm15ICRFeGVjdXRlVGVzdHMgPSBzdWIgewogICAgbXkgJVBhcmFtID0gQF87CiAgICBteSBAVGVzdHMgPSBAeyAkUGFyYW17VGVzdHN9IH07CgogICAgZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICAgICAgIyBjbGVhbiBwcmV2aW91cyBkYXRhCiAgICAgICAgJFRpY2tldE9iamVjdC0+e1RpY2tldEFjbERhdGF9ID0ge307CgogICAgICAgIGlmICggJFRlc3QtPntBZGRSb2xlc30gKSB7CiAgICAgICAgICAgICRSZW1vdmVSb2xlcy0+KCk7CiAgICAgICAgICAgIGZvciBteSAkUm9sZUlEICggQHsgJFRlc3QtPntBZGRSb2xlc30gfSApIHsKICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uUm9sZVVzZXJBZGQoCiAgICAgICAgICAgICAgICAgICAgVUlEICAgID0+ICRVc2VySUQsCiAgICAgICAgICAgICAgICAgICAgUklEICAgID0+ICRSb2xlSUQsCiAgICAgICAgICAgICAgICAgICAgQWN0aXZlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgIlRlc3QgdXNlciBhZGRlZCB0byBSb2xlICRSb2xlSUQiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0QWNsJywKICAgICAgICAgICAgVmFsdWUgPT4gJFRlc3QtPntBQ0xzfSwKICAgICAgICApOwoKICAgICAgICAkR290QUNMcyA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QWNsJyk7CgogICAgICAgICMgc2FuaXR5IGNoZWNrCiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkR290QUNMcywKICAgICAgICAgICAgJFRlc3QtPntBQ0xzfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gQUNMcyBTZXQgYW5kIEdldCBmcm9tIHN5c2NvbmZpZyIsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJENvbmZpZyAgICAgPSAkVGVzdC0+e0NvbmZpZ307CiAgICAgICAgbXkgJEFDTFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woICV7ICRUZXN0LT57Q29uZmlnfSB9ICk7CgogICAgICAgICMgZ2V0IHRoZSBkYXRhIGZyb20gQUNMCiAgICAgICAgbXkgJUFDTERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CgogICAgICAgIGlmICggISRUZXN0LT57U3VjY2Vzc01hdGNofSApIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJEFDTFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBFeGVjdXRlZCB3aXRoIEZhbHNlIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgIFwlQUNMRGF0YSwKICAgICAgICAgICAgICAgIHt9LAogICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gQUNMIGRhdGEgbXVzdCBiZSBlbXB0eSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgaWYgKCAkVGVzdC0+e0NvbmZpZ30tPntSZXR1cm5UeXBlfSBlcSAnQWN0aW9uJyApIHsKCiAgICAgICAgICAgICAgICAjIGdldCB0aGUgYWN0aW9uIGRhdGEgZnJvbSBBQ0wKICAgICAgICAgICAgICAgICMgQWN0aW9uIEFDTCBhbHdheXMgcmV0dXJuIGZhbHNlCiAgICAgICAgICAgICAgICBteSAlQUNMQWN0aW9uRGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbEFjdGlvbkRhdGEoKTsKCiAgICAgICAgICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICAgICAgICAgXCVBQ0xBY3Rpb25EYXRhLAogICAgICAgICAgICAgICAgICAgICRUZXN0LT57UmV0dXJuQWN0aW9uRGF0YX0sCiAgICAgICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gQUNMIGFjdGlvbiBkYXRhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAkQUNMU3VjY2VzcywKICAgICAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBFeGVjdXRlZCB3aXRoIFRydWUiLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICAgICAgICAgXCVBQ0xEYXRhLAogICAgICAgICAgICAgICAgICAgICRUZXN0LT57UmV0dXJuRGF0YX0sCiAgICAgICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gQUNMIGRhdGEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjbGVhbiBBQ0xzCiAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0QWNsJywKICAgICAgICAgICAgVmFsdWUgPT4ge30sCiAgICAgICAgKTsKCiAgICAgICAgJEdvdEFDTHMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldEFjbCcpOwoKICAgICAgICAjIHNhbml0eSBjaGVjawogICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgJEdvdEFDTHMsCiAgICAgICAgICAgIHt9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBBQ0xzIGFyZSBjbGVhbiIsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkVGVzdC0+e0FkZFJvbGVzfSApIHsKICAgICAgICAgICAgJFJlbW92ZVJvbGVzLT4oKTsKICAgICAgICB9CiAgICB9Cn07CiRFeGVjdXRlVGVzdHMtPiggVGVzdHMgPT4gXEBUZXN0cyApOwoKIyBzcGVjaWFsIHRlc3RzCkBUZXN0cyA9ICgKCiAgICAjIFByb3BlcnRpZXMgTm90CiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gVXNpbmcgW05vdF06JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ05vdC1RdWV1ZS1SYXcnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1tOb3RdUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ01pc2MnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFVzaW5nIFtOb3RdIE5lZ2F0ZWQgUXVldWU6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ05vdC1RdWV1ZS1SYXcnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1tOb3RdUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gVXNpbmcgW05vdF0gaW4gYW4gQXJyYXk6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ05vdC1RdWV1ZS1SYXcnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbICdbTm90XVJhdycsICdbTm90XVBvc3RtYXN0ZXInIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ01pc2MnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgUHJvcGVydGllcyBOb3RSZWdFeHAKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90UmVnRXhwXTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnW05vdFJlZ0V4cF1IVyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdNaXNjJywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90UmVnRXhwXSBOZWdhdGVkIFF1ZXVlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdOb3QtUXVldWUtUmF3JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydbTm90UmVnRXhwXWF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gVXNpbmcgW05vdFJlZ0V4cF0gaW4gYW4gQXJyYXk6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ05vdC1RdWV1ZS1SYXcnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbICdbTm90UmVnRXhwXWF3JywgJ1tOb3RSZWdFeHBdbWFzdGVyJyBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdNaXNjJywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIFByb3BlcnRpZXMgTm90cmVnZXhwCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gVXNpbmcgW05vdHJlZ2V4cF06JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ05vdC1RdWV1ZS1SYXcnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1tOb3RyZWdleHBdSFcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnTWlzYycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gVXNpbmcgW05vdHJlZ2V4cF0gTmVnYXRlZCBRdWV1ZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnW05vdHJlZ2V4cF1yYSddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFVzaW5nIFtOb3RyZWdleHBdIGluIGFuIEFycmF5OicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdOb3QtUXVldWUtUmF3JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyAnW05vdHJlZ2V4cF1yYScsICdbTm90cmVnZXhwXW1hc3RlcicgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnTWlzYycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBjb21iaW5hdGlvbiBwb3NzaWJsZSwgcG9zc2libGUgbm90CiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gUG9zc2libGUvUG9zc2libGVOb3Q6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzIgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5MicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMiBsb3cnLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFBvc3NpYmxlL1Bvc3NpYmxlTm90IEpvaW46JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzIgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcyIGxvdycsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gUG9zc2libGVOb3Qgb25seTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHkyJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcyIGxvdycsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVXNlci0xIC0gUG9zc2libGUvUG9zc2libGVBZGQ6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Vc2VyLTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ0RCLVVzZXItMS1FJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVBZGQgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzQgaGlnaCcsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVXNlci0xIC0gUG9zc2libGUvUG9zc2libGVBZGQvUG9zc2libGU6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Vc2VyLTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ0RCLVVzZXItMS1FJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVBZGQgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzQgaGlnaCcsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdEQi1Vc2VyLTEtRicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICc0IGhpZ2gnLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAoKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJwogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFBvc3NpYmxlTm90L1Bvc3NpYmxlQWRkOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eTEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMiBsb3cnLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHkyJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlQWRkID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcyIGxvdycsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBQb3NzaWJsZU5vdC9Qb3NzaWJsZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHkxJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcyIGxvdycsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eTInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMiBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gUG9zc2libGUvUG9zc2libGVBZGQvUG9zc2libGVOb3Q6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5MScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICcyIGxvdycsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eTInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVBZGQgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzIgbG93JywgJzMgbWVkaXVtJywgJzQgaGlnaCcgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5MycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgIH0sCiAgICB9LAopOwokU2VsZi0+VHJ1ZSgKICAgIDEsCiAgICAiLS0tIFN0YXJ0IFNwZWNpYWwgQUNMIFRlc3RzIC0tLSIsCik7CiRFeGVjdXRlVGVzdHMtPiggVGVzdHMgPT4gXEBUZXN0cyApOwoKIyBBcnJheSBtYXRjaCB0ZXN0cwpteSBAVGVzdHNOb3JtYWwgPSAoCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIE5vIHJvbGVzIGNoZWNrIHVuaXR0ZXN0MScsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdSb2xlLVRlc3QnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSb2xlID0+IFsidW5pdHRlc3QxLSRSYW5kb21JRCJdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIDEgcm9sZSAod3JvbmcpIGNoZWNrIHVuaXR0ZXN0MScsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdSb2xlLVRlc3QnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSb2xlID0+IFsidW5pdHRlc3QxLSRSYW5kb21JRCJdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBBZGRSb2xlcyAgICAgPT4gWyRSb2xlSUQyXSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAxIHJvbGUgY2hlY2sgdW5pdHRlc3QxJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1JvbGUtVGVzdCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJvbGUgPT4gWyJ1bml0dGVzdDEtJFJhbmRvbUlEIl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIEFkZFJvbGVzICAgICA9PiBbJFJvbGVJRDFdLAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgdW5pdHRlc3QxJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1JvbGUtVGVzdCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJvbGUgPT4gWyJ1bml0dGVzdDEtJFJhbmRvbUlEIl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIEFkZFJvbGVzICAgICA9PiBbICRSb2xlSUQxLCAkUm9sZUlEMiBdLAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgdW5pdHRlc3QyJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1JvbGUtVGVzdCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJvbGUgPT4gWyJ1bml0dGVzdDItJFJhbmRvbUlEIl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIEFkZFJvbGVzICAgICA9PiBbICRSb2xlSUQxLCAkUm9sZUlEMiBdLAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCik7CgpteSAlVGVzdE1vZGlmaWVycyA9ICgKICAgIFJlZ0V4cCA9PiBbCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gTm8gcm9sZXMgY2hlY2sgW1JlZ0V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW1JlZ0V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gMSByb2xlICh3cm9uZykgY2hlY2sgW1JlZ0V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW1JlZ0V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDEgcm9sZSBjaGVjayBbUmVnRXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbUmVnRXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMiByb2xlIGNoZWNrIFtSZWdFeHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltSZWdFeHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgW1JlZ0V4cF11bml0dGVzdDInLAogICAgICAgICAgICBSb2xlID0+IFsiW1JlZ0V4cF11bml0dGVzdDIiXQogICAgICAgIH0KICAgIF0sCiAgICByZWdleHAgPT4gWwogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIE5vIHJvbGVzIGNoZWNrIFtyZWdleHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltyZWdleHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIDEgcm9sZSAod3JvbmcpIGNoZWNrIFtyZWdleHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltyZWdleHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAxIHJvbGUgY2hlY2sgW3JlZ2V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW3JlZ2V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDIgcm9sZSBjaGVjayBbcmVnZXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbcmVnZXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMiByb2xlIGNoZWNrIFtyZWdleHBddW5pdHRlc3QyJywKICAgICAgICAgICAgUm9sZSA9PiBbIltyZWdleHBddW5pdHRlc3QyIl0KICAgICAgICB9LAogICAgICAgIF0KKTsKCm15ICROdW1iZXJPZlRlc3RzID0gJCNUZXN0c05vcm1hbDsKCmZvciBteSAkVGVzdENhc2UgKCBzb3J0IGtleXMgJVRlc3RNb2RpZmllcnMgKSB7CiAgICBmb3IgbXkgJEluZGV4ICggMCAuLiAkTnVtYmVyT2ZUZXN0cyApIHsKCiAgICAgICAgbXkgJFRlc3QgPSAkU3RvcmFibGVPYmplY3QtPkNsb25lKCBEYXRhID0+ICRUZXN0c05vcm1hbFskSW5kZXhdICk7CgogICAgICAgICRUZXN0LT57TmFtZX0gPSAkVGVzdE1vZGlmaWVyc3skVGVzdENhc2V9LT5bJEluZGV4XS0+e05hbWV9OwogICAgICAgICRUZXN0LT57QUNMc30tPnsnUm9sZS1UZXN0J30tPntQcm9wZXJ0aWVzfS0+e1VzZXJ9LT57Um9sZX0gPSAkVGVzdE1vZGlmaWVyc3skVGVzdENhc2V9LT5bJEluZGV4XS0+e1JvbGV9OwoKICAgICAgICBwdXNoIEBUZXN0c05vcm1hbCwgJFRlc3Q7CiAgICB9Cn0KCm15IEBUZXN0c05vdCA9ICgKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gTm8gcm9sZXMgY2hlY2sgW05vdF11bml0dGVzdDE6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1JvbGUtVGVzdCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90XXVuaXR0ZXN0MS0kUmFuZG9tSUQiXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gMSByb2xlICh3cm9uZykgY2hlY2sgW05vdF11bml0dGVzdDE6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1JvbGUtVGVzdCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90XXVuaXR0ZXN0MS0kUmFuZG9tSUQiXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgQWRkUm9sZXMgICAgID0+IFskUm9sZUlEMl0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gMSByb2xlIGNoZWNrIFtOb3RddW5pdHRlc3QxOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdSb2xlLVRlc3QnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSb2xlID0+IFsiW05vdF11bml0dGVzdDEtJFJhbmRvbUlEIl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIEFkZFJvbGVzICAgICA9PiBbJFJvbGVJRDFdLAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDIgcm9sZSBjaGVjayBbTm90XXVuaXR0ZXN0MTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUm9sZS1UZXN0JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUm9sZSA9PiBbIltOb3RddW5pdHRlc3QxLSRSYW5kb21JRCJdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBBZGRSb2xlcyAgICAgPT4gWyAkUm9sZUlEMSwgJFJvbGVJRDIgXSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgW05vdF11bml0dGVzdDI6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1JvbGUtVGVzdCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90XXVuaXR0ZXN0Mi0kUmFuZG9tSUQiXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgQWRkUm9sZXMgICAgID0+IFsgJFJvbGVJRDEsICRSb2xlSUQyIF0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAopOwoKJVRlc3RNb2RpZmllcnMgPSAoCiAgICBSZWdFeHAgPT4gWwogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIE5vIHJvbGVzIGNoZWNrIFtOb3RSZWdFeHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltOb3RSZWdFeHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIDEgcm9sZSAod3JvbmcpIGNoZWNrIFtOb3RSZWdFeHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltOb3RSZWdFeHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAxIHJvbGUgY2hlY2sgW05vdFJlZ0V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW05vdFJlZ0V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDIgcm9sZSBjaGVjayBbTm90UmVnRXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90UmVnRXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMiByb2xlIGNoZWNrIFtOb3RSZWdFeHBddW5pdHRlc3QyJywKICAgICAgICAgICAgUm9sZSA9PiBbIltOb3RSZWdFeHBddW5pdHRlc3QyIl0KICAgICAgICB9CiAgICBdLAogICAgcmVnZXhwID0+IFsKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSBObyByb2xlcyBjaGVjayBbTm90cmVnZXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90cmVnZXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAxIHJvbGUgKHdyb25nKSBjaGVjayBbTm90cmVnZXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90cmVnZXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMSByb2xlIGNoZWNrIFtOb3RyZWdleHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltOb3RyZWdleHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgW05vdHJlZ2V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW05vdHJlZ2V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDIgcm9sZSBjaGVjayBbTm90cmVnZXhwXXVuaXR0ZXN0MicsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90cmVnZXhwXXVuaXR0ZXN0MiJdCiAgICAgICAgfSwKICAgICAgICBdCik7CgokTnVtYmVyT2ZUZXN0cyA9ICQjVGVzdHNOb3Q7Cgpmb3IgbXkgJFRlc3RDYXNlICggc29ydCBrZXlzICVUZXN0TW9kaWZpZXJzICkgewogICAgZm9yIG15ICRJbmRleCAoIDAgLi4gJE51bWJlck9mVGVzdHMgKSB7CgogICAgICAgIG15ICRUZXN0ID0gU3RvcmFibGU6OmRjbG9uZSggJFRlc3RzTm90WyRJbmRleF0gKTsKCiAgICAgICAgJFRlc3QtPntOYW1lfSA9ICRUZXN0TW9kaWZpZXJzeyRUZXN0Q2FzZX0tPlskSW5kZXhdLT57TmFtZX07CiAgICAgICAgJFRlc3QtPntBQ0xzfS0+eydSb2xlLVRlc3QnfS0+e1Byb3BlcnRpZXN9LT57VXNlcn0tPntSb2xlfSA9ICRUZXN0TW9kaWZpZXJzeyRUZXN0Q2FzZX0tPlskSW5kZXhdLT57Um9sZX07CgogICAgICAgIHB1c2ggQFRlc3RzTm90LCAkVGVzdDsKICAgIH0KfQoKQFRlc3RzID0gKCBAVGVzdHNOb3JtYWwsIEBUZXN0c05vdCApOwoKJFNlbGYtPlRydWUoCiAgICAxLAogICAgIi0tLSBTdGFydCBBcnJheSBtYXRjaCBBQ0wgVGVzdHMgLS0tIiwKKTsKJEV4ZWN1dGVUZXN0cy0+KCBUZXN0cyA9PiBcQFRlc3RzICk7CgojIGNsZWFudXAgaXMgZG9uZSBieSBSZXN0b3JlRGF0YWJhc2UuCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L0N1c3RvbWVyVXNlclNlcnZpY2UudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRDdXN0b21lclVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7Cm15ICRTZXJ2aWNlT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKIyBkb24ndCBjaGVjayBlbWFpbCBhZGRyZXNzIHZhbGlkaXR5CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgIFZhbHVlID0+IDAsCik7CgojIHNhdmUgYWxsIG9yaWdpbmFsIGRlZmF1bHQgc2VydmljZXMKbXkgQE9yaWdpbmFsRGVmYXVsdFNlcnZpY2VzID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJzxERUZBVUxUPicsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAogICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMCwKKTsKCiMgZGVsZXRlIGFsbCBkZWZhdWx0IHNlcnZpY2VzCmZvciBteSAkU2VydmljZUlEIChAT3JpZ2luYWxEZWZhdWx0U2VydmljZXMpIHsKICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICc8REVGQVVMVD4nLAogICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgQWN0aXZlICAgICAgICAgICAgPT4gMCwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgKTsKfQoKIyBhZGQgc2VydmljZTEKbXkgJFNlcnZpY2VSYW5kMSA9ICdTb21lU2VydmljZScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwpteSAkU2VydmljZUlEMSAgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICRTZXJ2aWNlUmFuZDEsCiAgICBDb21tZW50ID0+ICdTb21lIENvbW1lbnQnLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KKTsKCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VJRDEsCiAgICAnU2VydmljZUFkZDEoKScsCik7CgojIGFkZCBzZXJ2aWNlMgpteSAkU2VydmljZVJhbmQyID0gJ1NvbWVTZXJ2aWNlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7Cm15ICRTZXJ2aWNlSUQyICAgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgPT4gJFNlcnZpY2VSYW5kMiwKICAgIENvbW1lbnQgPT4gJ1NvbWUgQ29tbWVudCcsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQopOwoKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZUlEMiwKICAgICdTZXJ2aWNlQWRkMigpJywKKTsKCm15ICRDdXN0b21lclVzZXIxID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpCiAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7Cm15ICRDdXN0b21lclVzZXIyID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpCiAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7CgojIGFsbG9jYXRpb24gdGVzdCAxCm15IEBBbGxvY2F0aW9uMSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24xLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MSgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDIKbXkgQEFsbG9jYXRpb24yID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKJFNlbGYtPkZhbHNlKAogICAgc2NhbGFyIEBBbGxvY2F0aW9uMiwKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDIoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCAzCm15IEBBbGxvY2F0aW9uMyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24zLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MygpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDQKbXkgQEFsbG9jYXRpb240ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKJFNlbGYtPkZhbHNlKAogICAgc2NhbGFyIEBBbGxvY2F0aW9uNCwKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDQoKScsCik7CgojIHNldCBhbGxvY2F0aW9uIDEKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnPERFRkFVTFQ+JywKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQxLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIGFsbG9jYXRpb24gdGVzdCA1Cm15IEBBbGxvY2F0aW9uNSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb241LAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0NSgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDYKbXkgQEFsbG9jYXRpb242ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb242Q291bnQgPSBAQWxsb2NhdGlvbjY7Cm15ICRBbGxvY2F0aW9uNk9rICAgID0gMDsKaWYgKCAkQWxsb2NhdGlvbjZDb3VudCBlcSAxICYmICRBbGxvY2F0aW9uNlswXSBlcSAkU2VydmljZUlEMSApIHsKICAgICRBbGxvY2F0aW9uNk9rID0gMTsKfQoKJFNlbGYtPlRydWUoCiAgICAkQWxsb2NhdGlvbjZPaywKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDYoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCA3Cm15IEBBbGxvY2F0aW9uNyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb243LAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0NygpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDgKbXkgQEFsbG9jYXRpb244ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb244Q291bnQgPSBAQWxsb2NhdGlvbjg7Cm15ICRBbGxvY2F0aW9uOE9rICAgID0gMDsKaWYgKCAkQWxsb2NhdGlvbjhDb3VudCBlcSAxICYmICRBbGxvY2F0aW9uOFswXSBlcSAkU2VydmljZUlEMSApIHsKICAgICRBbGxvY2F0aW9uOE9rID0gMTsKfQoKJFNlbGYtPlRydWUoCiAgICAkQWxsb2NhdGlvbjhPaywKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDgoKScsCik7CgojIHNldCBhbGxvY2F0aW9uIDIKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMSwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQyLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIGFsbG9jYXRpb24gdGVzdCA5Cm15IEBBbGxvY2F0aW9uOSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgpteSAkQWxsb2NhdGlvbjlDb3VudCA9IEBBbGxvY2F0aW9uOTsKbXkgJEFsbG9jYXRpb245T2sgICAgPSAwOwppZiAoICRBbGxvY2F0aW9uOUNvdW50IGVxIDEgJiYgJEFsbG9jYXRpb245WzBdIGVxICRTZXJ2aWNlSUQyICkgewogICAgJEFsbG9jYXRpb245T2sgPSAxOwp9CgokU2VsZi0+VHJ1ZSgKICAgICRBbGxvY2F0aW9uOU9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0OSgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDEwCm15IEBBbGxvY2F0aW9uMTAgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMSwKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdJRCcsCik7CgpteSAkQWxsb2NhdGlvbjEwQ291bnQgPSBAQWxsb2NhdGlvbjEwOwpteSAkQWxsb2NhdGlvbjEwT2sgICAgPSAwOwppZiAoICRBbGxvY2F0aW9uMTBDb3VudCBlcSAxICYmICRBbGxvY2F0aW9uMTBbMF0gZXEgJFNlcnZpY2VJRDIgKSB7CiAgICAkQWxsb2NhdGlvbjEwT2sgPSAxOwp9CgokU2VsZi0+VHJ1ZSgKICAgICRBbGxvY2F0aW9uMTBPaywKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDEwKCknLAopOwoKIyBhbGxvY2F0aW9uIHRlc3QgMTEKbXkgQEFsbG9jYXRpb24xMSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24xMSwKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDExKCknLAopOwoKIyBhbGxvY2F0aW9uIHRlc3QgMTIKbXkgQEFsbG9jYXRpb24xMiA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKKTsKCm15ICRBbGxvY2F0aW9uMTJDb3VudCA9IEBBbGxvY2F0aW9uMTI7Cm15ICRBbGxvY2F0aW9uMTJPayAgICA9IDA7CmlmICggJEFsbG9jYXRpb24xMkNvdW50IGVxIDEgJiYgJEFsbG9jYXRpb24xMlswXSBlcSAkU2VydmljZUlEMSApIHsKICAgICRBbGxvY2F0aW9uMTJPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xMk9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTIoKScsCik7CgojIHNldCBhbGxvY2F0aW9uIDMKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQxLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CiRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlEMiwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwoKIyBhbGxvY2F0aW9uIHRlc3QgMTMKbXkgQEFsbG9jYXRpb24xMyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgpteSAkQWxsb2NhdGlvbjEzT2sgPSAwOwppZiAoIHNjYWxhciBAQWxsb2NhdGlvbjEzIGVxIDEgJiYgJEFsbG9jYXRpb24xM1swXSBlcSAkU2VydmljZUlEMiApIHsKICAgICRBbGxvY2F0aW9uMTNPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xM09rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTMoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCAxNApteSBAQWxsb2NhdGlvbjE0ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb24xNENvdW50ID0gQEFsbG9jYXRpb24xNDsKbXkgJEFsbG9jYXRpb24xNE9rICAgID0gMDsKaWYgKCAkQWxsb2NhdGlvbjE0Q291bnQgZXEgMSAmJiAkQWxsb2NhdGlvbjE0WzBdIGVxICRTZXJ2aWNlSUQyICkgewogICAgJEFsbG9jYXRpb24xNE9rID0gMTsKfQoKJFNlbGYtPlRydWUoCiAgICAkQWxsb2NhdGlvbjE0T2ssCiAgICAnQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QxNCgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDE1Cm15IEBBbGxvY2F0aW9uMTUgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMiwKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdJRCcsCiAgICBEZWZhdWx0U2VydmljZXMgICA9PiAwLAopOwoKbXkgJEFsbG9jYXRpb24xNUNvdW50ID0gQEFsbG9jYXRpb24xNTsKbXkgJEFsbG9jYXRpb24xNU9rICAgID0gMDsKaWYgKAogICAgJEFsbG9jYXRpb24xNUNvdW50IGVxIDIgJiYgKAogICAgICAgICggJEFsbG9jYXRpb24xNVswXSBlcSAkU2VydmljZUlEMSAmJiAkQWxsb2NhdGlvbjE1WzFdIGVxICRTZXJ2aWNlSUQyICkgfHwKICAgICAgICAoICRBbGxvY2F0aW9uMTVbMF0gZXEgJFNlcnZpY2VJRDIgJiYgJEFsbG9jYXRpb24xNVsxXSBlcSAkU2VydmljZUlEMSApCiAgICApCiAgICApCnsKICAgICRBbGxvY2F0aW9uMTVPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xNU9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTUoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCAxNgpteSBAQWxsb2NhdGlvbjE2ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb24xNkNvdW50ID0gQEFsbG9jYXRpb24xNjsKbXkgJEFsbG9jYXRpb24xNk9rICAgID0gMDsKaWYgKAogICAgJEFsbG9jYXRpb24xNkNvdW50IGVxIDIgJiYgKAogICAgICAgICggJEFsbG9jYXRpb24xNlswXSBlcSAkU2VydmljZUlEMSAmJiAkQWxsb2NhdGlvbjE2WzFdIGVxICRTZXJ2aWNlSUQyICkgfHwKICAgICAgICAoICRBbGxvY2F0aW9uMTZbMF0gZXEgJFNlcnZpY2VJRDIgJiYgJEFsbG9jYXRpb24xNlsxXSBlcSAkU2VydmljZUlEMSApCiAgICApCiAgICApCnsKICAgICRBbGxvY2F0aW9uMTZPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xNk9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTYoKScsCik7CgojIHJlbmFtZSBjdXN0b21lciB1c2VyMQpteSAlQ3VzdG9tZXIgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgVXNlciA9PiAkQ3VzdG9tZXJVc2VyMSwKKTsKbXkgJE5ld0N1c3RvbWVyVXNlcjEgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwpteSAkVXBkYXRlICAgICAgICAgICA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlclVwZGF0ZSgKICAgICVDdXN0b21lciwKICAgIElEICAgICAgICA9PiAkQ3VzdG9tZXJ7VXNlckxvZ2lufSwKICAgIFVzZXJMb2dpbiA9PiAkTmV3Q3VzdG9tZXJVc2VyMSwKICAgIFVzZXJJRCAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRVcGRhdGUsCiAgICAiQ3VzdG9tZXJVc2VyVXBkYXRlIC0gJEN1c3RvbWVye1VzZXJMb2dpbn0gLSAkTmV3Q3VzdG9tZXJVc2VyMSIsCik7CgojIGFsbG9jYXRpb24gdGVzdCBhZnRlciByZW5hbWUKIyBpbnN0YW50aWF0ZSBuZXcgc2VydmljZSBvYmplY3QgYmVjYXVzZSBvZiBjYWNoaW5nIQokS2VybmVsOjpPTS0+T2JqZWN0c0Rpc2NhcmQoIE9iamVjdHMgPT4gWydLZXJuZWw6OlN5c3RlbTo6U2VydmljZSddICk7CiRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCm15IEBBbGxvY2F0aW9uMTcgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJ7VXNlckxvZ2lufSwKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdJRCcsCiAgICBEZWZhdWx0U2VydmljZXMgICA9PiAwLAopOwoKJFNlbGYtPklzKAogICAgc2NhbGFyIEBBbGxvY2F0aW9uMTcsCiAgICAwLAogICAgIk5vIHNlcnZpY2VzIGFsbG9jYXRlZCB0byBvbGQgY3VzdG9tZXIgJEN1c3RvbWVyVXNlcjEgYWZ0ZXIgcmVuYW1lIiwKKTsKbXkgQEFsbG9jYXRpb24xOCA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICROZXdDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+SXMoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24xOCwKICAgIDEsCiAgICAiU2VydmljZXMgYWxsb2NhdGVkIHRvIG5ldyBjdXN0b21lciAkTmV3Q3VzdG9tZXJVc2VyMSBhZnRlciByZW5hbWUiLAopOwoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHZhcnMgcXcoJFNlbGYpOwoKbXkgJENJUEFsbG9jYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpOwoKIyBnZXQgY3VycmVudCBhbGxvY2F0aW9uIGxpc3QgKFVzZXJJRCBpcyBuZWVkZWQpCm15ICRBbGxvY2F0ZURhdGExID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoKTsKCiMgY2hlY2sgdGhlIHJlc3VsdAokU2VsZi0+RmFsc2UoICRBbGxvY2F0ZURhdGExLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIGdldCBjdXJyZW50IGFsbG9jYXRpb24gbGlzdApteSAkQWxsb2NhdGVEYXRhMiA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVMaXN0KAogICAgVXNlcklEID0+IDEsCik7CgojIGNoZWNrIHRoZSByZXN1bHQKJFNlbGYtPlRydWUoICRBbGxvY2F0ZURhdGEyLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIGNoZWNrIHRoZSBhbGxvY2F0aW9uIGhhc2gKbXkgJEhhc2hPSyA9IDE7CmlmICggcmVmICRBbGxvY2F0ZURhdGEyIG5lICdIQVNIJyApIHsKICAgICRIYXNoT0sgPSAwOwp9CgojIGNoZWNrIHRoZSBhbGxvY2F0aW9uIDJkIGhhc2gKaWYgKCRIYXNoT0spIHsKCiAgICBJTVBBQ1Q6CiAgICBmb3IgbXkgJEltcGFjdCAoIHNvcnQga2V5cyAleyRBbGxvY2F0ZURhdGEyfSApIHsKCiAgICAgICAgaWYgKCByZWYgJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fSBuZSAnSEFTSCcgKSB7CiAgICAgICAgICAgICRIYXNoT0sgPSAwOwogICAgICAgICAgICBsYXN0IElNUEFDVDsKICAgICAgICB9CgogICAgICAgIENSSVRJQ0FMSVRZOgogICAgICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKCBzb3J0IGtleXMgJXsgJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fSB9ICkgewoKICAgICAgICAgICAgaWYgKCAhJENyaXRpY2FsaXR5IHx8ICEkQWxsb2NhdGVEYXRhMi0+eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fSApIHsKICAgICAgICAgICAgICAgICRIYXNoT0sgPSAwOwogICAgICAgICAgICAgICAgbGFzdCBJTVBBQ1Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCiMgY2hlY2sgSGFzaE9LCiRTZWxmLT5UcnVlKCAkSGFzaE9LLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIGNhbGwgUHJpb3JpdHlBbGxvY2F0aW9uR2V0KCkgZm9yIG9uZSBDcml0aWNhbGl0eS9JbXBhY3QgcGFpcgppZiAoJEhhc2hPSykgewoKICAgIG15ICgkSW1wYWN0KSA9IHNvcnQga2V5cyAleyRBbGxvY2F0ZURhdGEyfTsKCiAgICBpZiAoICRBbGxvY2F0ZURhdGEyLT57JEltcGFjdH0gKSB7CiAgICAgICAgbXkgKCRDcml0aWNhbGl0eSkgPSBzb3J0IGtleXMgJXsgJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fSB9OwoKICAgICAgICBteSAkRXhwZWN0ZWRQcmlvcml0eUlEID0gJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fS0+eyRDcml0aWNhbGl0eX07CiAgICAgICAgbXkgJFByaW9yaXR5SUQgICAgICAgICA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+UHJpb3JpdHlBbGxvY2F0aW9uR2V0KAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAkQ3JpdGljYWxpdHksCiAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICRJbXBhY3QsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRQcmlvcml0eUlELAogICAgICAgICAgICAkRXhwZWN0ZWRQcmlvcml0eUlELAogICAgICAgICAgICAnUHJpb3JpdHlBbGxvY2F0aW9uR2V0KCknLAogICAgICAgICk7CiAgICB9Cn0KCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2ggKG5vdCBhbGwgbmVlZGVkIGFyZ3VtZW50cyBnaXZlbikKbXkgJFN1Y2Nlc3MxID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSggJFN1Y2Nlc3MxLCAnQWxsb2NhdGVVcGRhdGUoKScgKTsKCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2ggKG5vdCBhbGwgbmVlZGVkIGFyZ3VtZW50cyBnaXZlbikKbXkgJFN1Y2Nlc3MyID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIEFsbG9jYXRlRGF0YSA9PiAkQWxsb2NhdGVEYXRhMiwKKTsKCiMgY2hlY2sgdGhlIHJlc3VsdAokU2VsZi0+RmFsc2UoICRTdWNjZXNzMiwgJ0FsbG9jYXRlVXBkYXRlKCknICk7CgojIHVwZGF0ZSB0aGUgYWxsb2NhdGlvbiBoYXNoIChhbGxvY2F0aW9uIGhhc2gpCm15ICRTdWNjZXNzMyA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVVcGRhdGUoCiAgICBBbGxvY2F0ZURhdGEgPT4gewogICAgICAgIFRlc3QgID0+ICdhYWEnLAogICAgICAgIFRlc3QyID0+ICdiYmInLAogICAgfSwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSggJFN1Y2Nlc3MzLCAnQWxsb2NhdGVVcGRhdGUoKScgKTsKCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2gKbXkgJFN1Y2Nlc3M0ID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIEFsbG9jYXRlRGF0YSA9PiAkQWxsb2NhdGVEYXRhMiwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5UcnVlKCAkU3VjY2VzczQsICdBbGxvY2F0ZVVwZGF0ZSgpJyApOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L1NlcnZpY2UudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7Cm15ICRVc2VyT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCm15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgbWFrZSBwcmVwYXJhdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBjcmVhdGUgbmVlZGVkIHVzZXJzCm15IEBVc2VySURzOwp7CgogICAgIyBkaXNhYmxlIGVtYWlsIGNoZWNrcyB0byBjcmVhdGUgbmV3IHVzZXIKICAgIG15ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnID0gJENvbmZpZ09iamVjdC0+R2V0KCdDaGVja0VtYWlsQWRkcmVzc2VzJykgfHwgMTsKICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgVmFsdWUgPT4gMCwKICAgICk7CgogICAgZm9yIG15ICRDb3VudGVyICggMSAuLiAyICkgewoKICAgICAgICAjIGNyZWF0ZSBuZXcgdXNlcnMgZm9yIHRoZSB0ZXN0cwogICAgICAgIG15ICRVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckFkZCgKICAgICAgICAgICAgVXNlckZpcnN0bmFtZSA9PiAnU2VydmljZScgLiAkQ291bnRlciwKICAgICAgICAgICAgVXNlckxhc3RuYW1lICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICBVc2VyTG9naW4gICAgID0+ICdVbml0VGVzdC1TZXJ2aWNlLScgLiAkQ291bnRlciAuICRSYW5kb21JRCwKICAgICAgICAgICAgVXNlckVtYWlsICAgICA9PiAnVW5pdFRlc3QtU2VydmljZS0nIC4gJENvdW50ZXIgLiAnQGxvY2FsaG9zdCcsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQFVzZXJJRHMsICRVc2VySUQ7CiAgICB9CgogICAgIyByZXN0b3JlIG9yaWdpbmFsIGVtYWlsIGNoZWNrIHBhcmFtCiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnLAogICAgKTsKfQoKIyBjcmVhdGUgbmVlZGVkIHJhbmRvbSBzZXJ2aWNlIG5hbWVzCm15IEBTZXJ2aWNlTmFtZTsKZm9yIG15ICRDb3VudGVyICggMSAuLiAxMSApIHsKICAgIHB1c2ggQFNlcnZpY2VOYW1lLCAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwp9CgojIGdldCBvcmlnaW5hbCBzZXJ2aWNlIGxpc3QgZm9yIGxhdGVyIGNoZWNrcwpteSAlU2VydmljZUxpc3RPcmlnaW5hbCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgIFZhbGlkICA9PiAwLAogICAgVXNlcklEID0+IDEsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZGVmaW5lIGdlbmVyYWwgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEl0ZW1EYXRhID0gWwoKICAgICMgdGhpcyBzZXJ2aWNlIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgfSwKICAgIH0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KCiAgICAjIHRoaXMgc2VydmljZSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICBUeXBlSUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICB9LAogICAgfSwKIyAtLS0KCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgb25lIHRlc3QgYmVmb3JlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSBpcyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkU2VydmljZU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVswXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAojIC0tLQojIElUU01Db3JlCiMgLS0tCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgVHlwZUlEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgICAgICA9PiAkU2VydmljZU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiAgICAgICAgfSwKICAgIH0sCiMgLS0tCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVsxXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICdUZXN0Q29tbWVudDInLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVsxXSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVsxXSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnVGVzdENvbW1lbnQyJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDIsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgID0+ICRTZXJ2aWNlTmFtZVsxXSAuICdVUERBVEUyJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIChzZXJ2aWNlIHVwZGF0ZSBhcmd1bWVudHMgYXJlIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTInLAogICAgICAgICAgICBWYWxpZElEID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1Rlc3RDb21tZW50MlVQREFURTInLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDQsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbMV0gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ1Rlc3RDb21tZW50MlVQREFURTInLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDQsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKHNlcnZpY2UgdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnVVBEQVRFMycsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMycsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVsxXSAuICdVUERBVEUzJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVsxXSAuICdVUERBVEUzJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXMgYW4gaW52YWxpZCBuYW1lIGFuZCBtdXN0IGJlIE5PVCBpbnNlcnRlZAogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJzo6VVBEQVRFNCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIGhhcyBhbiBpbnZhbGlkIG5hbWUgYW5kIG11c3QgYmUgTk9UIGluc2VydGVkCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnOjpUZXN0OjpVUERBVEU0JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaGFzIGFuIGludmFsaWQgbmFtZSBhbmQgbXVzdCBiZSBOT1QgaW5zZXJ0ZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVsyXSAuICc6OlRlc3QnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXMgYW4gaW52YWxpZCBuYW1lIGFuZCBtdXN0IGJlIE5PVCBpbnNlcnRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJzo6VGVzdCcgLiAkU2VydmljZU5hbWVbMl0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIGhhcyBhbiBpbnZhbGlkIG5hbWUgYW5kIG11c3QgYmUgTk9UIGluc2VydGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMl0gLiAnOjpUZXN0OjpUZXN0JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaGFzIGFuIGludmFsaWQgbmFtZSBhbmQgbXVzdCBiZSBOT1QgaW5zZXJ0ZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVsyXSAuICdUZXN0OjonLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAiIFx0IFxuIFxyICIgLiAkU2VydmljZU5hbWVbM10gLiAiIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVszXSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVszXSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnVGVzdCBDb21tZW50JywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDIsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKGNoZWNrIHN0cmluZyBjbGVhbmVyIGZ1bmN0aW9uKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gIiBcdCBcbiBcciAiIC4gJFNlcnZpY2VOYW1lWzNdIC4gIiBVUERBVEUxIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbM10gLiAnIFVQREFURTEnLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzNdIC4gJyBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnVGVzdCBDb21tZW50JywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAkVXNlcklEc1sxXSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChVbmljb2RlIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVs0XSAuICcgz5Igz6Egxqkgz54gJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzRdIC4gJyDPkiDPoSDGqSDPnicsCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbNF0gLiAnIM+SIM+hIMapIM+eJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAn0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKFVuaWNvZGUgY2hlY2tzKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzRdIC4gJyDPkiDPoSDGqSDPniBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pIFVQREFURTEnLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbNF0gLiAnIM+SIM+hIMapIM+eIFVQREFURTEnLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzRdIC4gJyDPkiDPoSDGqSDPniBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAn0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pIFVQREFURTEnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnIFt0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBbdGVzdF0lKlxcJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICdbdGVzdF0lKlxcICcgLiAkU2VydmljZU5hbWVbOF0gLiAnIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBbdGVzdF0lKlxcJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBVUERBVEUxIFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBDb21tZW50ID0+ICcgW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgVVBEQVRFMSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdbdGVzdF0lKlxcICcgLiAkU2VydmljZU5hbWVbOF0gLiAnIFVQREFURTEgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAnW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkgKHVzZWQgZm9yIHRoZSBmb2xsb3dpbmcgdGVzdHMpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbNV0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbNV0sCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbNV0sCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAocGFyZW50IHNlcnZpY2UgY2hlY2spCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJ0xBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRTZXJ2aWNlTmFtZVs2XSwKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICdMQVNUQURESUQnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzVdIC4gJzo6JyAuICRTZXJ2aWNlTmFtZVs2XSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs2XSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChwYXJlbnQgc2VydmljZSBjaGVjaykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCA9PiAnTEFTVEFERElEJywKICAgICAgICAgICAgTmFtZSAgICAgPT4gIiBcbiBcdCAiIC4gJFNlcnZpY2VOYW1lWzddIC4gIiBcbiBcdCAiLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJ0xBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbNV0gLiAnOjonIC4gJFNlcnZpY2VOYW1lWzZdIC4gJzo6JyAuICRTZXJ2aWNlTmFtZVs3XSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs3XSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2UgbXVzdCBiZSBOT1QgdXBkYXRlZCAocGFyZW50IHNlcnZpY2UgaWQgYW5kIHBhcmVudCBpZCBhcmUgaWRlbnRpY2FsKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFBhcmVudElEID0+ICdMQVNUQURESUQnLAogICAgICAgICAgICBOYW1lICAgICA9PiAkU2VydmljZU5hbWVbN10gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSAobW92ZSBzZXJ2aWNlIHRvIHRoZSBoaWdoZXN0IGxldmVsKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFBhcmVudElEID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICA9PiAkU2VydmljZU5hbWVbN10gLiAnIFVQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbN10gLiAnIFVQREFURTEnLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzddIC4gJyBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKG1vdmUgc2VydmljZSBiYWNrIHdpdGggdGhlIG9sZCBwYXJlbnQgc2VydmljZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBQYXJlbnRJRCA9PiAnTEFTVExBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRTZXJ2aWNlTmFtZVs3XSAuICcgVVBEQVRFKDIpJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJ0xBU1RMQVNUQURESUQnLAogICAgICAgICAgICBOYW1lICAgICA9PiAkU2VydmljZU5hbWVbNV0gLiAnOjonCiAgICAgICAgICAgICAgICAuICRTZXJ2aWNlTmFtZVs2XSAuICc6OicKICAgICAgICAgICAgICAgIC4gJFNlcnZpY2VOYW1lWzddCiAgICAgICAgICAgICAgICAuICcgVVBEQVRFKDIpJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs3XSAuICcgVVBEQVRFKDIpJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LApdOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHJ1biBnZW5lcmFsIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRUZXN0Q291bnQgPSAxOwpteSAkTGFzdEFkZGVkU2VydmljZUlEOwpteSAkTGFzdExhc3RBZGRlZFNlcnZpY2VJRDsKbXkgJEFkZGVkQ291bnRlciA9IDA7Cgpmb3IgbXkgJEl0ZW0gKCBAeyRJdGVtRGF0YX0gKSB7CgogICAgaWYgKCAkSXRlbS0+e0FkZH0gKSB7CgogICAgICAgICMgcHJlcGFyZSBwYXJlbnQgaWQKICAgICAgICBpZiAoICRJdGVtLT57QWRkfS0+e1BhcmVudElEfSAmJiAkSXRlbS0+e0FkZH0tPntQYXJlbnRJRH0gZXEgJ0xBU1RBRERJRCcgKSB7CiAgICAgICAgICAgICRJdGVtLT57QWRkfS0+e1BhcmVudElEfSA9ICRMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEl0ZW0tPntBZGR9LT57UGFyZW50SUR9ICYmICRJdGVtLT57QWRkfS0+e1BhcmVudElEfSBlcSAnTEFTVExBU1RBRERJRCcgKSB7CiAgICAgICAgICAgICRJdGVtLT57QWRkfS0+e1BhcmVudElEfSA9ICRMYXN0TGFzdEFkZGVkU2VydmljZUlEOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZGVsZXRlICRJdGVtLT57QWRkfS0+e1BhcmVudElEfTsKICAgICAgICB9CgogICAgICAgICMgYWRkIG5ldyBzZXJ2aWNlCiAgICAgICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgICAgICAleyAkSXRlbS0+e0FkZH0gfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2Ugd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSBvciBub3QKICAgICAgICBpZiAoICRJdGVtLT57QWRkR2V0fSApIHsKCiAgICAgICAgICAgICMgcHJlcGFyZSBwYXJlbnQgaWQKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0FkZEdldH0tPntQYXJlbnRJRH0gJiYgJEl0ZW0tPntBZGRHZXR9LT57UGFyZW50SUR9IGVxICdMQVNUQURESUQnICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntBZGRHZXR9LT57UGFyZW50SUR9ID0gJExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRJdGVtLT57QWRkR2V0fS0+e1BhcmVudElEfSAmJiAkSXRlbS0+e0FkZEdldH0tPntQYXJlbnRJRH0gZXEgJ0xBU1RMQVNUQURESUQnICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEl0ZW0tPntBZGRHZXR9LT57UGFyZW50SUR9ID0gJExhc3RMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VBZGQoKSAtIFNlcnZpY2VJRDogJFNlcnZpY2VJRCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJFNlcnZpY2VJRCkgewoKICAgICAgICAgICAgICAgICMgbG9va3VwIHNlcnZpY2UgbmFtZQogICAgICAgICAgICAgICAgbXkgJFNlcnZpY2VOYW1lID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoIFNlcnZpY2VJRCA9PiAkU2VydmljZUlEICk7CgogICAgICAgICAgICAgICAgIyBsb29rdXAgdGVzdAogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlTmFtZSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPntOYW1lfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlTG9va3VwKCkgLSBsb29rdXAiLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJldmVyc2UgbG9va3VwIHRoZSBzZXJ2aWNlIGlkCiAgICAgICAgICAgICAgICBteSAkU2VydmljZUlETmV3ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoIE5hbWUgPT4gJFNlcnZpY2VOYW1lIHx8ICcnICk7CgogICAgICAgICAgICAgICAgIyByZXZlcnNlIGxvb2t1cCB0ZXN0CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJFNlcnZpY2VJRE5ldyB8fCAnJywKICAgICAgICAgICAgICAgICAgICAkU2VydmljZUlEICAgIHx8ICcnLAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VMb29rdXAoKSAtIHJldmVyc2UgbG9va3VwIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgbGFzdCBzZXJ2aWNlIGlkIHZhcmlhYmxlCiAgICAgICAgICAgICAgICAkTGFzdExhc3RBZGRlZFNlcnZpY2VJRCA9ICRMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgICAgICAgICAkTGFzdEFkZGVkU2VydmljZUlEICAgICA9ICRTZXJ2aWNlSUQ7CgogICAgICAgICAgICAgICAgIyBpbmNyZW1lbnQgdGhlIGFkZGVkIGNvdW50ZXIKICAgICAgICAgICAgICAgICRBZGRlZENvdW50ZXIrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VBZGQoKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzZXJ2aWNlIGRhdGEgdG8gY2hlY2sgdGhlIHZhbHVlcyBhZnRlciBjcmVhdGlvbiBvZiB0aGUgc2VydmljZQogICAgICAgIG15ICVTZXJ2aWNlR2V0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgICAgICBVc2VySUQgICAgPT4gJEl0ZW0tPntBZGR9LT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHNlcnZpY2UgZGF0YSBhZnRlciBjcmVhdGlvbiBvZiB0aGUgc2VydmljZQogICAgICAgIGZvciBteSAkU2VydmljZUF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkSXRlbS0+e0FkZEdldH0gfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFNlcnZpY2VHZXR7JFNlcnZpY2VBdHRyaWJ1dGV9IHx8ICcnLAogICAgICAgICAgICAgICAgJEl0ZW0tPntBZGRHZXR9LT57JFNlcnZpY2VBdHRyaWJ1dGV9IHx8ICcnLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUdldCgpIC0gJFNlcnZpY2VBdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRJdGVtLT57VXBkYXRlfSApIHsKCiAgICAgICAgIyBjaGVjayBsYXN0IHNlcnZpY2UgaWQgdmFyaWFibGUKICAgICAgICBpZiAoICEkTGFzdEFkZGVkU2VydmljZUlEICkgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogTk8gTEFTVCBTRVJWSUNFIElEIEdJVkVOIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcHJlcGFyZSBwYXJlbnQgaWQKICAgICAgICBpZiAoICRJdGVtLT57VXBkYXRlfS0+e1BhcmVudElEfSAmJiAkSXRlbS0+e1VwZGF0ZX0tPntQYXJlbnRJRH0gZXEgJ0xBU1RBRERJRCcgKSB7CiAgICAgICAgICAgICRJdGVtLT57VXBkYXRlfS0+e1BhcmVudElEfSA9ICRMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEl0ZW0tPntVcGRhdGV9LT57UGFyZW50SUR9ICYmICRJdGVtLT57VXBkYXRlfS0+e1BhcmVudElEfSBlcSAnTEFTVExBU1RBRERJRCcgKSB7CiAgICAgICAgICAgICRJdGVtLT57VXBkYXRlfS0+e1BhcmVudElEfSA9ICRMYXN0TGFzdEFkZGVkU2VydmljZUlEOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZGVsZXRlICRJdGVtLT57VXBkYXRlfS0+e1BhcmVudElEfTsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHRoZSBzZXJ2aWNlCiAgICAgICAgbXkgJFVwZGF0ZVN1Y2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgICAgICAgICAleyAkSXRlbS0+e1VwZGF0ZX0gfSwKICAgICAgICAgICAgU2VydmljZUlEID0+ICRMYXN0QWRkZWRTZXJ2aWNlSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzZXJ2aWNlIHdhcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseSBvciBub3QKICAgICAgICBpZiAoICRJdGVtLT57VXBkYXRlR2V0fSApIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkVXBkYXRlU3VjZXNzLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZVVwZGF0ZSgpIC0gU2VydmljZUlEOiAkTGFzdEFkZGVkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRVcGRhdGVTdWNlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlVXBkYXRlKCkiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgbm9uLWV4aXN0aW5nIHNlcnZpY2UKICAgICAgICBteSAkTm9uZXhpc3RpbmdTZXJ2aWNlSUQgPSAzMjU2NyAtIDE7CiAgICAgICAgbXkgJFVwZGF0ZU5vblN1Y2VzcyAgICAgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgICAgICV7ICRJdGVtLT57VXBkYXRlfSB9LAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJE5vbmV4aXN0aW5nU2VydmljZUlELAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkVXBkYXRlTm9uU3VjZXNzLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlVXBkYXRlKCkgZm9yIG5vbmV4aXN0aW5nIHNlcnZpY2UiLAogICAgICAgICk7CgogICAgICAgICMgcHJlcGFyZSBwYXJlbnQgaWQKICAgICAgICBpZiAoICRJdGVtLT57VXBkYXRlR2V0fS0+e1BhcmVudElEfSAmJiAkSXRlbS0+e1VwZGF0ZUdldH0tPntQYXJlbnRJRH0gZXEgJ0xBU1RBRERJRCcgKSB7CiAgICAgICAgICAgICRJdGVtLT57VXBkYXRlR2V0fS0+e1BhcmVudElEfSA9ICRMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgKICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGVHZXR9LT57UGFyZW50SUR9CiAgICAgICAgICAgICYmICRJdGVtLT57VXBkYXRlR2V0fS0+e1BhcmVudElEfSBlcSAnTEFTVExBU1RBRERJRCcKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGVHZXR9LT57UGFyZW50SUR9ID0gJExhc3RMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzZXJ2aWNlIGRhdGEgdG8gY2hlY2sgdGhlIHZhbHVlcyBhZnRlciB0aGUgdXBkYXRlCiAgICAgICAgbXkgJVNlcnZpY2VHZXQyID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkTGFzdEFkZGVkU2VydmljZUlELAogICAgICAgICAgICBVc2VySUQgICAgPT4gJEl0ZW0tPntVcGRhdGV9LT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHNlcnZpY2UgZGF0YSBhZnRlciB1cGRhdGUKICAgICAgICBmb3IgbXkgJFNlcnZpY2VBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntVcGRhdGVHZXR9IH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRTZXJ2aWNlR2V0MnskU2VydmljZUF0dHJpYnV0ZX0gfHwgJycsCiAgICAgICAgICAgICAgICAkSXRlbS0+e1VwZGF0ZUdldH0tPnskU2VydmljZUF0dHJpYnV0ZX0gfHwgJycsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlR2V0KCkgLSAkU2VydmljZUF0dHJpYnV0ZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGxvb2t1cCBzZXJ2aWNlIG5hbWUKICAgICAgICBteSAkU2VydmljZU5hbWUgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCggU2VydmljZUlEID0+ICRTZXJ2aWNlR2V0MntTZXJ2aWNlSUR9ICk7CgogICAgICAgICMgbG9va3VwIHRlc3QKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZXJ2aWNlTmFtZSB8fCAnJywKICAgICAgICAgICAgJFNlcnZpY2VHZXQye05hbWV9IHx8ICcnLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlTG9va3VwKCkgLSBsb29rdXAiLAogICAgICAgICk7CgogICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGhlIHNlcnZpY2UgaWQKICAgICAgICBteSAkU2VydmljZUlETmV3ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoIE5hbWUgPT4gJFNlcnZpY2VOYW1lIHx8ICcnICk7CgogICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGVzdAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlcnZpY2VJRE5ldyB8fCAnJywKICAgICAgICAgICAgJFNlcnZpY2VHZXQye1NlcnZpY2VJRH0gfHwgJycsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VMb29rdXAoKSAtIHJldmVyc2UgbG9va3VwIiwKICAgICAgICApOwogICAgfQoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIEFkZGl0aW9uYWwgU2VydmljZUdldCB0ZXN0IChCeSBTZXJ2aWNlTmFtZSBhbmQgU2VydmljZUlEKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgp7CgogICAgIyBnZXQgYSBzZXJ2aWNlIGJ5IHVzaW5nIHRoZSBzZXJ2aWNlIG5hbWUKICAgIG15ICVTZXJ2aWNlR2V0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgTmFtZSAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRTZXJ2aWNlR2V0e05hbWV9LAogICAgICAgICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlR2V0KCkgLSBieSBzZXJ2aWNlIG5hbWUiLAogICAgKTsKCiAgICAjIGdldCB0aGUgc2FtZSBzZXJ2aWNlIGJ5IHVzaW5nIHRoZSBzZXJ2aWNlIGlkCiAgICAlU2VydmljZUdldCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUdldHtTZXJ2aWNlSUR9LAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFNlcnZpY2VHZXR7TmFtZX0sCiAgICAgICAgJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VHZXQoKSAtIGJ5IHNlcnZpY2UgaWQiLAogICAgKTsKCn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBTZXJ2aWNlTGlzdCB0ZXN0IDEgKGNoZWNrIGdlbmVyYWwgZnVuY3Rpb25hbGl0eSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJVNlcnZpY2VMaXN0MSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgIFZhbGlkICA9PiAwLAogICAgVXNlcklEID0+IDEsCik7Cm15ICVTZXJ2aWNlTGlzdDFPcmcgPSAlU2VydmljZUxpc3RPcmlnaW5hbDsKClNFUlZJQ0VJRDoKZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IGtleXMgJVNlcnZpY2VMaXN0MU9yZyApIHsKCiAgICBpZiAoICRTZXJ2aWNlTGlzdDF7JFNlcnZpY2VJRH0gJiYgJFNlcnZpY2VMaXN0MU9yZ3skU2VydmljZUlEfSBlcSAkU2VydmljZUxpc3QxeyRTZXJ2aWNlSUR9ICkgewogICAgICAgIGRlbGV0ZSAkU2VydmljZUxpc3QxeyRTZXJ2aWNlSUR9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlcnZpY2VMaXN0MXtEdW1teX0gPSAxOwogICAgfQp9CgpteSAkU2VydmljZUxpc3QxQ291bnQgPSBzY2FsYXIga2V5cyAlU2VydmljZUxpc3QxOwoKJFNlbGYtPklzKAogICAgJFNlcnZpY2VMaXN0MUNvdW50IHx8ICcnLAogICAgJEFkZGVkQ291bnRlciAgICAgIHx8ICcnLAogICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUxpc3QoKSIsCik7CgokVGVzdENvdW50Kys7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgU2VydmljZUxpc3QgdGVzdCAyIChjaGVjayBjYWNoZSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJVNlcnZpY2VMaXN0MiA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgIFZhbGlkICA9PiAwLAogICAgVXNlcklEID0+IDEsCik7CgpteSAkU2VydmljZUxpc3QyU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVs5XSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCik7CgpteSAlU2VydmljZUxpc3QyYiA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgIFZhbGlkICA9PiAwLAogICAgVXNlcklEID0+IDEsCik7CgpTRVJWSUNFSUQ6CmZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICVTZXJ2aWNlTGlzdDIgKSB7CgogICAgaWYgKCAkU2VydmljZUxpc3QyYnskU2VydmljZUlEfSAmJiAkU2VydmljZUxpc3QyeyRTZXJ2aWNlSUR9IGVxICRTZXJ2aWNlTGlzdDJieyRTZXJ2aWNlSUR9ICkgewogICAgICAgIGRlbGV0ZSAkU2VydmljZUxpc3QyYnskU2VydmljZUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZXJ2aWNlTGlzdDJie0R1bW15fSA9IDE7CiAgICB9Cn0KCm15IEBTZXJ2aWNlTGlzdDJJRHMgICA9IGtleXMgJVNlcnZpY2VMaXN0MmI7Cm15ICRTZXJ2aWNlTGlzdDJDb3VudCA9IHNjYWxhciBAU2VydmljZUxpc3QySURzOwoKJFNlbGYtPklzKAogICAgJFNlcnZpY2VMaXN0MkNvdW50IHx8ICcnLAogICAgMSwKICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VMaXN0KCkgLSBjaGVjayBudW1iZXIgb2Ygc2VydmljZXMiLAopOwoKJFNlbGYtPklzKAogICAgJFNlcnZpY2VMaXN0MklEc1swXSB8fCAnJywKICAgICRTZXJ2aWNlTGlzdDJTZXJ2aWNlSUQgfHwgJycsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlTGlzdCgpIC0gY2hlY2sgaWQgb2YgbGFzdCBzZXJ2aWNlIiwKKTsKCiRUZXN0Q291bnQrKzsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBTZXJ2aWNlU2VhcmNoIHRlc3QgMSAoY2hlY2sgZ2VuZXJhbCBmdW5jdGlvbmFsaXR5KQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSBAU2VydmljZVNlYXJjaDFTZWFyY2ggPSAkU2VydmljZU9iamVjdC0+U2VydmljZVNlYXJjaCggVXNlcklEID0+IDEgKTsKCm15ICVTZXJ2aWNlU2VhcmNoMUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3QoCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIEtlZXBDaGlsZHJlbiA9PiAxLAopOwoKU0VSVklDRUlEOgpmb3IgbXkgJFNlcnZpY2VJRCAoQFNlcnZpY2VTZWFyY2gxU2VhcmNoKSB7CgogICAgaWYgKCAkU2VydmljZVNlYXJjaDFMaXN0eyRTZXJ2aWNlSUR9ICkgewogICAgICAgIGRlbGV0ZSAkU2VydmljZVNlYXJjaDFMaXN0eyRTZXJ2aWNlSUR9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlcnZpY2VTZWFyY2gxTGlzdHtEdW1teX0gPSAxOwogICAgfQp9CgpteSAkU2VydmljZVNlYXJjaDFDb3VudCA9IHNjYWxhciBrZXlzICVTZXJ2aWNlU2VhcmNoMUxpc3Q7CgokU2VsZi0+SXMoCiAgICAkU2VydmljZVNlYXJjaDFDb3VudCwKICAgIDAsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlU2VhcmNoKCkiLAopOwoKJFRlc3RDb3VudCsrOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zIGZvciBsYXRlciB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGFkZCBzb21lIG5lZWRlZCBzZXJ2aWNlcyBmb3IgbGF0ZXIgdGVzdHMKbXkgQFNlcnZpY2VOYW1lcyA9ICggJFNlcnZpY2VOYW1lWzEwXSAuICdOb3JtYWwnLCAkU2VydmljZU5hbWVbMTBdIC4gJ9SIINO0IM+qIM++JyApOwpteSAlU2VydmljZVNlYXJjaDJTZXJ2aWNlSUQ7CgpteSAkQ291bnRlcjEgPSAwOwpmb3IgbXkgJFNlcnZpY2VOYW1lIChAU2VydmljZU5hbWVzKSB7CgogICAgJFNlcnZpY2VTZWFyY2gyU2VydmljZUlEeyRDb3VudGVyMX0gPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZSwKICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgKTsKCiAgICAkQ291bnRlcjErKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNlcnZpY2VTZWFyY2ggdGVzdCAyIChnZW5lcmFsIG5hbWUgY2hlY2tzKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkQ291bnRlcjIgPSAwOwpmb3IgbXkgJFNlcnZpY2VOYW1lIChAU2VydmljZU5hbWVzKSB7CgogICAgbXkgQFByZXBhcmVkTmFtZXMgPSAoCiAgICAgICAgJFNlcnZpY2VOYW1lLAogICAgICAgICcqJyAuICRTZXJ2aWNlTmFtZSwKICAgICAgICAkU2VydmljZU5hbWUgLiAnKicsCiAgICAgICAgJyonIC4gJFNlcnZpY2VOYW1lIC4gJyonLAogICAgICAgICcqKicgLiAkU2VydmljZU5hbWUsCiAgICAgICAgJFNlcnZpY2VOYW1lIC4gJyoqJywKICAgICAgICAnKionIC4gJFNlcnZpY2VOYW1lIC4gJyoqJywKICAgICk7CgogICAgZm9yIG15ICRQcmVwYXJlZE5hbWUgKEBQcmVwYXJlZE5hbWVzKSB7CgogICAgICAgIG15IEBTZXJ2aWNlTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlU2VhcmNoKAogICAgICAgICAgICBOYW1lICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZXJ2aWNlTGlzdFswXSB8fCAnJywKICAgICAgICAgICAgJFNlcnZpY2VTZWFyY2gyU2VydmljZUlEeyRDb3VudGVyMn0gfHwgJycsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VTZWFyY2goKSAtIGdlbmVyYWwgbmFtZSBjaGVjayIsCiAgICAgICAgKTsKCiAgICAgICAgJFRlc3RDb3VudCsrOwogICAgfQoKICAgICRDb3VudGVyMisrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgU2VydmljZUxpc3RHZXQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2VydmljZXMKbXkgJFNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0R2V0KAogICAgVmFsaWQgID0+IDAsCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgY2hlY2sgaWYgcmVzdWx0IGlzIGFuIGFycmF5IHJlZgokU2VsZi0+SXMoCiAgICByZWYgJFNlcnZpY2VMaXN0LAogICAgJ0FSUkFZJywKICAgICJTZXJ2aWNlTGlzdEdldCgpIC0gSXMgQXJyYXkiLAopOwoKIyBjaGVjayBpZiBlYWNoIGFycmF5IGl0ZW0gaXMgYSBoYXNoIHJlZgp7CiAgICBteSAkQ291bnRlcjsKICAgIGZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgogICAgICAgICRDb3VudGVyKys7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICByZWYgJFNlcnZpY2VEYXRhLAogICAgICAgICAgICAnSEFTSCcsCiAgICAgICAgICAgICJTZXJ2aWNlTGlzdEdldFskQ291bnRlcl0gLSBJcyBIYXNoIiwKICAgICAgICApOwogICAgfQp9CgojIGNoZWNrIGludGVncml0eSBvZiBlYWNoIGFycmF5IGVsZW1lbnQKewogICAgbXkgJENvdW50ZXI7CiAgICBmb3IgbXkgJFNlcnZpY2VEYXRhICggQHskU2VydmljZUxpc3R9ICkgewoKICAgICAgICBteSAlU2VydmljZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VEYXRhLT57U2VydmljZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLAojIC0tLQogICAgICAgICk7CiAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRTZXJ2aWNlRGF0YSwKICAgICAgICAgICAgXCVTZXJ2aWNlLAogICAgICAgICAgICAiU2VydmljZUxpc3RHZXRbJENvdW50ZXJdIC0gQ29tcGFyZWQgdG8gU2VydmljZUdldCIsCiAgICAgICAgKTsKICAgIH0KfQoKIyBhZGQgc2VydmljZXMKbXkgJFNlcnZpY2VHcmFuZEZhdGhlcklEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgICA9PiAnVW5pdFRlc3RTZXJ2aWNlX0dGXycgLiAkUmFuZG9tSUQsCiAgICBQYXJlbnRJRCA9PiAwLAogICAgVmFsaWRJRCAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICBDb21tZW50ICA9PiAnVGVzdGluZyBzZXJ2aWNlJywKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwKICAgICJTZXJ2aWNlQWRkKCkgLSBmb3IgU2VydmljZUdyYW5kRmF0aGVyIgopOwoKbXkgJFNlcnZpY2VGYXRoZXJJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICAgPT4gJ1VuaXRUZXN0U2VydmljZV9GXycgLiAkUmFuZG9tSUQsCiAgICBQYXJlbnRJRCA9PiAkU2VydmljZUdyYW5kRmF0aGVySUQsCiAgICBWYWxpZElEICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIENvbW1lbnQgID0+ICdUZXN0aW5nIHNlcnZpY2UnLAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VGYXRoZXJJRCwKICAgICJTZXJ2aWNlQWRkKCkgLSBmb3IgU2VydmljZUZhdGhlciIKKTsKCm15ICRTZXJ2aWNlU29uSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgID0+ICdVbml0VGVzdFNlcnZpY2VfU18nIC4gJFJhbmRvbUlELAogICAgUGFyZW50SUQgPT4gJFNlcnZpY2VGYXRoZXJJRCwKICAgIFZhbGlkSUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgQ29tbWVudCAgPT4gJ1Rlc3Rpbmcgc2VydmljZScsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZVNvbklELAogICAgIlNlcnZpY2VBZGQoKSAtIGZvciBTZXJ2aWNlU29uIgopOwoKIyBnZXQgdGhlIHNlcnZpY2UgbGlzdCBhZ2FpbgpteSAkTmV3U2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3RHZXQoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjb21wYXJlIHRoZSBzZXJ2aWNlIGxpc3RzIChzaG91bGQgYmUgbm90IGVxdWFsIHNpbmNlIG5ldyBzZXJ2aWNlcyB3aGVyZSBhZGRlZCkKJFNlbGYtPklzTm90RGVlcGx5KAogICAgJFNlcnZpY2VMaXN0LAogICAgJE5ld1NlcnZpY2VMaXN0LAogICAgIlNlcnZpY2VMaXN0R2V0KCkgLSBjb21wYXJlZCB3aXRoIGl0c2VsZiBhZnRlciBhZGRpbmcgbmV3IHNlcnZpY2VzIgopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNlcnZpY2VQYXJlbnRzR2V0CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IHRoZSBwYXJlbnRzIGZvciBncmFuZCBmYXRoZXIKbXkgJFNlcnZpY2VQYXJlbnRzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQYXJlbnRzR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPklzRGVlcGx5KAogICAgJFNlcnZpY2VQYXJlbnRzLAogICAgW10sCiAgICAiU2VydmljZVBhcmVudHNMaXN0R2V0IC0gZm9yIFNlcnZpY2VHcmFuZEZhdGhlciIKKTsKCiRTZXJ2aWNlUGFyZW50cyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUdyYW5kRmF0aGVySUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5Jc0RlZXBseSgKICAgICRTZXJ2aWNlUGFyZW50cywKICAgIFtdLAogICAgIlNlcnZpY2VQYXJlbnRzTGlzdEdldCAtIGZvciBTZXJ2aWNlR3JhbmRGYXRoZXIgKGNhY2hlZCkiCik7CgojIGdldCB0aGUgcGFyZW50cyBmb3IgZmF0aGVyCiRTZXJ2aWNlUGFyZW50cyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUZhdGhlcklELAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2VydmljZVBhcmVudHMsCiAgICBbJFNlcnZpY2VHcmFuZEZhdGhlcklEXSwKICAgICJTZXJ2aWNlUGFyZW50c0dldCAtIGZvciBTZXJ2aWNlRmF0aGVyIgopOwoKJFNlcnZpY2VQYXJlbnRzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQYXJlbnRzR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlRmF0aGVySUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5Jc0RlZXBseSgKICAgICRTZXJ2aWNlUGFyZW50cywKICAgIFskU2VydmljZUdyYW5kRmF0aGVySURdLAogICAgIlNlcnZpY2VQYXJlbnRzR2V0IC0gZm9yIFNlcnZpY2VGYXRoZXIgKGNhY2hlZCkiCik7CgojIGdldCB0aGUgcGFyZW50cyBmb3Igc29uCiRTZXJ2aWNlUGFyZW50cyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZVNvbklELAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2VydmljZVBhcmVudHMsCiAgICBbICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwgJFNlcnZpY2VGYXRoZXJJRCBdLAogICAgIlNlcnZpY2VQYXJlbnRzR2V0IC0gZm9yIFNlcnZpY2VTb24iCik7CgokU2VydmljZVBhcmVudHMgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVBhcmVudHNHZXQoCiAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VTb25JRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPklzRGVlcGx5KAogICAgJFNlcnZpY2VQYXJlbnRzLAogICAgWyAkU2VydmljZUdyYW5kRmF0aGVySUQsICRTZXJ2aWNlRmF0aGVySUQgXSwKICAgICJTZXJ2aWNlUGFyZW50c0dldCAtIGZvciBTZXJ2aWNlU29uIChjYWNoZWQpIgopOwoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L1NMQS50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKbXkgJFNMQU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7Cm15ICRVc2VyT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGNyZWF0ZSBuZWVkZWQgdXNlcnMKbXkgQFVzZXJJRHM7CnsKCiAgICAjIGRpc2FibGUgZW1haWwgY2hlY2tzIHRvIGNyZWF0ZSBuZXcgdXNlcgogICAgbXkgJENoZWNrRW1haWxBZGRyZXNzZXNPcmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrRW1haWxBZGRyZXNzZXMnKSB8fCAxOwogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAwLAogICAgKTsKCiAgICBmb3IgbXkgJENvdW50ZXIgKCAxIC4uIDIgKSB7CgogICAgICAgICMgY3JlYXRlIG5ldyB1c2VycyBmb3IgdGhlIHRlc3RzCiAgICAgICAgbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyQWRkKAogICAgICAgICAgICBVc2VyRmlyc3RuYW1lID0+ICdTTEEnIC4gJENvdW50ZXIsCiAgICAgICAgICAgIFVzZXJMYXN0bmFtZSAgPT4gJ1VuaXRUZXN0JywKICAgICAgICAgICAgVXNlckxvZ2luICAgICA9PiAnVW5pdFRlc3QtU0xBLScgLiAkQ291bnRlciAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgIFVzZXJFbWFpbCAgICAgPT4gJ1VuaXRUZXN0LVNMQS0nIC4gJENvdW50ZXIgLiAnQGxvY2FsaG9zdCcsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQFVzZXJJRHMsICRVc2VySUQ7CiAgICB9CgogICAgIyByZXN0b3JlIG9yaWdpbmFsIGVtYWlsIGNoZWNrIHBhcmFtCiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnLAogICAgKTsKfQoKIyBjcmVhdGUgbmVlZGVkIHJhbmRvbSBzZXJ2aWNlIG5hbWVzCm15IEBTTEFOYW1lOwpmb3IgbXkgJENvdW50ZXIgKCAxIC4uIDEwICkgewogICAgcHVzaCBAU0xBTmFtZSwgJ1VuaXRUZXN0JyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7Cn0KCiMgY3JlYXRlIHNvbWUgdGVzdCBzZXJ2aWNlcwpteSBAU2VydmljZUlEczsKZm9yIG15ICRDb3VudGVyICggMSAuLiAzICkgewoKICAgICMgYWRkIGEgc2VydmljZQogICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgIE5hbWUgICAgPT4gJ1VuaXRUZXN0LVNMQScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICApOwoKICAgIHB1c2ggQFNlcnZpY2VJRHMsICRTZXJ2aWNlSUQ7Cn0KCiMgZ2V0IG9yaWdpbmFsIFNMQSBsaXN0IGZvciBsYXRlciBjaGVja3MKbXkgJVNMQUxpc3RPcmlnaW5hbCA9ICRTTEFPYmplY3QtPlNMQUxpc3QoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGRlZmluZSBnZW5lcmFsIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRJdGVtRGF0YSA9IFsKCiAgICAjIHRoaXMgU0xBIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgU0xBIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgPT4gJFNMQU5hbWVbMF0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBTTEEgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNMQU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgIyB0aGlzIFNMQSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCiMgLS0tCgogICAgIyBzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gXGRvIHsnRHVtbXknfSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFNMQU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgc2VydmljZSBpZHMgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IHt9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgU0xBIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5CiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzBdLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgICAgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgU0xBIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBvbmUgdGVzdCBiZWZvcmUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoU0xBIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChTTEEgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkU0xBTmFtZVswXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoU0xBIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSBpZHMgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiBcZG8geydEdW1teSd9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IHt9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgU0xBIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChjaGVjayB0aGUgcmV0dXJuZWQgc2VydmljZSBpZCBhcnJheSkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFsgJFNlcnZpY2VJRHNbMF0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVsxXSwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMF0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVsxXSwKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgU0xBIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChjaGVjayB0aGUgc29ydGluZyBvZiB0aGUgcmV0dXJuZWQgc2VydmljZSBpZCBhcnJheSkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFsgJFNlcnZpY2VJRHNbMV0sICRTZXJ2aWNlSURzWzBdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFNMQU5hbWVbMl0sCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAyLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzBdLCAkU2VydmljZUlEc1sxXSBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzJdLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAyLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNMQU5hbWVbMV0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBTTEEgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMV0sICRTZXJ2aWNlSURzWzJdLCAkU2VydmljZUlEc1swXSBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzNdLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAxMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAyMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAzMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA0MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA1MCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA2MCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0Q29tbWVudDInLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMF0sICRTZXJ2aWNlSURzWzFdLCAkU2VydmljZUlEc1syXSBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzNdLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAxMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAyMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAzMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA0MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA1MCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA2MCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0Q29tbWVudDInLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChTTEEgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoU0xBIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkU0xBTmFtZVszXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoU0xBIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNMQU5hbWVbM10gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKFNMQSB1cGRhdGUgYXJndW1lbnRzIGFyZSBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzNdIC4gJ1VQREFURTInLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAyMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAzMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiA0MCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA1MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA2MCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA3MCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0Q29tbWVudDJVUERBVEUyJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAkVXNlcklEc1swXSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbM10gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDIwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDMwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDQwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDUwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDYwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDcwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3RDb21tZW50MlVQREFURTInLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIChTTEEgdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzJdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbM10gLiAnVVBEQVRFMycsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJzInLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDMwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDQwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDUwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDYwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDcwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDgwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3RDb21tZW50MlVQREFURTMnLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzJdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbM10gLiAnVVBEQVRFMycsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJzInLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDMwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDQwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDUwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDYwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDcwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDgwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3RDb21tZW50MlVQREFURTMnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIFNMQSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiBbICRTZXJ2aWNlSURzWzBdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gIiBcdCBcbiBcciAiIC4gJFNMQU5hbWVbNF0gLiAiIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMF0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVs0XSwKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0IENvbW1lbnQnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IChjaGVjayBzdHJpbmcgY2xlYW5lciBmdW5jdGlvbikKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFsgJFNlcnZpY2VJRHNbMV0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAiIFx0IFxuIFxyICIgLiAkU0xBTmFtZVs0XSAuICIgVVBEQVRFMSBcdCBcbiBcciAiLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgPT4gIiBcdCBcbiBcciBUZXN0IENvbW1lbnQgVVBEQVRFMSBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzFdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbNF0gLiAnIFVQREFURTEnLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3QgQ29tbWVudCBVUERBVEUxJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBTTEEgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkgKFVuaWNvZGUgY2hlY2tzKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNMQU5hbWVbNV0gLiAnIM+SIM+hIMapIM+eICcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnINGgINGkIFRlc3RDb21tZW50NSDPoCDOqSAnLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDMsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzVdIC4gJyDPkiDPoSDGqSDPnicsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAn0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDMsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSAoVW5pY29kZSBjaGVja3MpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVs1XSAuICcgz5Igz6Egxqkgz54gVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnINGgINGkIFRlc3RDb21tZW50NSDPoCDOqSBVUERBVEUxJywKICAgICAgICAgICAgVXNlcklEICA9PiAkVXNlcklEc1swXSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbNV0gLiAnIM+SIM+hIMapIM+eIFVQREFURTEnLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ9GgINGkIFRlc3RDb21tZW50NSDPoCDOqSBVUERBVEUxJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBTTEEgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNMQU5hbWVbNl0gLiAnIFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgID0+ICcgW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdbdGVzdF0lKlxcICcgLiAkU0xBTmFtZVs2XSAuICcgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIFNMQSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNMQU5hbWVbNl0gLiAnIFVQREFURTEgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgPT4gJyBbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBVUERBVEUxIFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkVXNlcklEc1sxXSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ1t0ZXN0XSUqXFwgJyAuICRTTEFOYW1lWzZdIC4gJyBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFVQREFURTEgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAkVXNlcklEc1sxXSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgfSwKXTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBydW4gZ2VuZXJhbCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkVGVzdENvdW50ID0gMTsKbXkgJExhc3RBZGRlZFNMQUlEOwpteSAkQWRkZWRDb3VudGVyID0gMDsKCmZvciBteSAkSXRlbSAoIEB7JEl0ZW1EYXRhfSApIHsKCiAgICBpZiAoICRJdGVtLT57QWRkfSApIHsKCiAgICAgICAgIyBhZGQgbmV3IFNMQQogICAgICAgIG15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUFkZCggJXsgJEl0ZW0tPntBZGR9IH0gKTsKCiAgICAgICAgIyBjaGVjayBpZiBTTEEgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSBvciBub3QKICAgICAgICBpZiAoICRJdGVtLT57QWRkR2V0fSApIHsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNMQUlELAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU0xBQWRkKCkgLSBTTEFJRDogJFNMQUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkU0xBSUQpIHsKCiAgICAgICAgICAgICAgICAjIGxvb2t1cCBTTEEgbmFtZQogICAgICAgICAgICAgICAgbXkgJFNMQU5hbWUgPSAkU0xBT2JqZWN0LT5TTEFMb29rdXAoIFNMQUlEID0+ICRTTEFJRCApOwoKICAgICAgICAgICAgICAgICMgbG9va3VwIHRlc3QKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkU0xBTmFtZSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPntOYW1lfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMb29rdXAoKSAtIGxvb2t1cCIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGhlIFNMQSBpZAogICAgICAgICAgICAgICAgbXkgJFNMQUlETmV3ID0gJFNMQU9iamVjdC0+U0xBTG9va3VwKCBOYW1lID0+ICRTTEFOYW1lIHx8ICcnICk7CgogICAgICAgICAgICAgICAgIyByZXZlcnNlIGxvb2t1cCB0ZXN0CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJFNMQUlETmV3IHx8ICcnLAogICAgICAgICAgICAgICAgICAgICRTTEFJRCAgICB8fCAnJywKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMb29rdXAoKSAtIHJldmVyc2UgbG9va3VwIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgbGFzdCBTTEEgaWQgdmFyaWFibGUKICAgICAgICAgICAgICAgICRMYXN0QWRkZWRTTEFJRCA9ICRTTEFJRDsKCiAgICAgICAgICAgICAgICAjIGluY3JlbWVudCB0aGUgYWRkZWQgY291bnRlcgogICAgICAgICAgICAgICAgJEFkZGVkQ291bnRlcisrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkU0xBSUQsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFBZGQoKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBTTEEgZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIGNyZWF0aW9uIG9mIHRoZSBTTEEKICAgICAgICBteSAlU0xBR2V0ID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgICAgICBVc2VySUQgPT4gJEl0ZW0tPntBZGR9LT57VXNlcklEfSwKICAgICAgICAgICAgQ2FjaGUgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBTTEEgZGF0YSBhZnRlciBjcmVhdGlvbiBvZiB0aGUgU0xBCiAgICAgICAgZm9yIG15ICRTTEFBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntBZGRHZXR9IH0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIGF0dHJpYnV0ZXMKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgJFNMQUdldHskU0xBQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICRJdGVtLT57QWRkR2V0fS0+eyRTTEFBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU0xBR2V0KCkgLSAkU0xBQXR0cmlidXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkSXRlbS0+e1VwZGF0ZX0gKSB7CgogICAgICAgICMgY2hlY2sgbGFzdCBTTEEgaWQgdmFyaWFibGUKICAgICAgICBpZiAoICEkTGFzdEFkZGVkU0xBSUQgKSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBOTyBMQVNUIFNFUlZJQ0UgSUQgR0lWRU4iLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgdGhlIFNMQQogICAgICAgIG15ICRVcGRhdGVTdWNlc3MgPSAkU0xBT2JqZWN0LT5TTEFVcGRhdGUoCiAgICAgICAgICAgICV7ICRJdGVtLT57VXBkYXRlfSB9LAogICAgICAgICAgICBTTEFJRCA9PiAkTGFzdEFkZGVkU0xBSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiBTTEEgd2FzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntVcGRhdGVHZXR9ICkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRVcGRhdGVTdWNlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFVcGRhdGUoKSAtIFNMQUlEOiAkTGFzdEFkZGVkU0xBSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFVwZGF0ZVN1Y2VzcywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNMQVVwZGF0ZSgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IFNMQSBkYXRhIHRvIGNoZWNrIHRoZSB2YWx1ZXMgYWZ0ZXIgdGhlIHVwZGF0ZQogICAgICAgIG15ICVTTEFHZXQyID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICBTTEFJRCAgPT4gJExhc3RBZGRlZFNMQUlELAogICAgICAgICAgICBVc2VySUQgPT4gJEl0ZW0tPntVcGRhdGV9LT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIFNMQSBkYXRhIGFmdGVyIHVwZGF0ZQogICAgICAgIGZvciBteSAkU0xBQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRJdGVtLT57VXBkYXRlR2V0fSB9ICkgewoKICAgICAgICAgICAgIyBjaGVjayBhdHRyaWJ1dGVzCiAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgICRTTEFHZXQyeyRTTEFBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGVHZXR9LT57JFNMQUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFHZXQoKSAtICRTTEFBdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBsb29rdXAgU0xBIG5hbWUKICAgICAgICBteSAkU0xBTmFtZSA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCggU0xBSUQgPT4gJFNMQUdldDJ7U0xBSUR9ICk7CgogICAgICAgICMgbG9va3VwIHRlc3QKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTTEFOYW1lIHx8ICcnLAogICAgICAgICAgICAkU0xBR2V0MntOYW1lfSB8fCAnJywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU0xBTG9va3VwKCkgLSBsb29rdXAiLAogICAgICAgICk7CgogICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGhlIFNMQSBpZAogICAgICAgIG15ICRTTEFJRE5ldyA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCggTmFtZSA9PiAkU0xBTmFtZSB8fCAnJyApOwoKICAgICAgICAjIHJldmVyc2UgbG9va3VwIHRlc3QKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTTEFJRE5ldyB8fCAnJywKICAgICAgICAgICAgJFNMQUdldDJ7U0xBSUR9IHx8ICcnLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMb29rdXAoKSAtIHJldmVyc2UgbG9va3VwIiwKICAgICAgICApOwogICAgfQoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNMQUxpc3QgdGVzdCAxIChjaGVjayBnZW5lcmFsIGZ1bmN0aW9uYWxpdHkpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICVTTEFMaXN0MSA9ICRTTEFPYmplY3QtPlNMQUxpc3QoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwpteSAlU0xBTGlzdDFPcmcgPSAlU0xBTGlzdE9yaWdpbmFsOwoKU0VSVklDRUlEOgpmb3IgbXkgJFNMQUlEICggc29ydCBrZXlzICVTTEFMaXN0MU9yZyApIHsKCiAgICBpZiAoICRTTEFMaXN0MXskU0xBSUR9ICYmICRTTEFMaXN0MU9yZ3skU0xBSUR9IGVxICRTTEFMaXN0MXskU0xBSUR9ICkgewogICAgICAgIGRlbGV0ZSAkU0xBTGlzdDF7JFNMQUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTTEFMaXN0MXtEdW1teX0gPSAxOwogICAgfQp9CgpteSAkU0xBTGlzdDFDb3VudCA9IHNjYWxhciBrZXlzICVTTEFMaXN0MTsKCiRTZWxmLT5JcygKICAgICRTTEFMaXN0MUNvdW50IHx8ICcnLAogICAgJEFkZGVkQ291bnRlciAgfHwgJycsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMaXN0KCkiLAopOwoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L1RpY2tldC50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkUXVldWVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwpteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7Cm15ICRTTEFPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwpteSAkU3RhdGVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpOwpteSAkVGlja2V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKbXkgJFRpbWVPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwpteSAkVHlwZU9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyk7Cm15ICRVc2VyT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgc2V0IGZpeGVkIHRpbWUKJEhlbHBlci0+Rml4ZWRUaW1lU2V0KCk7CgpteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgPT4gJ1NvbWUgVGlja2V0X1RpdGxlJywKICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGUgICAgICAgID0+ICdjbG9zZWQgc3VjY2Vzc2Z1bCcsCiAgICBDdXN0b21lck5vICAgPT4gJzEyMzQ2NScsCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90cnMuY29tJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElELAogICAgJ1RpY2tldENyZWF0ZSgpJywKKTsKCm15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBFeHRlbmRlZCA9PiAxLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e1RpdGxlfSwKICAgICdTb21lIFRpY2tldF9UaXRsZScsCiAgICAnVGlja2V0R2V0KCkgKFRpdGxlKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7UXVldWV9LAogICAgJ1JhdycsCiAgICAnVGlja2V0R2V0KCkgKFF1ZXVlKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7UHJpb3JpdHl9LAogICAgJzMgbm9ybWFsJywKICAgICdUaWNrZXRHZXQoKSAoUHJpb3JpdHkpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtTdGF0ZX0sCiAgICAnY2xvc2VkIHN1Y2Nlc3NmdWwnLAogICAgJ1RpY2tldEdldCgpIChTdGF0ZSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e093bmVyfSwKICAgICdyb290QGxvY2FsaG9zdCcsCiAgICAnVGlja2V0R2V0KCkgKE93bmVyKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7Q3JlYXRlQnl9LAogICAgMSwKICAgICdUaWNrZXRHZXQoKSAoQ3JlYXRlQnkpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtDaGFuZ2VCeX0sCiAgICAxLAogICAgJ1RpY2tldEdldCgpIChDaGFuZ2VCeSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e1RpdGxlfSwKICAgICdTb21lIFRpY2tldF9UaXRsZScsCiAgICAnVGlja2V0R2V0KCkgKFRpdGxlKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7UmVzcG9uc2libGV9LAogICAgJ3Jvb3RAbG9jYWxob3N0JywKICAgICdUaWNrZXRHZXQoKSAoUmVzcG9uc2libGUpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtMb2NrfSwKICAgICd1bmxvY2snLAogICAgJ1RpY2tldEdldCgpIChMb2NrKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7U2VydmljZUlEfSwKICAgICcnLAogICAgJ1RpY2tldEdldCgpIChTZXJ2aWNlSUQpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtTTEFJRH0sCiAgICAnJywKICAgICdUaWNrZXRHZXQoKSAoU0xBSUQpJywKKTsKCm15ICREZWZhdWx0VGlja2V0VHlwZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpUeXBlOjpEZWZhdWx0Jyk7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7VHlwZUlEfSwKICAgICRUeXBlT2JqZWN0LT5UeXBlTG9va3VwKCBUeXBlID0+ICREZWZhdWx0VGlja2V0VHlwZSApLAogICAgJ1RpY2tldEdldCgpIChUeXBlSUQpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtTb2x1dGlvblRpbWV9LAogICAgJFRpY2tldHtDcmVhdGVkfSwKICAgICdUaWNrZXQgY3JlYXRlZCBhcyBjbG9zZWQgYXMgU29sdXRpb24gVGltZSA9IENyZWF0aW9uIFRpbWUnLAopOwoKbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbICd1c2VycycsIF0sCik7CgpteSAkVGVzdFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAopOwoKbXkgJFRpY2tldElEQ3JlYXRlZEJ5ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldF9UaXRsZScsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnY2xvc2VkIHN1Y2Nlc3NmdWwnLAogICAgQ3VzdG9tZXJObyAgID0+ICcxMjM0NjUnLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAkVGVzdFVzZXJJRCwKKTsKCm15ICVDaGVja0NyZWF0ZWRCeSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRENyZWF0ZWRCeSwKICAgIFVzZXJJRCAgID0+ICRUZXN0VXNlcklELAopOwoKJFNlbGYtPklzKAogICAgJENoZWNrQ3JlYXRlZEJ5e0NoYW5nZUJ5fSwKICAgICRUZXN0VXNlcklELAogICAgJ1RpY2tldEdldCgpIChDaGFuZ2VCeSAtIG5vdCBzeXN0ZW0gSUQgMSB1c2VyKScsCik7CgokU2VsZi0+SXMoCiAgICAkQ2hlY2tDcmVhdGVkQnl7Q3JlYXRlQnl9LAogICAgJFRlc3RVc2VySUQsCiAgICAnVGlja2V0R2V0KCkgKENyZWF0ZUJ5IC0gbm90IHN5c3RlbSBJRCAxIHVzZXIpJywKKTsKCiRUaWNrZXRPYmplY3QtPlRpY2tldE93bmVyU2V0KAogICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRENyZWF0ZWRCeSwKICAgIE5ld1VzZXJJRCA9PiAkVGVzdFVzZXJJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJUNoZWNrQ3JlYXRlZEJ5ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElEQ3JlYXRlZEJ5LAogICAgVXNlcklEICAgPT4gJFRlc3RVc2VySUQsCik7CgokU2VsZi0+SXMoCiAgICAkQ2hlY2tDcmVhdGVkQnl7Q3JlYXRlQnl9LAogICAgJFRlc3RVc2VySUQsCiAgICAnVGlja2V0R2V0KCkgKENyZWF0ZUJ5IC0gc3RpbGwgdGhlIHNhbWUgYWZ0ZXIgT3duZXJTZXQpJywKKTsKCiRTZWxmLT5JcygKICAgICRDaGVja0NyZWF0ZWRCeXtPd25lcklEfSwKICAgICRUZXN0VXNlcklELAogICAgJ1RpY2tldE93bmVyU2V0KCknLAopOwoKJFNlbGYtPklzKAogICAgJENoZWNrQ3JlYXRlZEJ5e0NoYW5nZUJ5fSwKICAgIDEsCiAgICAnVGlja2V0T3duZXJTZXQoKSAoQ2hhbmdlQnkgLSBTeXN0ZW0gSUQgMSBub3cpJywKKTsKCm15ICRBcnRpY2xlSUQgPSAkVGlja2V0T2JqZWN0LT5BcnRpY2xlQ3JlYXRlKAogICAgVGlja2V0SUQgICAgPT4gJFRpY2tldElELAogICAgQXJ0aWNsZVR5cGUgPT4gJ25vdGUtaW50ZXJuYWwnLAogICAgU2VuZGVyVHlwZSAgPT4gJ2FnZW50JywKICAgIEZyb20gPT4KICAgICAgICAnU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgVG8gPT4KICAgICAgICAnU29tZSBDdXN0b21lciBBIFNvbWUgQ3VzdG9tZXIgQSBTb21lIEN1c3RvbWVyIEEgU29tZSBDdXN0b21lciBBIFNvbWUgQ3VzdG9tZXIgQSBTb21lIEN1c3RvbWVyIEEgIFNvbWUgQ3VzdG9tZXIgQVNvbWUgQ3VzdG9tZXIgQSBTb21lIEN1c3RvbWVyIEEgPGN1c3RvbWVyLWFAZXhhbXBsZS5jb20+JywKICAgIENjID0+CiAgICAgICAgJ1NvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIDxjdXN0b21lci1iQGV4YW1wbGUuY29tPicsCiAgICBSZXBseVRvID0+CiAgICAgICAgJ1NvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIDxjdXN0b21lci1iQGV4YW1wbGUuY29tPicsCiAgICBTdWJqZWN0ID0+CiAgICAgICAgJ3NvbWUgc2hvcnQgZGVzY3JpcHRpb24gc29tZSBzaG9ydCBkZXNjcmlwdGlvbiBzb21lIHNob3J0IGRlc2NyaXB0aW9uIHNvbWUgc2hvcnQgZGVzY3JpcHRpb24gc29tZSBzaG9ydCBkZXNjcmlwdGlvbiBzb21lIHNob3J0IGRlc2NyaXB0aW9uIHNvbWUgc2hvcnQgZGVzY3JpcHRpb24gc29tZSBzaG9ydCBkZXNjcmlwdGlvbiAnLAogICAgQm9keSA9PiAoCiAgICAgICAgJ3RoZSBtZXNzYWdlIHRleHQKUGVybCBtb2R1bGVzIHByb3ZpZGUgYSByYW5nZSBvZiBmZWF0dXJlcyB0byBoZWxwIHlvdSBhdm9pZCByZWludmVudGluZyB0aGUgd2hlZWwsIGFuZCBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIENQQU4gKCBodHRwOi8vd3d3LmNwYW4ub3JnLyApLiBBIG51bWJlciBvZiBwb3B1bGFyIG1vZHVsZXMgYXJlIGluY2x1ZGVkIHdpdGggdGhlIFBlcmwgZGlzdHJpYnV0aW9uIGl0c2VsZi4KCkNhdGVnb3JpZXMgb2YgbW9kdWxlcyByYW5nZSBmcm9tIHRleHQgbWFuaXB1bGF0aW9uIHRvIG5ldHdvcmsgcHJvdG9jb2xzIHRvIGRhdGFiYXNlIGludGVncmF0aW9uIHRvIGdyYXBoaWNzLiBBIGNhdGVnb3JpemVkIGxpc3Qgb2YgbW9kdWxlcyBpcyBhbHNvIGF2YWlsYWJsZSBmcm9tIENQQU4uCgpUbyBsZWFybiBob3cgdG8gaW5zdGFsbCBtb2R1bGVzIHlvdSBkb3dubG9hZCBmcm9tIENQQU4sIHJlYWQgcGVybG1vZGluc3RhbGwKClRvIGxlYXJuIGhvdyB0byB1c2UgYSBwYXJ0aWN1bGFyIG1vZHVsZSwgdXNlIHBlcmxkb2MgTW9kdWxlOjpOYW1lIC4gVHlwaWNhbGx5IHlvdSB3aWxsIHdhbnQgdG8gdXNlIE1vZHVsZTo6TmFtZSAsIHdoaWNoIHdpbGwgdGhlbiBnaXZlIHlvdSBhY2Nlc3MgdG8gZXhwb3J0ZWQgZnVuY3Rpb25zIG9yIGFuIE9PIGludGVyZmFjZSB0byB0aGUgbW9kdWxlLgoKcGVybGZhcSBjb250YWlucyBxdWVzdGlvbnMgYW5kIGFuc3dlcnMgcmVsYXRlZCB0byBtYW55IGNvbW1vbiB0YXNrcywgYW5kIG9mdGVuIHByb3ZpZGVzIHN1Z2dlc3Rpb25zIGZvciBnb29kIENQQU4gbW9kdWxlcyB0byB1c2UuCgpwZXJsbW9kIGRlc2NyaWJlcyBQZXJsIG1vZHVsZXMgaW4gZ2VuZXJhbC4gcGVybG1vZGxpYiBsaXN0cyB0aGUgbW9kdWxlcyB3aGljaCBjYW1lIHdpdGggeW91ciBQZXJsIGluc3RhbGxhdGlvbi4KCklmIHlvdSBmZWVsIHRoZSB1cmdlIHRvIHdyaXRlIFBlcmwgbW9kdWxlcywgcGVybG5ld21vZCB3aWxsIGdpdmUgeW91IGdvb2QgYWR2aWNlLgonIHggMjAwCiAgICApLCAgICAjIGNyZWF0ZSBhIHJlYWxseSBiaWcgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgMjAwIHRpbWVzCgogICAgQ29udGVudFR5cGUgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAogICAgSGlzdG9yeVR5cGUgICAgPT4gJ093bmVyVXBkYXRlJywKICAgIEhpc3RvcnlDb21tZW50ID0+ICdTb21lIGZyZWUgdGV4dCEnLAogICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgIE5vQWdlbnROb3RpZnkgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIHlvdSBkb24ndCB3YW50IHRvIHNlbmQgYWdlbnQgbm90aWZpY2F0aW9ucwopOwoKJFNlbGYtPlRydWUoCiAgICAkQXJ0aWNsZUlELAogICAgJ0FydGljbGVDcmVhdGUoKScsCik7CgokU2VsZi0+SXMoCiAgICAkVGlja2V0T2JqZWN0LT5BcnRpY2xlQ291bnQoIFRpY2tldElEID0+ICRUaWNrZXRJRCApLAogICAgMSwKICAgICdBcnRpY2xlQ291bnQnLAopOwoKbXkgJUFydGljbGUgPSAkVGlja2V0T2JqZWN0LT5BcnRpY2xlR2V0KCBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCApOwokU2VsZi0+SXMoCiAgICAkQXJ0aWNsZXtUaXRsZX0sCiAgICAnU29tZSBUaWNrZXRfVGl0bGUnLAogICAgJ0FydGljbGVHZXQoKScsCik7CiRTZWxmLT5UcnVlKAogICAgJEFydGljbGV7RnJvbX0gZXEKICAgICAgICAnU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgJ0FydGljbGVHZXQoKScsCik7Cgpmb3IgbXkgJEtleSAocXcoIEJvZHkgU3ViamVjdCBGcm9tIFRvIFJlcGx5VG8gKSkgewogICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5BcnRpY2xlVXBkYXRlKAogICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgIEtleSAgICAgICA9PiAkS2V5LAogICAgICAgIFZhbHVlICAgICA9PiAiTmV3ICRLZXkiLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgJ0FydGljbGVVcGRhdGUoKScsCiAgICApOwogICAgbXkgJUFydGljbGUyID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUdldCggQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQgKTsKICAgICRTZWxmLT5JcygKICAgICAgICAkQXJ0aWNsZTJ7JEtleX0sCiAgICAgICAgIk5ldyAkS2V5IiwKICAgICAgICAnQXJ0aWNsZVVwZGF0ZSgpJywKICAgICk7CgogICAgIyBzZXQgb2xkIHZhbHVlCiAgICAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVVcGRhdGUoCiAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICAgICAgS2V5ICAgICAgID0+ICRLZXksCiAgICAgICAgVmFsdWUgICAgID0+ICRBcnRpY2xleyRLZXl9LAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICApOwp9CgpteSAkVGlja2V0U2VhcmNoVGlja2V0TnVtYmVyID0gc3Vic3RyICRUaWNrZXR7VGlja2V0TnVtYmVyfSwgMCwgMTA7Cm15ICVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciA9PiBbICRUaWNrZXRTZWFyY2hUaWNrZXROdW1iZXIgLiAnJScsICclbm90IGV4aXNpdGluZyUnIF0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXROdW1iZXIgYXMgSEFTSFJFRiknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyID0+ICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlciknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICA9PiAxMDAsCiAgICBUaWNrZXRJRCAgID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldElEKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgID0+IDEwMCwKICAgIFRpY2tldElEICAgPT4gWyAkVGlja2V0SUQsIDQyIF0sCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRJRCBhcyBBUlJBWVJFRiknLAopOwoKbXkgJENvdW50ID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdDT1VOVCcsCiAgICBUaWNrZXROdW1iZXIgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPklzKAogICAgJENvdW50LAogICAgMSwKICAgICdUaWNrZXRTZWFyY2goKSAoQ09VTlQ6VGlja2V0TnVtYmVyKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgPT4gWyAkVGlja2V0e1RpY2tldE51bWJlcn0sICcxMjM0JyBdLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TnVtYmVyW0FSUkFZXSknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICA9PiAxMDAsCiAgICBUaXRsZSAgICAgID0+ICRUaWNrZXR7VGl0bGV9LAogICAgVXNlcklEICAgICA9PiAxLAogICAgUGVybWlzc2lvbiA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaXRsZSknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICA9PiAxMDAsCiAgICBUaXRsZSAgICAgID0+IFsgJFRpY2tldHtUaXRsZX0sICdTb21lVGl0bGVBQkMnIF0sCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpdGxlW0FSUkFZXSknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICA9PiAxMDAsCiAgICBDdXN0b21lcklEID0+ICRUaWNrZXR7Q3VzdG9tZXJJRH0sCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkN1c3RvbWVySUQpJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgPT4gMTAwLAogICAgQ3VzdG9tZXJJRCA9PiBbICRUaWNrZXR7Q3VzdG9tZXJJRH0sICdMVUxVJyBdLAogICAgVXNlcklEICAgICA9PiAxLAogICAgUGVybWlzc2lvbiA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDdXN0b21lcklEW0FSUkFZXSknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICA9PiAxMDAsCiAgICBDdXN0b21lcklEID0+IFsnTFVMVSddLAogICAgVXNlcklEICAgICA9PiAxLAogICAgUGVybWlzc2lvbiA9PiAncncnLAopOwokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkN1c3RvbWVySURbQVJSQVldKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgPT4gMTAwLAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRpY2tldHtDdXN0b21lclVzZXJ9LAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkN1c3RvbWVyVXNlciknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgID0+IDEwMCwKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+IFsgJFRpY2tldHtDdXN0b21lclVzZXJJRH0sICcxMjM0JyBdLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkN1c3RvbWVyVXNlcltBUlJBWV0pJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgICAgICA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICBUaXRsZSAgICAgICAgICAgICA9PiAkVGlja2V0e1RpdGxlfSwKICAgIEN1c3RvbWVySUQgICAgICAgID0+ICRUaWNrZXR7Q3VzdG9tZXJJRH0sCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXROdW1iZXIsVGl0bGUsQ3VzdG9tZXJJRCxDdXN0b21lclVzZXJJRCknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciAgICAgID0+IFsgJFRpY2tldHtUaWNrZXROdW1iZXJ9LCAnQUJDJyBdLAogICAgVGl0bGUgICAgICAgICAgICAgPT4gWyAkVGlja2V0e1RpdGxlfSwgJzEyMycgXSwKICAgIEN1c3RvbWVySUQgICAgICAgID0+IFsgJFRpY2tldHtDdXN0b21lcklEfSwgJzEyMTM0MjEnIF0sCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiBbICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9LCAnaWFkYXNkJyBdLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlcixUaXRsZSxDdXN0b21lcklELEN1c3RvbWVyVXNlcltBUlJBWV0pJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciA9PiBbICRUaWNrZXR7VGlja2V0TnVtYmVyfSwgJ0FCQycgXSwKICAgIFN0YXRlVHlwZSAgICA9PiAnQ2xvc2VkJywKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlcixTdGF0ZVR5cGU6Q2xvc2VkKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgPT4gWyAkVGlja2V0e1RpY2tldE51bWJlcn0sICdBQkMnIF0sCiAgICBTdGF0ZVR5cGUgICAgPT4gJ09wZW4nLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlcixTdGF0ZVR5cGU6T3BlbiknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBCb2R5ICAgICAgICAgICAgICAgID0+ICd3cml0ZSBwZXJsIG1vZHVsZXMnLAogICAgQ29uZGl0aW9uSW5saW5lICAgICA9PiAxLAogICAgQ29udGVudFNlYXJjaFByZWZpeCA9PiAnKicsCiAgICBDb250ZW50U2VhcmNoU3VmZml4ID0+ICcqJywKICAgIFN0YXRlVHlwZSAgICAgICAgICAgPT4gJ0Nsb3NlZCcsCiAgICBVc2VySUQgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkJvZHksU3RhdGVUeXBlOkNsb3NlZCknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBCb2R5ICAgICAgICAgICAgICAgID0+ICd3cml0ZSBwZXJsIG1vZHVsZXMnLAogICAgQ29uZGl0aW9uSW5saW5lICAgICA9PiAxLAogICAgQ29udGVudFNlYXJjaFByZWZpeCA9PiAnKicsCiAgICBDb250ZW50U2VhcmNoU3VmZml4ID0+ICcqJywKICAgIFN0YXRlVHlwZSAgICAgICAgICAgPT4gJ09wZW4nLAogICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICEkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Qm9keSxTdGF0ZVR5cGU6T3BlbiknLAopOwoKJFRpY2tldE9iamVjdC0+TW92ZVRpY2tldCgKICAgIFF1ZXVlICAgICAgICAgICAgICA9PiAnSnVuaycsCiAgICBUaWNrZXRJRCAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgU2VuZE5vTm90aWZpY2F0aW9uID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRUaWNrZXRPYmplY3QtPk1vdmVUaWNrZXQoCiAgICBRdWV1ZSAgICAgICAgICAgICAgPT4gJ1JhdycsCiAgICBUaWNrZXRJRCAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgU2VuZE5vTm90aWZpY2F0aW9uID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCm15ICVIRCA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlUaWNrZXRHZXQoCiAgICBTdG9wWWVhciAgPT4gNDAwMCwKICAgIFN0b3BNb250aCA9PiAxLAogICAgU3RvcERheSAgID0+IDEsCiAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgRm9yY2UgICAgID0+IDEsCik7Cm15ICRRdWV1ZUxvb2t1cElEID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxvb2t1cCggUXVldWUgPT4gJEhEe1F1ZXVlfSApOwokU2VsZi0+SXMoCiAgICAkUXVldWVMb29rdXBJRCwKICAgICRIRHtRdWV1ZUlEfSwKICAgICdIaXN0b3J5VGlja2V0R2V0KCkgQ2hlY2sgaGlzdG9yeSBxdWV1ZScsCik7CgpteSAkVGlja2V0TW92ZSA9ICRUaWNrZXRPYmplY3QtPk1vdmVUaWNrZXQoCiAgICBRdWV1ZSAgICAgICAgICAgICAgPT4gJ0p1bmsnLAogICAgVGlja2V0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgIFNlbmROb05vdGlmaWNhdGlvbiA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldE1vdmUsCiAgICAnTW92ZVRpY2tldCgpJywKKTsKCm15ICRUaWNrZXRTdGF0ZSA9ICRUaWNrZXRPYmplY3QtPlN0YXRlU2V0KAogICAgU3RhdGUgICAgPT4gJ29wZW4nLAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0U3RhdGUsCiAgICAnU3RhdGVTZXQoKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgPT4gWyAkVGlja2V0e1RpY2tldE51bWJlcn0sICdBQkMnIF0sCiAgICBTdGF0ZVR5cGUgICAgPT4gJ09wZW4nLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TnVtYmVyLFN0YXRlVHlwZTpPcGVuKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgPT4gWyAkVGlja2V0e1RpY2tldE51bWJlcn0sICdBQkMnIF0sCiAgICBTdGF0ZVR5cGUgICAgPT4gJ0Nsb3NlZCcsCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICA9PiAncncnLAopOwokU2VsZi0+RmFsc2UoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TnVtYmVyLFN0YXRlVHlwZTpDbG9zZWQpJywKKTsKCmZvciBteSAkQ29uZGl0aW9uICgKICAgICcoU29tZSYmQWdlbnQpJywKICAgICdTb21lJiZBZ2VudCcsCiAgICAnKFNvbWUrQWdlbnQpJywKICAgICcgKFNvbWUrQWdlbnQpJywKICAgICcgKFNvbWUrQWdlbnQpICAnLAogICAgJ1NvbWUmJkFnZW50JywKICAgICdTb21lK0FnZW50JywKICAgICcgU29tZStBZ2VudCcsCiAgICAnU29tZStBZ2VudCAnLAogICAgJyBTb21lK0FnZW50ICcsCiAgICAnKCFTb21lV29yZFNob3VsZE5vdEZvdW5kfHwoU29tZStBZ2VudCkpJywKICAgICcoKFNvbWUrQWdlbnQpfHwoU29tZUFnZW50Tm90Rm91bmR8fEFnZW50Tm90Rm91bmQpKScsCiAgICAnIlNvbWUgQWdlbnQgU29tZSInLAogICAgJygiU29tZSBBZ2VudCBTb21lIiknLAogICAgJyEiU29tZSBTb21lIEFnZW50IicsCiAgICAnKCEiU29tZSBTb21lIEFnZW50IiknLAogICAgKQp7CiAgICAlVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAoKICAgICAgICAjIHJlc3VsdCAocmVxdWlyZWQpCiAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKCiAgICAgICAgIyByZXN1bHQgbGltaXQKICAgICAgICBMaW1pdCAgICAgICAgICAgICAgID0+IDEwMDAsCiAgICAgICAgRnJvbSAgICAgICAgICAgICAgICA9PiAkQ29uZGl0aW9uLAogICAgICAgIENvbmRpdGlvbklubGluZSAgICAgPT4gMSwKICAgICAgICBDb250ZW50U2VhcmNoUHJlZml4ID0+ICcqJywKICAgICAgICBDb250ZW50U2VhcmNoU3VmZml4ID0+ICcqJywKICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgUGVybWlzc2lvbiAgICAgICAgICA9PiAncncnLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICAgICAiVGlja2V0U2VhcmNoKCkgKEhBU0g6RnJvbSxDb25kaXRpb25JbmxpbmUsRnJvbT0nJENvbmRpdGlvbicpIiwKICAgICk7Cn0KCmZvciBteSAkQ29uZGl0aW9uICgKICAgICcoU29tZU5vdEZvdW5kV29yZCYmQWdlbnROb3RGb3VuZFdvcmQpJywKICAgICdTb21lTm90Rm91bmRXb3JkfHxBZ2VudE5vdEZvdW5kV29yZCcsCiAgICAnIFNvbWVOb3RGb3VuZFdvcmR8fEFnZW50Tm90Rm91bmRXb3JkJywKICAgICdTb21lTm90Rm91bmRXb3JkJiZBZ2VudE5vdEZvdW5kV29yZCcsCiAgICAnU29tZU5vdEZvdW5kV29yZCYmQWdlbnROb3RGb3VuZFdvcmQgICcsCiAgICAnKFNvbWVOb3RGb3VuZFdvcmQgQWdlbnROb3RGb3VuZFdvcmQpJywKICAgICdTb21lTm90Rm91bmRXb3JkJiZBZ2VudE5vdEZvdW5kV29yZCcsCiAgICAnKFNvbWVXb3JkU2hvdWxkTm90Rm91bmR8fCghU29tZSshQWdlbnQpKScsCiAgICAnKChTb21lTm90Rm91bmQmJkFnZW50KXx8KFNvbWVBZ2VudE5vdEZvdW5kfHxBZ2VudE5vdEZvdW5kKSknLAogICAgJyEiU29tZSBBZ2VudCBTb21lIicsCiAgICAnKCEiU29tZSBBZ2VudCBTb21lIiknLAogICAgJyJTb21lIFNvbWUgQWdlbnQiJywKICAgICcoIlNvbWUgU29tZSBBZ2VudCIpJywKICAgICkKewogICAgJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKCiAgICAgICAgIyByZXN1bHQgKHJlcXVpcmVkKQogICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCgogICAgICAgICMgcmVzdWx0IGxpbWl0CiAgICAgICAgTGltaXQgICAgICAgICAgICAgICA9PiAxMDAwLAogICAgICAgIEZyb20gICAgICAgICAgICAgICAgPT4gJENvbmRpdGlvbiwKICAgICAgICBDb25kaXRpb25JbmxpbmUgICAgID0+IDEsCiAgICAgICAgQ29udGVudFNlYXJjaFByZWZpeCA9PiAnKicsCiAgICAgICAgQ29udGVudFNlYXJjaFN1ZmZpeCA9PiAnKicsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFBlcm1pc3Npb24gICAgICAgICAgPT4gJ3J3JywKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAoICEkVGlja2V0SURzeyRUaWNrZXRJRH0gKSwKICAgICAgICAiVGlja2V0U2VhcmNoKCkgKEhBU0g6RnJvbSxDb25kaXRpb25JbmxpbmUsRnJvbT0nJENvbmRpdGlvbicpIiwKICAgICk7Cn0KCm15ICRUaWNrZXRQcmlvcml0eSA9ICRUaWNrZXRPYmplY3QtPlByaW9yaXR5U2V0KAogICAgUHJpb3JpdHkgPT4gJzIgbG93JywKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldFByaW9yaXR5LAogICAgJ1ByaW9yaXR5U2V0KCknLAopOwoKIyBnZXQgdGlja2V0IGRhdGEKbXkgJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBzYXZlIGN1cnJlbnQgY2hhbmdlX3RpbWUKbXkgJENoYW5nZVRpbWUgPSAkVGlja2V0RGF0YXtDaGFuZ2VkfTsKCiMgd2FpdCA1IHNlY29uZHMKJEhlbHBlci0+Rml4ZWRUaW1lQWRkU2Vjb25kcyg1KTsKCm15ICRUaWNrZXRUaXRsZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFRpdGxlVXBkYXRlKAogICAgVGl0bGUgPT4gJ1ZlcnkgbG9uZyB0aXRsZSAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OScKICAgICAgICAuICcwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5JwogICAgICAgIC4gJzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODknCiAgICAgICAgLiAnMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OScsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRUaXRsZSwKICAgICdUaWNrZXRUaXRsZVVwZGF0ZSgpJywKKTsKCiMgZ2V0IHVwZGF0ZWQgdGlja2V0IGRhdGEKJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBjb21wYXJlIGN1cnJlbnQgY2hhbmdlX3RpbWUgd2l0aCBvbGQgb25lCiRTZWxmLT5Jc05vdCgKICAgICRDaGFuZ2VUaW1lLAogICAgJFRpY2tldERhdGF7Q2hhbmdlZH0sCiAgICAnQ2hhbmdlX3RpbWUgdXBkYXRlZCBpbiBUaWNrZXRUaXRsZVVwZGF0ZSgpJywKKTsKCiMgY2hlY2sgaWYgd2UgaGF2ZSBhIFRpY2tldCBUaXRsZSBVcGRhdGUgaGlzdG9yeSByZWNvcmQKbXkgQEhpc3RvcnlMaW5lcyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwpteSAkSGlzdG9yeUl0ZW0gPSBwb3AgQEhpc3RvcnlMaW5lczsKJFNlbGYtPklzKAogICAgJEhpc3RvcnlJdGVtLT57SGlzdG9yeVR5cGV9LAogICAgJ1RpdGxlVXBkYXRlJywKICAgICJUaWNrZXRUaXRsZVVwZGF0ZSAtIGZvdW5kIEhpc3RvcnlJdGVtIiwKKTsKCiRTZWxmLT5JcygKICAgICRIaXN0b3J5SXRlbS0+e05hbWV9LAogICAgJyUlU29tZSBUaWNrZXRfVGl0bGUlJVZlcnkgbG9uZyB0aXRsZSAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzLi4uJywKICAgICJUaWNrZXRUaXRsZVVwZGF0ZSAtIEZvdW5kIG5ldyB0aXRsZSIsCik7CgojIGdldCB1cGRhdGVkIHRpY2tldCBkYXRhCiVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgc2F2ZSBjdXJyZW50IGNoYW5nZV90aW1lCiRDaGFuZ2VUaW1lID0gJFRpY2tldERhdGF7Q2hhbmdlZH07CgojIHdhaXQgNSBzZWNvbmRzCiRIZWxwZXItPkZpeGVkVGltZUFkZFNlY29uZHMoNSk7CgojIHNldCB1bmxvY2sgdGltZW91dApteSAkVW5sb2NrVGltZW91dCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFVubG9ja1RpbWVvdXRVcGRhdGUoCiAgICBVbmxvY2tUaW1lb3V0ID0+ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCkgKyAxMDAwMCwKICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVW5sb2NrVGltZW91dCwKICAgICdUaWNrZXRVbmxvY2tUaW1lb3V0VXBkYXRlKCknLAopOwoKIyBnZXQgdXBkYXRlZCB0aWNrZXQgZGF0YQolVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIGNvbXBhcmUgY3VycmVudCBjaGFuZ2VfdGltZSB3aXRoIG9sZCBvbmUKJFNlbGYtPklzTm90KAogICAgJENoYW5nZVRpbWUsCiAgICAkVGlja2V0RGF0YXtDaGFuZ2VkfSwKICAgICdDaGFuZ2VfdGltZSB1cGRhdGVkIGluIFRpY2tldFVubG9ja1RpbWVvdXRVcGRhdGUoKScsCik7CgojIHNhdmUgY3VycmVudCBjaGFuZ2VfdGltZQokQ2hhbmdlVGltZSA9ICRUaWNrZXREYXRhe0NoYW5nZWR9OwoKIyBzYXZlIGN1cnJlbnQgcXVldWUKbXkgJEN1cnJlbnRRdWV1ZUlEID0gJFRpY2tldERhdGF7UXVldWVJRH07CgojIHdhaXQgNSBzZWNvbmRzCiRIZWxwZXItPkZpeGVkVGltZUFkZFNlY29uZHMoNSk7CgpteSAkTmV3UXVldWUgPSAkQ3VycmVudFF1ZXVlSUQgIT0gMSA/IDEgOiAyOwoKIyBzZXQgcXVldWUKbXkgJFRpY2tldFF1ZXVlU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UXVldWVTZXQoCiAgICBRdWV1ZUlEICA9PiAkTmV3UXVldWUsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0UXVldWVTZXQsCiAgICAnVGlja2V0UXVldWVTZXQoKScsCik7CgojIGdldCB1cGRhdGVkIHRpY2tldCBkYXRhCiVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgY29tcGFyZSBjdXJyZW50IGNoYW5nZV90aW1lIHdpdGggb2xkIG9uZQokU2VsZi0+SXNOb3QoCiAgICAkQ2hhbmdlVGltZSwKICAgICRUaWNrZXREYXRhe0NoYW5nZWR9LAogICAgJ0NoYW5nZV90aW1lIHVwZGF0ZWQgaW4gVGlja2V0UXVldWVTZXQoKScsCik7CgojIHJlc3RvcmUgcXVldWUKJFRpY2tldFF1ZXVlU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UXVldWVTZXQoCiAgICBRdWV1ZUlEICA9PiAkQ3VycmVudFF1ZXVlSUQsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBzYXZlIGN1cnJlbnQgY2hhbmdlX3RpbWUKJENoYW5nZVRpbWUgPSAkVGlja2V0RGF0YXtDaGFuZ2VkfTsKCiMgc2F2ZSBjdXJyZW50IHR5cGUKbXkgJEN1cnJlbnRUaWNrZXRUeXBlID0gJFRpY2tldERhdGF7VHlwZUlEfTsKCiMgd2FpdCA1IHNlY29uZHMKJEhlbHBlci0+Rml4ZWRUaW1lQWRkU2Vjb25kcyg1KTsKCiMgY3JlYXRlIGEgdGVzdCB0eXBlCm15ICRUeXBlSUQgPSAkVHlwZU9iamVjdC0+VHlwZUFkZCgKICAgIE5hbWUgICAgPT4gJ1R5cGUnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2V0IHR5cGUKbXkgJFRpY2tldFR5cGVTZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRUeXBlU2V0KAogICAgVHlwZUlEICAgPT4gJFR5cGVJRCwKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRUeXBlU2V0LAogICAgJ1RpY2tldFR5cGVTZXQoKScsCik7CgojIGdldCB1cGRhdGVkIHRpY2tldCBkYXRhCiVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgY29tcGFyZSBjdXJyZW50IGNoYW5nZV90aW1lIHdpdGggb2xkIG9uZQokU2VsZi0+SXNOb3QoCiAgICAkQ2hhbmdlVGltZSwKICAgICRUaWNrZXREYXRhe0NoYW5nZWR9LAogICAgJ0NoYW5nZV90aW1lIHVwZGF0ZWQgaW4gVGlja2V0VHlwZVNldCgpJywKKTsKCiMgcmVzdG9yZSB0eXBlCiRUaWNrZXRUeXBlU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0VHlwZVNldCgKICAgIFR5cGVJRCAgID0+ICRDdXJyZW50VGlja2V0VHlwZSwKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIHNldCBhcyBpbnZhbGlkIHRoZSB0ZXN0IHR5cGUKJFR5cGVPYmplY3QtPlR5cGVVcGRhdGUoCiAgICBJRCAgICAgID0+ICRUeXBlSUQsCiAgICBOYW1lICAgID0+ICdUeXBlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBWYWxpZElEID0+IDIsCiAgICBVc2VySUQgID0+IDEsCik7CgojIGNyZWF0ZSBhIHRlc3Qgc2VydmljZQpteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICdTZXJ2aWNlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBWYWxpZElEID0+IDEsCiAgICBDb21tZW50ID0+ICdVbml0IFRlc3QgQ29tbWVudCcsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgVXNlcklEICA9PiAxLAopOwoKIyB3YWl0IDEgc2Vjb25kcwokSGVscGVyLT5GaXhlZFRpbWVBZGRTZWNvbmRzKDEpOwoKIyBzZXQgdHlwZQpteSAkVGlja2V0U2VydmljZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlcnZpY2VTZXQoCiAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldFNlcnZpY2VTZXQsCiAgICAnVGlja2V0U2VydmljZVNldCgpJywKKTsKCiMgZ2V0IHVwZGF0ZWQgdGlja2V0IGRhdGEKJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBjb21wYXJlIGN1cnJlbnQgY2hhbmdlX3RpbWUgd2l0aCBvbGQgb25lCiRTZWxmLT5Jc05vdCgKICAgICRDaGFuZ2VUaW1lLAogICAgJFRpY2tldERhdGF7Q2hhbmdlZH0sCiAgICAnQ2hhbmdlX3RpbWUgdXBkYXRlZCBpbiBUaWNrZXRTZXJ2aWNlU2V0KCknLAopOwoKIyBzZXQgYXMgaW52YWxpZCB0aGUgdGVzdCBzZXJ2aWNlCiRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICBOYW1lICAgICAgPT4gJ1NlcnZpY2UnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgIFZhbGlkSUQgICA9PiAyLAogICAgVXNlcklEICAgID0+IDEsCik7CgojIHNhdmUgY3VycmVudCBjaGFuZ2VfdGltZQokQ2hhbmdlVGltZSA9ICRUaWNrZXREYXRhe0NoYW5nZWR9OwoKIyB3YWl0IDUgc2Vjb25kcwokSGVscGVyLT5GaXhlZFRpbWVBZGRTZWNvbmRzKDUpOwoKbXkgJFRpY2tldEVzY2FsYXRpb25JbmRleEJ1aWxkID0gJFRpY2tldE9iamVjdC0+VGlja2V0RXNjYWxhdGlvbkluZGV4QnVpbGQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0RXNjYWxhdGlvbkluZGV4QnVpbGQsCiAgICAnVGlja2V0RXNjYWxhdGlvbkluZGV4QnVpbGQoKScsCik7CgojIGdldCB1cGRhdGVkIHRpY2tldCBkYXRhCiVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgY29tcGFyZSBjdXJyZW50IGNoYW5nZV90aW1lIHdpdGggb2xkIG9uZQokU2VsZi0+SXNOb3QoCiAgICAkQ2hhbmdlVGltZSwKICAgICRUaWNrZXREYXRhe0NoYW5nZWR9LAogICAgJ0NoYW5nZV90aW1lIHVwZGF0ZWQgaW4gVGlja2V0RXNjYWxhdGlvbkluZGV4QnVpbGQoKScsCik7CgojIHNhdmUgY3VycmVudCBjaGFuZ2VfdGltZQokQ2hhbmdlVGltZSA9ICRUaWNrZXREYXRhe0NoYW5nZWR9OwoKIyBjcmVhdGUgYSB0ZXN0IFNMQQpteSAkU0xBSUQgPSAkU0xBT2JqZWN0LT5TTEFBZGQoCiAgICBOYW1lICAgID0+ICdTTEEnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIENvbW1lbnQgPT4gJ1VuaXQgVGVzdCBDb21tZW50JywKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICBVc2VySUQgID0+IDEsCik7CgojIHdhaXQgNSBzZWNvbmRzCiRIZWxwZXItPkZpeGVkVGltZUFkZFNlY29uZHMoNSk7CgojIHNldCBTTEEKbXkgJFRpY2tldFNMQVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNMQVNldCgKICAgIFNMQUlEICAgID0+ICRTTEFJRCwKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRTTEFTZXQsCiAgICAnVGlja2V0U0xBU2V0KCknLAopOwoKIyBnZXQgdXBkYXRlZCB0aWNrZXQgZGF0YQolVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIGNvbXBhcmUgY3VycmVudCBjaGFuZ2VfdGltZSB3aXRoIG9sZCBvbmUKJFNlbGYtPklzTm90KAogICAgJENoYW5nZVRpbWUsCiAgICAkVGlja2V0RGF0YXtDaGFuZ2VkfSwKICAgICdDaGFuZ2VfdGltZSB1cGRhdGVkIGluIFRpY2tldFNMQVNldCgpJywKKTsKCiMgc2V0IGFzIGludmFsaWQgdGhlIHRlc3QgU0xBCiRTTEFPYmplY3QtPlNMQVVwZGF0ZSgKICAgIFNMQUlEICAgPT4gJFNMQUlELAogICAgTmFtZSAgICA9PiAnU0xBJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBWYWxpZElEID0+IDEsCiAgICBDb21tZW50ID0+ICdVbml0IFRlc3QgQ29tbWVudCcsCiAgICBVc2VySUQgID0+IDEsCik7CgpteSAkVGlja2V0TG9jayA9ICRUaWNrZXRPYmplY3QtPkxvY2tTZXQoCiAgICBMb2NrICAgICAgICAgICAgICAgPT4gJ2xvY2snLAogICAgVGlja2V0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgIFNlbmROb05vdGlmaWNhdGlvbiA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldExvY2ssCiAgICAnTG9ja1NldCgpJywKKTsKCiMgVGVzdCBDcmVhdGVkVXNlcklEcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgPT4gMTAwLAogICAgQ3JlYXRlZFVzZXJJRHMgPT4gWyAxLCA0NTUsIDMyIF0sCiAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Q3JlYXRlZFVzZXJJRHNbQXJyYXldKScsCik7CgojIFRlc3QgQ3JlYXRlZFByaW9yaXRpZXMKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgID0+IDEwMCwKICAgIENyZWF0ZWRQcmlvcml0aWVzID0+IFsgJzIgbG93JywgJzMgbm9ybWFsJyBdLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkNyZWF0ZWRQcmlvcml0aWVzW0FycmF5XSknLAopOwoKIyBUZXN0IENyZWF0ZWRQcmlvcml0eUlEcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICA9PiAxMDAsCiAgICBDcmVhdGVkUHJpb3JpdHlJRHMgPT4gWyAyLCAzIF0sCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDcmVhdGVkUHJpb3JpdHlJRHNbQXJyYXldKScsCik7CgojIFRlc3QgQ3JlYXRlZFN0YXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgID0+IDEwMCwKICAgIENyZWF0ZWRTdGF0ZXMgPT4gWydjbG9zZWQgc3VjY2Vzc2Z1bCddLAogICAgVXNlcklEICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDcmVhdGVkU3RhdGVzW0FycmF5XSknLAopOwoKIyBUZXN0IENyZWF0ZWRTdGF0ZUlEcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICA9PiAxMDAsCiAgICBDcmVhdGVkU3RhdGVJRHMgPT4gWzJdLAogICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Q3JlYXRlZFN0YXRlSURzW0FycmF5XSknLAopOwoKIyBUZXN0IENyZWF0ZWRRdWV1ZXMKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICA9PiAxMDAsCiAgICBDcmVhdGVkUXVldWVzID0+IFsnUmF3J10sCiAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkNyZWF0ZWRRdWV1ZXNbQXJyYXldKScsCik7CgojIFRlc3QgQ3JlYXRlZFF1ZXVlSURzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgID0+IDEwMCwKICAgIENyZWF0ZWRRdWV1ZUlEcyA9PiBbIDIsIDMgXSwKICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkNyZWF0ZWRRdWV1ZUlEc1tBcnJheV0pJywKKTsKCiMgVGVzdCBUaWNrZXRDcmVhdGVUaW1lTmV3ZXJNaW51dGVzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0Q3JlYXRlVGltZU5ld2VyTWludXRlcyA9PiA2MCwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0Q3JlYXRlVGltZU5ld2VyTWludXRlcyA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldExhc3RDaGFuZ2VUaW1lTmV3ZXJNaW51dGVzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyTWludXRlcyA9PiA2MCwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyTWludXRlcyA9PiA2MCknLAopOwoKIyBUZXN0IEFydGljbGVDcmVhdGVUaW1lTmV3ZXJNaW51dGVzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBBcnRpY2xlQ3JlYXRlVGltZU5ld2VyTWludXRlcyA9PiA2MCwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpBcnRpY2xlQ3JlYXRlVGltZU5ld2VyTWludXRlcyA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldENyZWF0ZU9sZGVyTWludXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldENyZWF0ZVRpbWVPbGRlck1pbnV0ZXMgPT4gNjAsCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRDcmVhdGVUaW1lT2xkZXJNaW51dGVzID0+IDYwKScsCik7CgojIFRlc3QgVGlja2V0TGFzdENoYW5nZU9sZGVyTWludXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TGFzdENoYW5nZVRpbWVPbGRlck1pbnV0ZXMgPT4gNjAsCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldExhc3RDaGFuZ2VUaW1lT2xkZXJNaW51dGVzID0+IDYwKScsCik7CgojIFRlc3QgQXJ0aWNsZUNyZWF0ZU9sZGVyTWludXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQXJ0aWNsZUNyZWF0ZVRpbWVPbGRlck1pbnV0ZXMgPT4gNjAsCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkFydGljbGVDcmVhdGVUaW1lT2xkZXJNaW51dGVzID0+IDYwKScsCik7CgojIFRlc3QgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZQpteSAkU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7CiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSAtICggNjAgKiA2MCApLAogICAgKSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldExhc3RDaGFuZ2VUaW1lTmV3ZXJEYXRlCiRTeXN0ZW1UaW1lID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKTsKJVRpY2tldElEcyAgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSAtICggNjAgKiA2MCApLAogICAgKSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TGFzdENoYW5nZVRpbWVOZXdlckRhdGUgPT4gNjApJywKKTsKCiMgVGVzdCBBcnRpY2xlQ3JlYXRlVGltZU5ld2VyRGF0ZQokU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7CiVUaWNrZXRJRHMgID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgLSAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkFydGljbGVDcmVhdGVUaW1lTmV3ZXJEYXRlID0+IDYwKScsCik7CgojIFRlc3QgVGlja2V0TGFzdENoYW5nZU9sZGVyRGF0ZQolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TGFzdENoYW5nZVRpbWVPbGRlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgLSAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRMYXN0Q2hhbmdlVGltZU9sZGVyRGF0ZSA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldENyZWF0ZU9sZGVyRGF0ZQolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldENyZWF0ZVRpbWVPbGRlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgLSAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRDcmVhdGVUaW1lT2xkZXJEYXRlID0+IDYwKScsCik7CgojIFRlc3QgQXJ0aWNsZUNyZWF0ZU9sZGVyRGF0ZQolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQXJ0aWNsZUNyZWF0ZVRpbWVPbGRlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgLSAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpBcnRpY2xlQ3JlYXRlVGltZU9sZGVyRGF0ZSA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldENsb3NlVGltZU5ld2VyRGF0ZQolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgLSAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldENsb3NlVGltZU5ld2VyRGF0ZSA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldENsb3NlT2xkZXJEYXRlCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldENsb3NlVGltZU9sZGVyRGF0ZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSAtICggNjAgKiA2MCApLAogICAgKSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldENsb3NlVGltZU9sZGVyRGF0ZSA9PiA2MCknLAopOwoKbXkgJVRpY2tldDIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoIFRpY2tldElEID0+ICRUaWNrZXRJRCApOwokU2VsZi0+SXMoCiAgICAkVGlja2V0MntUaXRsZX0sCiAgICAnVmVyeSBsb25nIHRpdGxlIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5JwogICAgICAgIC4gJzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODknCiAgICAgICAgLiAnMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OScKICAgICAgICAuICcwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5JywKICAgICdUaWNrZXRHZXQoKSAoVGl0bGUpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldDJ7UXVldWV9LAogICAgJ0p1bmsnLAogICAgJ1RpY2tldEdldCgpIChRdWV1ZSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0MntQcmlvcml0eX0sCiAgICAnMiBsb3cnLAogICAgJ1RpY2tldEdldCgpIChQcmlvcml0eSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0MntTdGF0ZX0sCiAgICAnb3BlbicsCiAgICAnVGlja2V0R2V0KCkgKFN0YXRlKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXQye0xvY2t9LAogICAgJ2xvY2snLAogICAgJ1RpY2tldEdldCgpIChMb2NrKScsCik7CgolQXJ0aWNsZSA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVHZXQoIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlEICk7CiRTZWxmLT5JcygKICAgICRBcnRpY2xle1RpdGxlfSwKICAgICdWZXJ5IGxvbmcgdGl0bGUgMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODknCiAgICAgICAgLiAnMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OScKICAgICAgICAuICcwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5JwogICAgICAgIC4gJzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODknLAogICAgJ0FydGljbGVHZXQoKSAoVGl0bGUpJywKKTsKJFNlbGYtPklzKAogICAgJEFydGljbGV7UXVldWV9LAogICAgJ0p1bmsnLAogICAgJ0FydGljbGVHZXQoKSAoUXVldWUpJywKKTsKJFNlbGYtPklzKAogICAgJEFydGljbGV7UHJpb3JpdHl9LAogICAgJzIgbG93JywKICAgICdBcnRpY2xlR2V0KCkgKFByaW9yaXR5KScsCik7CiRTZWxmLT5JcygKICAgICRBcnRpY2xle1N0YXRlfSwKICAgICdvcGVuJywKICAgICdBcnRpY2xlR2V0KCkgKFN0YXRlKScsCik7CiRTZWxmLT5JcygKICAgICRBcnRpY2xle093bmVyfSwKICAgICdyb290QGxvY2FsaG9zdCcsCiAgICAnQXJ0aWNsZUdldCgpIChPd25lciknLAopOwokU2VsZi0+SXMoCiAgICAkQXJ0aWNsZXtSZXNwb25zaWJsZX0sCiAgICAncm9vdEBsb2NhbGhvc3QnLAogICAgJ0FydGljbGVHZXQoKSAoUmVzcG9uc2libGUpJywKKTsKJFNlbGYtPklzKAogICAgJEFydGljbGV7TG9ja30sCiAgICAnbG9jaycsCiAgICAnQXJ0aWNsZUdldCgpIChMb2NrKScsCik7CgpteSBATW92ZVF1ZXVlTGlzdCA9ICRUaWNrZXRPYmplY3QtPk1vdmVRdWV1ZUxpc3QoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBUeXBlICAgICA9PiAnTmFtZScsCik7CgokU2VsZi0+SXMoCiAgICAkTW92ZVF1ZXVlTGlzdFswXSwKICAgICdSYXcnLAogICAgJ01vdmVRdWV1ZUxpc3QoKSAoUmF3KScsCik7CiRTZWxmLT5JcygKICAgICRNb3ZlUXVldWVMaXN0WyQjTW92ZVF1ZXVlTGlzdF0sCiAgICAnSnVuaycsCiAgICAnTW92ZVF1ZXVlTGlzdCgpIChKdW5rKScsCik7CgpteSAkVGlja2V0QWNjb3VudFRpbWUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2NvdW50VGltZSgKICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgIFRpbWVVbml0ICA9PiAnNC41JywKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0QWNjb3VudFRpbWUsCiAgICAnVGlja2V0QWNjb3VudFRpbWUoKSAxJywKKTsKCm15ICRUaWNrZXRBY2NvdW50VGltZTIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2NvdW50VGltZSgKICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgIFRpbWVVbml0ICA9PiAnNDEyMy41MycsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldEFjY291bnRUaW1lMiwKICAgICdUaWNrZXRBY2NvdW50VGltZSgpIDInLAopOwoKbXkgJFRpY2tldEFjY291bnRUaW1lMyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjY291bnRUaW1lKAogICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgVGltZVVuaXQgID0+ICc0LDUzJywKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0QWNjb3VudFRpbWUzLAogICAgJ1RpY2tldEFjY291bnRUaW1lKCkgMycsCik7CgpteSAkQWNjb3VudGVkVGltZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjY291bnRlZFRpbWVHZXQoIFRpY2tldElEID0+ICRUaWNrZXRJRCApOwoKJFNlbGYtPklzKAogICAgJEFjY291bnRlZFRpbWUsCiAgICA0MTMyLjU2LAogICAgJ1RpY2tldEFjY291bnRlZFRpbWVHZXQoKScsCik7CgpteSAkQWNjb3VudGVkVGltZTIgPSAkVGlja2V0T2JqZWN0LT5BcnRpY2xlQWNjb3VudGVkVGltZUdldCgKICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAopOwoKJFNlbGYtPklzKAogICAgJEFjY291bnRlZFRpbWUyLAogICAgNDEzMi41NiwKICAgICdBcnRpY2xlQWNjb3VudGVkVGltZUdldCgpJywKKTsKCm15ICggJFNlYywgJE1pbiwgJEhvdXIsICREYXksICRNb250aCwgJFllYXIgKSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICBTeXN0ZW1UaW1lID0+ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCksCik7CgpteSAoICRTdG9wU2VjLCAkU3RvcE1pbiwgJFN0b3BIb3VyLCAkU3RvcERheSwgJFN0b3BNb250aCwgJFN0b3BZZWFyICkgPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJEYXRlKAogICAgU3lzdGVtVGltZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpIC0gNjAgKiA2MCAqIDI0LAopOwoKbXkgJVRpY2tldFN0YXR1cyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoCiAgICBTdG9wWWVhciAgID0+ICRZZWFyLAogICAgU3RvcE1vbnRoICA9PiAkTW9udGgsCiAgICBTdG9wRGF5ICAgID0+ICREYXksCiAgICBTdGFydFllYXIgID0+ICRTdG9wWWVhciwKICAgIFN0YXJ0TW9udGggPT4gJFN0b3BNb250aCwKICAgIFN0YXJ0RGF5ICAgPT4gJFN0b3BEYXksCik7CgppZiAoICRUaWNrZXRTdGF0dXN7JFRpY2tldElEfSApIHsKICAgIG15ICVUaWNrZXRIaXN0b3J5ID0gJXsgJFRpY2tldFN0YXR1c3skVGlja2V0SUR9IH07CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFRpY2tldEhpc3Rvcnl7VGlja2V0TnVtYmVyfSwKICAgICAgICAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgIkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKSAoVGlja2V0TnVtYmVyKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e1RpY2tldElEfSwKICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgIkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKSAoVGlja2V0SUQpIiwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFRpY2tldEhpc3Rvcnl7Q3JlYXRlVXNlcklEfSwKICAgICAgICAxLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKENyZWF0ZVVzZXJJRCkiLAogICAgKTsKICAgICRTZWxmLT5JcygKICAgICAgICAkVGlja2V0SGlzdG9yeXtRdWV1ZX0sCiAgICAgICAgJ0p1bmsnLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKFF1ZXVlKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e0NyZWF0ZVF1ZXVlfSwKICAgICAgICAnUmF3JywKICAgICAgICAiSGlzdG9yeVRpY2tldFN0YXR1c0dldCgpIChDcmVhdGVRdWV1ZSkiLAogICAgKTsKICAgICRTZWxmLT5JcygKICAgICAgICAkVGlja2V0SGlzdG9yeXtTdGF0ZX0sCiAgICAgICAgJ29wZW4nLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKFN0YXRlKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e0NyZWF0ZVN0YXRlfSwKICAgICAgICAnY2xvc2VkIHN1Y2Nlc3NmdWwnLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKENyZWF0ZVN0YXRlKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e1ByaW9yaXR5fSwKICAgICAgICAnMiBsb3cnLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKFByaW9yaXR5KSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e0NyZWF0ZVByaW9yaXR5fSwKICAgICAgICAnMyBub3JtYWwnLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKENyZWF0ZVByaW9yaXR5KSIsCiAgICApOwoKfQplbHNlIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDAsCiAgICAgICAgJ0hpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKScsCiAgICApOwp9CgpteSAkRGVsZXRlID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkRGVsZXRlLAogICAgJ1RpY2tldERlbGV0ZSgpJywKKTsKCm15ICREZWxldGVDaGVjayA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkRGVsZXRlQ2hlY2ssCiAgICAnVGlja2V0RGVsZXRlKCkgd29ya2VkJywKKTsKCm15ICRDdXN0b21lck5vID0gJ0N1c3RvbWVyTm8nIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiMgdGlja2V0IHNlYXJjaCBzb3J0L29yZGVyIHRlc3QKbXkgJFRpY2tldElEU29ydE9yZGVyMSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnU29tZSBUaWNrZXRfVGl0bGUgLSB0aWNrZXQgc29ydC9vcmRlciBieSB0ZXN0cycsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVyTm8gICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3Rycy5jb20nLAogICAgT3duZXJJRCAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCm15ICVUaWNrZXRDcmVhdGVkID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElEU29ydE9yZGVyMSwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIHdhaXQgNSBzZWNvbmRzCiRIZWxwZXItPkZpeGVkVGltZUFkZFNlY29uZHMoMik7CgpteSAkVGlja2V0SURTb3J0T3JkZXIyID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldF9UaXRsZSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IHRlc3RzMicsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVyTm8gICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3Rycy5jb20nLAogICAgT3duZXJJRCAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCiMgd2FpdCA1IHNlY29uZHMKJEhlbHBlci0+Rml4ZWRUaW1lQWRkU2Vjb25kcygyKTsKCm15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3RhdGVTZXQoCiAgICBTdGF0ZSAgICA9PiAnb3BlbicsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SURTb3J0T3JkZXIxLAogICAgVXNlcklEICAgPT4gMSwKKTsKCm15ICVUaWNrZXRVcGRhdGVkID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElEU29ydE9yZGVyMSwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXNOb3QoCiAgICAkVGlja2V0Q3JlYXRlZHtDaGFuZ2VkfSwKICAgICRUaWNrZXRVcGRhdGVke0NoYW5nZWR9LAogICAgJ1RpY2tldFVwZGF0ZWQgZm9yIHNvcnQgLSBjaGFuZ2UgdGltZSB3YXMgdXBkYXRlZCcKICAgICAgICAuICIgJFRpY2tldENyZWF0ZWR7Q2hhbmdlZH0gbmUgJFRpY2tldFVwZGF0ZWR7Q2hhbmdlZH0iLAopOwoKIyBmaW5kIG5ld2VzdCB0aWNrZXQgYnkgcHJpb3JpdHksIGFnZQpteSBAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnRG93bicsICdVcCcgXSwKICAgIFNvcnRCeSAgICAgICA9PiBbICdQcmlvcml0eScsICdBZ2UnIF0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIExpbWl0ICAgICAgICA9PiAxLAopOwoKJFNlbGYtPklzKAogICAgJFRpY2tldElEc1NvcnRPcmRlclswXSwKICAgICRUaWNrZXRJRFNvcnRPcmRlcjEsCiAgICAnVGlja2V0VGlja2V0U2VhcmNoKCkgLSB0aWNrZXQgc29ydC9vcmRlciBieSAoUHJpb3JpdHkgKERvd24pLCBBZ2UgKFVwKSknLAopOwoKIyBmaW5kIG9sZGVzdCB0aWNrZXQgYnkgcHJpb3JpdHksIGFnZQpAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnRG93bicsICdEb3duJyBdLAogICAgU29ydEJ5ICAgICAgID0+IFsgJ1ByaW9yaXR5JywgJ0FnZScgXSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXIyLAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKFByaW9yaXR5IChEb3duKSwgQWdlIChEb3duKSknLAopOwoKIyBmaW5kIGxhc3QgbW9kaWZpZWQgdGlja2V0IGJ5IGNoYW5nZWQgdGltZQpAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnRG93bicsIF0sCiAgICBTb3J0QnkgICAgICAgPT4gWydDaGFuZ2VkJ10sCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIExpbWl0ICAgICAgICA9PiAxLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0SURzU29ydE9yZGVyWzBdLAogICAgJFRpY2tldElEU29ydE9yZGVyMSwKICAgICdUaWNrZXRUaWNrZXRTZWFyY2goKSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IChDaGFuZ2VkIChEb3duKSknCiAgICAgICAgLiAiJFRpY2tldElEc1NvcnRPcmRlclswXSBpbnN0ZWFkIG9mICRUaWNrZXRJRFNvcnRPcmRlcjEiLAopOwoKIyBmaW5kIG9sZGVzdCBtb2RpZmllZCBieSBjaGFuZ2VkIHRpbWUKQFRpY2tldElEc1NvcnRPcmRlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnQVJSQVknLAogICAgVGl0bGUgICAgICAgID0+ICclc29ydC9vcmRlciBieSB0ZXN0JScsCiAgICBRdWV1ZXMgICAgICAgPT4gWydSYXcnXSwKICAgIEN1c3RvbWVySUQgICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3Rycy5jb20nLAogICAgT3JkZXJCeSAgICAgID0+IFsgJ1VwJywgXSwKICAgIFNvcnRCeSAgICAgICA9PiBbICdDaGFuZ2VkJywgXSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXIyLAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKENoYW5nZWQgKFVwKSkpJwogICAgICAgIC4gIiRUaWNrZXRJRHNTb3J0T3JkZXJbMF0gIGluc3RlYWQgb2YgJFRpY2tldElEU29ydE9yZGVyMiIsCik7CgpteSAkVGlja2V0SURTb3J0T3JkZXIzID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldF9UaXRsZSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IHRlc3RzMicsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzQgaGlnaCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lck5vICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90cnMuY29tJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgojIHdhaXQgMiBzZWNvbmRzCiRIZWxwZXItPkZpeGVkVGltZUFkZFNlY29uZHMoMik7CgpteSAkVGlja2V0SURTb3J0T3JkZXI0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldF9UaXRsZSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IHRlc3RzMicsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzQgaGlnaCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lck5vICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90cnMuY29tJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgojIGZpbmQgb2xkZXN0IHRpY2tldCBieSBwcmlvcml0eSwgYWdlCkBUaWNrZXRJRHNTb3J0T3JkZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0FSUkFZJywKICAgIFRpdGxlICAgICAgICA9PiAnJXNvcnQvb3JkZXIgYnkgdGVzdCUnLAogICAgUXVldWVzICAgICAgID0+IFsnUmF3J10sCiAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90cnMuY29tJywKICAgIE9yZGVyQnkgICAgICA9PiBbICdEb3duJywgJ0Rvd24nIF0sCiAgICBTb3J0QnkgICAgICAgPT4gWyAnUHJpb3JpdHknLCAnQWdlJyBdLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBMaW1pdCAgICAgICAgPT4gMSwKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldElEc1NvcnRPcmRlclswXSwKICAgICRUaWNrZXRJRFNvcnRPcmRlcjQsCiAgICAnVGlja2V0VGlja2V0U2VhcmNoKCkgLSB0aWNrZXQgc29ydC9vcmRlciBieSAoUHJpb3JpdHkgKERvd24pLCBBZ2UgKERvd24pKScsCik7CgojIGZpbmQgb2xkZXN0IHRpY2tldCBieSBwcmlvcml0eSwgYWdlCkBUaWNrZXRJRHNTb3J0T3JkZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0FSUkFZJywKICAgIFRpdGxlICAgICAgICA9PiAnJXNvcnQvb3JkZXIgYnkgdGVzdCUnLAogICAgUXVldWVzICAgICAgID0+IFsnUmF3J10sCiAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90cnMuY29tJywKICAgIE9yZGVyQnkgICAgICA9PiBbICdVcCcsICdEb3duJyBdLAogICAgU29ydEJ5ICAgICAgID0+IFsgJ1ByaW9yaXR5JywgJ0FnZScgXSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXIyLAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKFByaW9yaXR5IChVcCksIEFnZSAoRG93bikpJywKKTsKCiMgZmluZCBuZXdlc3QgdGlja2V0CkBUaWNrZXRJRHNTb3J0T3JkZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0FSUkFZJywKICAgIFRpdGxlICAgICAgICA9PiAnJXNvcnQvb3JkZXIgYnkgdGVzdCUnLAogICAgUXVldWVzICAgICAgID0+IFsnUmF3J10sCiAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90cnMuY29tJywKICAgIE9yZGVyQnkgICAgICA9PiAnRG93bicsCiAgICBTb3J0QnkgICAgICAgPT4gJ0FnZScsCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIExpbWl0ICAgICAgICA9PiAxLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0SURzU29ydE9yZGVyWzBdLAogICAgJFRpY2tldElEU29ydE9yZGVyNCwKICAgICdUaWNrZXRUaWNrZXRTZWFyY2goKSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IChBZ2UgKERvd24pKScsCik7CgojIGZpbmQgb2xkZXN0IHRpY2tldApAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gJ1VwJywKICAgIFNvcnRCeSAgICAgICA9PiAnQWdlJywKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXIxLAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKEFnZSAoVXApKScsCik7CgokQ291bnQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0NPVU5UJywKICAgIFRpdGxlICAgICAgICA9PiAnJXNvcnQvb3JkZXIgYnkgdGVzdCUnLAogICAgUXVldWVzICAgICAgID0+IFsnUmF3J10sCiAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90cnMuY29tJywKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRDb3VudCwKICAgIDQsCiAgICAnVGlja2V0VGlja2V0U2VhcmNoKCkgLSB0aWNrZXQgY291bnQgZm9yIGNyZWF0ZWQgdGlja2V0cycsCik7Cgpmb3IgbXkgJFRpY2tldElERGVsZXRlICgKICAgICRUaWNrZXRJRFNvcnRPcmRlcjEsICRUaWNrZXRJRFNvcnRPcmRlcjIsICRUaWNrZXRJRFNvcnRPcmRlcjMsCiAgICAkVGlja2V0SURTb3J0T3JkZXI0CiAgICApCnsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElERGVsZXRlLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICksCiAgICAgICAgIlRpY2tldERlbGV0ZSgpIiwKICAgICk7Cn0KCiMgYXZvaWQgU3RhdGVUeXBlIGFuZCBTdGF0ZVR5cGVJRCBwcm9ibGVtcyBpbiBUaWNrZXRTZWFyY2goKQoKbXkgJVN0YXRlVHlwZUxpc3QgPSAkU3RhdGVPYmplY3QtPlN0YXRlVHlwZUxpc3QoCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgeW91IG5lZWQgYSBoYXNoIHdpdGggdGhlIHN0YXRlIGFzIGtleSBhbmQgdGhlIHJlbGF0ZWQgU3RhdGVUeXBlIGFuZCBTdGF0ZVR5cGVJRCBhcwojIHJlZmVyZW5jZQpteSAlU3RhdGVBc0tleUFuZFN0YXRlVHlwZUFzVmFsdWU7CmZvciBteSAkU3RhdGVUeXBlSUQgKCBzb3J0IGtleXMgJVN0YXRlVHlwZUxpc3QgKSB7CiAgICBteSBATGlzdCA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXRTdGF0ZXNCeVR5cGUoCiAgICAgICAgU3RhdGVUeXBlID0+IFsgJFN0YXRlVHlwZUxpc3R7JFN0YXRlVHlwZUlEfSBdLAogICAgICAgIFJlc3VsdCAgICA9PiAnTmFtZScsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhBU0h8SUR8TmFtZQogICAgKTsKICAgIGZvciBteSAkSW5kZXggKEBMaXN0KSB7CiAgICAgICAgJFN0YXRlQXNLZXlBbmRTdGF0ZVR5cGVBc1ZhbHVleyRJbmRleH0tPntOYW1lfSA9ICRTdGF0ZVR5cGVMaXN0eyRTdGF0ZVR5cGVJRH07CiAgICAgICAgJFN0YXRlQXNLZXlBbmRTdGF0ZVR5cGVBc1ZhbHVleyRJbmRleH0tPntJRH0gICA9ICRTdGF0ZVR5cGVJRDsKICAgIH0KfQoKIyB0byBiZSBzdXJlIHRoYXQgeW91IGhhdmUgYSByZXN1bHQgdGlja2V0IGNyZWF0ZSBvbmUKJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTdGF0ZVR5cGVUZXN0JywKICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGUgICAgICAgID0+ICduZXcnLAogICAgQ3VzdG9tZXJJRCAgID0+ICcxMjM0NjUnLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKbXkgJVN0YXRlTGlzdCA9ICRTdGF0ZU9iamVjdC0+U3RhdGVMaXN0KCBVc2VySUQgPT4gMSApOwoKIyBub3cgY2hlY2sgZXZlcnkgcG9zc2libGUgc3RhdGUKZm9yIG15ICRTdGF0ZSAoIHZhbHVlcyAlU3RhdGVMaXN0ICkgewogICAgJFRpY2tldE9iamVjdC0+U3RhdGVTZXQoCiAgICAgICAgU3RhdGUgICAgICAgICAgICAgID0+ICRTdGF0ZSwKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgIFNlbmROb05vdGlmaWNhdGlvbiA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICBteSBAVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgICAgIFJlc3VsdCAgICAgICA9PiAnQVJSQVknLAogICAgICAgIFRpdGxlICAgICAgICA9PiAnJVN0YXRlVHlwZVRlc3QlJywKICAgICAgICBRdWV1ZXMgICAgICAgPT4gWydSYXcnXSwKICAgICAgICBTdGF0ZVR5cGVJRHMgPT4gWyAkU3RhdGVBc0tleUFuZFN0YXRlVHlwZUFzVmFsdWV7JFN0YXRlfS0+e0lEfSBdLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBteSBAVGlja2V0SURzVHlwZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgICAgICBSZXN1bHQgICAgPT4gJ0FSUkFZJywKICAgICAgICBUaXRsZSAgICAgPT4gJyVTdGF0ZVR5cGVUZXN0JScsCiAgICAgICAgUXVldWVzICAgID0+IFsnUmF3J10sCiAgICAgICAgU3RhdGVUeXBlID0+IFsgJFN0YXRlQXNLZXlBbmRTdGF0ZVR5cGVBc1ZhbHVleyRTdGF0ZX0tPntOYW1lfSBdLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBpZiAoICRUaWNrZXRJRHNbMF0gKSB7CiAgICAgICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEc1swXSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgaWYgdGhlcmUgaXMgbm8gcmVzdWx0IHRoZSBTdGF0ZVR5cGVJRCBoYXNuJ3Qgd29ya2VkCiAgICAjIFRlc3QgaWYgdGhlcmUgaXMgYSByZXN1bHQsIGlmIEkgdXNlIFN0YXRlVHlwZUlEICRTdGF0ZUFzS2V5QW5kU3RhdGVUeXBlQXNWYWx1ZXskU3RhdGV9LT57SUR9CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVGlja2V0SURzWzBdLAogICAgICAgICJUaWNrZXRTZWFyY2goKSAtIFN0YXRlVHlwZUlEIC0gZm91bmQgdGlja2V0IiwKICAgICk7CgojIGlmIGl0IGlzIG5vdCBlcXVhbCB0aGVuIHRoZXJlIGlzIGluIHRoZSB1c2luZyBvZiBTdGF0ZVR5cGUgb3IgU3RhdGVUeXBlSUQgYW4gZXJyb3IKIyBjaGVjayBpZiB5b3UgZ2V0IHRoZSBzYW1lIHJlc3VsdCBpZiB5b3UgdXNlIHRoZSBTdGF0ZVR5cGUgYXR0cmlidXRlIG9yIHRoZSBTdGF0ZVR5cGVJRHMgYXR0cmlidXRlLgojIFN0YXRlKCRTdGF0ZSkgU3RhdGVUeXBlKCRTdGF0ZUFzS2V5QW5kU3RhdGVUeXBlQXNWYWx1ZXskU3RhdGV9LT57TmFtZX0pIGFuZCBTdGF0ZVR5cGVJRHMoJFN0YXRlQXNLZXlBbmRTdGF0ZVR5cGVBc1ZhbHVleyRTdGF0ZX0tPntJRH0pCiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIEBUaWNrZXRJRHMsCiAgICAgICAgc2NhbGFyIEBUaWNrZXRJRHNUeXBlLAogICAgICAgICJUaWNrZXRTZWFyY2goKSAtIFN0YXRlVHlwZSIsCiAgICApOwp9CgpteSAlVGlja2V0UGVuZGluZyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXMoCiAgICAkVGlja2V0UGVuZGluZ3tVbnRpbFRpbWV9LAogICAgJzAnLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBub3Qgc2V0IiwKKTsKCm15ICREaWZmICAgICAgICAgICAgICAgPSA2MDsKbXkgJEN1cnJlbnRTeXN0ZW1UaW1lICA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7Cm15ICRQZW5kaW5nVGltZVNldERpZmYgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZW5kaW5nVGltZVNldCgKICAgIERpZmYgICAgID0+ICREaWZmLAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0RGlmZiwKICAgICJUaWNrZXRQZW5kaW5nVGltZVNldCgpIC0gUGVuZGluZyBUaW1lIC0gc2V0IGRpZmYiLAopOwoKJVRpY2tldFBlbmRpbmcgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFNlbGYtPklzKAogICAgJFRpY2tldFBlbmRpbmd7UmVhbFRpbGxUaW1lTm90VXNlZH0sCiAgICAkQ3VycmVudFN5c3RlbVRpbWUgKyAkRGlmZiAqIDYwLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBkaWZmIHRpbWUgY2hlY2siLAopOwoKbXkgJFBlbmRpbmdUaW1lU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVuZGluZ1RpbWVTZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAogICAgWWVhciAgICAgPT4gJzIwMDMnLAogICAgTW9udGggICAgPT4gJzA4JywKICAgIERheSAgICAgID0+ICcxNCcsCiAgICBIb3VyICAgICA9PiAnMjInLAogICAgTWludXRlICAgPT4gJzA1JywKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0LAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBzZXQiLAopOwoKJVRpY2tldFBlbmRpbmcgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKbXkgJFBlbmRpbmdVbnRpbFRpbWUgPSAkVGltZU9iamVjdC0+RGF0ZTJTeXN0ZW1UaW1lKAogICAgWWVhciAgID0+ICcyMDAzJywKICAgIE1vbnRoICA9PiAnMDgnLAogICAgRGF5ICAgID0+ICcxNCcsCiAgICBIb3VyICAgPT4gJzIyJywKICAgIE1pbnV0ZSA9PiAnMDUnLAogICAgU2Vjb25kID0+ICcwMCcsCik7CgokUGVuZGluZ1VudGlsVGltZSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCkgLSAkUGVuZGluZ1VudGlsVGltZTsKCiRTZWxmLT5JcygKICAgICRUaWNrZXRQZW5kaW5ne1VudGlsVGltZX0sCiAgICAnLScgLiAkUGVuZGluZ1VudGlsVGltZSwKICAgICJUaWNrZXRQZW5kaW5nVGltZVNldCgpIC0gUGVuZGluZyBUaW1lIC0gcmVhZCBiYWNrIiwKKTsKCiRQZW5kaW5nVGltZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlbmRpbmdUaW1lU2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKICAgIFllYXIgICAgID0+ICcwJywKICAgIE1vbnRoICAgID0+ICcwJywKICAgIERheSAgICAgID0+ICcwJywKICAgIEhvdXIgICAgID0+ICcwJywKICAgIE1pbnV0ZSAgID0+ICcwJywKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0LAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSByZXNldCIsCik7CgolVGlja2V0UGVuZGluZyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXMoCiAgICAkVGlja2V0UGVuZGluZ3tVbnRpbFRpbWV9LAogICAgJzAnLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBub3Qgc2V0IiwKKTsKCiRQZW5kaW5nVGltZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlbmRpbmdUaW1lU2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKICAgIFN0cmluZyAgID0+ICcyMDAzLTA5LTE0IDIyOjA1OjAwJywKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0LAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBzZXQgc3RyaW5nIiwKKTsKCiVUaWNrZXRQZW5kaW5nID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRQZW5kaW5nVW50aWxUaW1lID0gJFRpbWVPYmplY3QtPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgU3RyaW5nID0+ICcyMDAzLTA5LTE0IDIyOjA1OjAwJywKKTsKCiRQZW5kaW5nVW50aWxUaW1lID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSAtICRQZW5kaW5nVW50aWxUaW1lOwoKJFNlbGYtPklzKAogICAgJFRpY2tldFBlbmRpbmd7VW50aWxUaW1lfSwKICAgICctJyAuICRQZW5kaW5nVW50aWxUaW1lLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSByZWFkIGJhY2siLAopOwoKJFBlbmRpbmdUaW1lU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVuZGluZ1RpbWVTZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAogICAgU3RyaW5nICAgPT4gJzAwMDAtMDAtMDAgMDA6MDA6MDAnLAopOwoKJFNlbGYtPlRydWUoCiAgICAkUGVuZGluZ1RpbWVTZXQsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFBlbmRpbmcgVGltZSAtIHJlc2V0IHN0cmluZyIsCik7CgolVGlja2V0UGVuZGluZyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXMoCiAgICAkVGlja2V0UGVuZGluZ3tVbnRpbFRpbWV9LAogICAgJzAnLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBub3Qgc2V0IiwKKTsKCiRQZW5kaW5nVGltZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlbmRpbmdUaW1lU2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKICAgIFN0cmluZyAgID0+ICcyMDAzLTA5LTE0IDIyOjA1OjAwJywKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0LAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBzZXQgc3RyaW5nIiwKKTsKCm15ICRUaWNrZXRTdGF0ZVVwZGF0ZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN0YXRlU2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKICAgIFN0YXRlICAgID0+ICdwZW5kaW5nIHJlbWluZGVyJywKKTsKCiVUaWNrZXRQZW5kaW5nID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldFBlbmRpbmd7VW50aWxUaW1lfSwKICAgICJUaWNrZXRQZW5kaW5nVGltZVNldCgpIC0gU2V0IHRvIHBlbmRpbmcgLSB0aW1lIHNob3VsZCBzdGlsbCBiZSB0aGVyZSIsCik7CgokVGlja2V0U3RhdGVVcGRhdGUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdGF0ZVNldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCiAgICBTdGF0ZSAgICA9PiAnbmV3JywKKTsKCiVUaWNrZXRQZW5kaW5nID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5JcygKICAgICRUaWNrZXRQZW5kaW5ne1VudGlsVGltZX0sCiAgICAnMCcsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFNldCB0byBuZXcgLSBQZW5kaW5nIFRpbWUgbm90IHNldCIsCik7CgojIGNoZWNrIHRoYXQgc2VhcmNoZXMgd2l0aCBOZXdlckRhdGUgaW4gdGhlIGZ1dHVyZSBhcmUgbm90IGV4ZWN1dGVkCiRIZWxwZXItPkZpeGVkVGltZUFkZFNlY29uZHMoIC02MCAqIDYwICk7CgojIFRlc3QgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSAoZnV0dXJlIGRhdGUpCiRTeXN0ZW1UaW1lID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKTsKJVRpY2tldElEcyAgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSArICggNjAgKiA2MCApLAogICAgKSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgPT4gLTYwKScsCik7CgojIFRlc3QgQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUgKGZ1dHVyZSBkYXRlKQokU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7CiVUaWNrZXRJRHMgID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgKyAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpBcnRpY2xlQ3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAtNjApJywKKTsKCiMgVGVzdCBUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgKGZ1dHVyZSBkYXRlKQolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgKyAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgPT4gLTYwKScsCik7CgojIHRoZSB0aWNrZXQgaXMgbm8gbG9uZ2VyIG5lZWRlZAokVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyB0ZXN0cyBmb3Igc2VhcmNoaW5nIFN0YXRlVHlwZXMgdGhhdCBtaWdodCBub3QgaGF2ZSBzdGF0ZXMKIyB0aGlzIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgbGlzdCByYXRoZXIgdGhlbiBhIGJpZyBTUUwgZXJyb3IKIyB0aGUgcHJvYmxlbSBpcywgd2UgY2FuJ3QgcmVhbGx5IHRlc3QgaWYgdGhlcmUgaXMgYW4gU1FMIGVycm9yIG9yIG5vdAojIHRpY2tldCBzZWFyY2ggcmV0dXJucyBhbiBlbXB0eSBsaXN0IGFueXdheQoKbXkgQE5ld1N0YXRlcyA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXRTdGF0ZXNCeVR5cGUoCiAgICBTdGF0ZVR5cGUgPT4gWyduZXcnXSwKICAgIFJlc3VsdCAgICA9PiAnSUQnLAopOwoKIyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSB2YWxpZCBzdGF0ZXMgZm9yIHN0YXRlIHR5cGUgbmV3CmZvciBteSAkTmV3U3RhdGVJRCAoQE5ld1N0YXRlcykgewogICAgbXkgJVN0YXRlID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUdldCgKICAgICAgICBJRCA9PiAkTmV3U3RhdGVJRCwKICAgICk7CiAgICAkU3RhdGVPYmplY3QtPlN0YXRlVXBkYXRlKAogICAgICAgICVTdGF0ZSwKICAgICAgICBWYWxpZElEID0+IDIsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKfQoKbXkgQFRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnTElTVCcsCiAgICBMaW1pdCAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyID0+IFsgJFRpY2tldHtUaWNrZXROdW1iZXJ9LCAnQUJDJyBdLAogICAgU3RhdGVUeXBlICAgID0+ICdOZXcnLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc1swXSwKICAgICdUaWNrZXRTZWFyY2goKSAoTElTVDpUaWNrZXROdW1iZXIsU3RhdGVUeXBlOm5ldyAobm8gdmFsaWQgc3RhdGVzIG9mIHN0YXRlIHR5cGUgbmV3KScsCik7CgojIGFjdGl2YXRlIHN0YXRlcyBhZ2Fpbgpmb3IgbXkgJE5ld1N0YXRlSUQgKEBOZXdTdGF0ZXMpIHsKICAgIG15ICVTdGF0ZSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXQoCiAgICAgICAgSUQgPT4gJE5ld1N0YXRlSUQsCiAgICApOwogICAgJFN0YXRlT2JqZWN0LT5TdGF0ZVVwZGF0ZSgKICAgICAgICAlU3RhdGUsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7Cn0KCiMgY2hlY2sgcmVzcG9uc2Ugb2YgdGlja2V0IHNlYXJjaCBmb3IgaW52YWxpZCB0aW1lc3RhbXBzCmZvciBteSAkU2VhcmNoUGFyYW0gKHF3KEFydGljbGVDcmVhdGVUaW1lIFRpY2tldENyZWF0ZVRpbWUgVGlja2V0UGVuZGluZ1RpbWUpKSB7CiAgICBmb3IgbXkgJFBhcmFtT3B0aW9uIChxdyhPbGRlckRhdGUgTmV3ZXJEYXRlKSkgewogICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgICAgICAgICAgJFNlYXJjaFBhcmFtIC4gJFBhcmFtT3B0aW9uID0+ICcyMDAwLTAyLTMxIDAwOjAwOjAwJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICBteSAkRXJyb3JNZXNzYWdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5HZXRMb2dFbnRyeSgKICAgICAgICAgICAgVHlwZSA9PiAnZXJyb3InLAogICAgICAgICAgICBXaGF0ID0+ICdNZXNzYWdlJywKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSwKICAgICAgICAgICAgIlNlYXJjaCBub3QgZXhlY3V0ZWQgZHVlIHRvIGludmFsaWQgdGltZSAnMjAwMC0wMi0zMSAwMDowMDowMCchIiwKICAgICAgICAgICAgIlRpY2tldFNlYXJjaCgpIChIYW5kbGluZyBpbnZhbGlkIHRpbWVzdGFtcCBpbiAnJFNlYXJjaFBhcmFtJFBhcmFtT3B0aW9uJykiLAogICAgICAgICk7CiAgICB9Cn0KCiMgY2xlYW51cCBpcyBkb25lIGJ5IFJlc3RvcmVEYXRhYmFzZSBidXQgd2UgbmVlZCB0byBkZWxldGUgdGhlIHRpY2tldHMgdG8gY2xlYW51cCB0aGUgZmlsZXN5c3RlbSB0b28KbXkgQERlbGV0ZVRpY2tldExpc3QgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnQVJSQVknLAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJ3VuaXR0ZXN0QG90cnMuY29tJywKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CmZvciBteSAkVGlja2V0SUQgKEBEZWxldGVUaWNrZXRMaXN0KSB7CiAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FkbWluL0FkbWluQ3VzdG9tZXJVc2VyU2VydmljZS50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBzZWxlbml1bSBvYmplY3QKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgaGVscGVyIG9iamVjdAogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIGRpc2FibGUgY2hlY2sgZW1haWwgYWRkcmVzcwogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICAgICAgVmFsdWUgPT4gMAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWydhZG1pbiddLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IEN1c3RvbWVyVXNlcgogICAgICAgIG15ICRDdXN0b21lclVzZXJOYW1lID0gIkN1c3RvbWVyVXNlciIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDdXN0b21lclVzZXJJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5DdXN0b21lclVzZXJBZGQoCiAgICAgICAgICAgIFVzZXJGaXJzdG5hbWUgID0+ICRDdXN0b21lclVzZXJOYW1lLAogICAgICAgICAgICBVc2VyTGFzdG5hbWUgICA9PiAkQ3VzdG9tZXJVc2VyTmFtZSwKICAgICAgICAgICAgVXNlckN1c3RvbWVySUQgPT4gJEN1c3RvbWVyVXNlck5hbWUsCiAgICAgICAgICAgIFVzZXJMb2dpbiAgICAgID0+ICRDdXN0b21lclVzZXJOYW1lLAogICAgICAgICAgICBVc2VyRW1haWwgICAgICA9PiAkQ3VzdG9tZXJVc2VyTmFtZSAuICdAbG9jYWxob3N0LmNvbScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklELAogICAgICAgICAgICAiQ3VzdG9tZXJVc2VyQWRkIC0gJEN1c3RvbWVyVXNlcklEIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IFNlcnZpY2UKICAgICAgICBteSAkU2VydmljZU5hbWUgPSAnU29tZVNlcnZpY2UnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkU2VydmljZUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlQWRkKAogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnU29tZSBDb21tZW50JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiU2VydmljZUFkZCAtICRTZXJ2aWNlSUQiLAogICAgICAgICk7CgogICAgICAgICMgbmF2aWdhdGUgQWRtaW5DdXN0b21lclVzZXJTZXJ2aWNlIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFkbWluQ3VzdG9tZXJVc2VyU2VydmljZSIpOwoKICAgICAgICAjIGNoZWNrIG92ZXJ2aWV3IEFkbWluQ3VzdG9tZXJVc2VyU2VydmljZQogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZpbHRlclNlcnZpY2VzIiwgICAgICdjc3MnICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ3VzdG9tZXJVc2VyU2VhcmNoIiwgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDdXN0b21lcnMiLCAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlcnZpY2UiLCAgICAgICAgICAgICdjc3MnICk7CgogICAgICAgICMgdGVzdCBzZWFyY2ggZmlsdGVyIGZvciBDdXN0b21lclVzZXIKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDdXN0b21lclVzZXJTZWFyY2giLCAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0N1c3RvbWVyVXNlclNlYXJjaCIsICdjc3MnICktPnNlbmRfa2V5cygkQ3VzdG9tZXJVc2VyTmFtZSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ3VzdG9tZXJVc2VyU2VhcmNoIiwgJ2NzcycgKS0+VmVyaWZpZWRTdWJtaXQoKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRDdXN0b21lclVzZXJOYW1lICkgPiAtMSwKICAgICAgICAgICAgIkN1c3RvbWVyVXNlciAkQ3VzdG9tZXJVc2VyTmFtZSBmb3VuZCBvbiBwYWdlIiwKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0N1c3RvbWVyVXNlclNlYXJjaCIsICdjc3MnICktPmNsZWFyKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ3VzdG9tZXJVc2VyU2VhcmNoIiwgJ2NzcycgKS0+VmVyaWZpZWRTdWJtaXQoKTsKCiAgICAgICAgIyBmaWx0ZXIgZm9yIHNlcnZpY2UuIEl0IGlzIGF1dG8gY29tcGxldGUsIHN1Ym1pdCBpcyBub3QgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRmlsdGVyU2VydmljZXMiLCAnY3NzJyApLT5zZW5kX2tleXMoJFNlcnZpY2VOYW1lKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIkU2VydmljZU5hbWUiLCAnbGlua190ZXh0JyApLT5pc19kaXNwbGF5ZWQoKSwKICAgICAgICAgICAgIiRTZXJ2aWNlTmFtZSBzZXJ2aWNlIGZvdW5kIG9uIHBhZ2UiLAogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRmlsdGVyU2VydmljZXMiLCAnY3NzJyApLT5jbGVhcigpOwoKICAgICAgICAjIGFsbG9jYXRlIHRlc3Qgc2VydmljZSB0byB0ZXN0IGN1c3RvbWVyIHVzZXIKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdDdXN0b21lclVzZXJMb2dpbj0kQ3VzdG9tZXJVc2VyTmFtZScgKV0iKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAdmFsdWU9JyRTZXJ2aWNlSUQnXSIpLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1N1Ym1pdCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIHRlc3QgY3VzdG9tZXIgdXNlciBhbGxvY2F0aW9uIHRvIHRlc3Qgc2VydmljZQogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAkU2VydmljZU5hbWUsICdsaW5rX3RleHQnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9pbnB1dFtcQHZhbHVlPVwiJEN1c3RvbWVyVXNlck5hbWVcIl0iKS0+aXNfc2VsZWN0ZWQoKSwKICAgICAgICAgICAgMSwKICAgICAgICAgICAgIlNlcnZpY2UgJFNlcnZpY2VOYW1lIGlzIGFjdGl2ZSBmb3IgQ3VzdG9tZXJVc2VyICRDdXN0b21lclVzZXJOYW1lIiwKICAgICAgICApOwoKICAgICAgICAjIHJlbW92ZSB0ZXN0IGN1c3RvbWVyIHVzZXIgYWxsb2NhdGlvbnMgZnJvbSB0ZXN0IHNlcnZpY2UKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9pbnB1dFtcQHZhbHVlPVwiJEN1c3RvbWVyVXNlck5hbWVcIl0iKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTdWJtaXQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjaGVjayBpZiB0aGVyZSBpcyBhbnkgdGVzdCBzZXJ2aWNlIGFsbG9jYXRpb24gdG93YXJkcyB0ZXN0IGN1c3RvbWVyIHVzZXIKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdDdXN0b21lclVzZXJMb2dpbj0kQ3VzdG9tZXJVc2VyTmFtZScgKV0iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAdmFsdWU9JyRTZXJ2aWNlSUQnXSIpLT5pc19zZWxlY3RlZCgpLAogICAgICAgICAgICAwLAogICAgICAgICAgICAiU2VydmljZSAkU2VydmljZU5hbWUgaXMgbm90IGFjdGl2ZSBmb3IgQ3VzdG9tZXJVc2VyICRDdXN0b21lclVzZXJOYW1lIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IGN1c3RvbWVyIHVzZXIKICAgICAgICBpZiAoJFNlcnZpY2VJRCkgewogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2VfY3VzdG9tZXJfdXNlciBXSEVSRSBzZXJ2aWNlX2lkID0gJFNlcnZpY2VJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiRGVsZXRlZCBTZXJ2aWNlQ3VzdG9tZXJVc2VyIC0gJFNlcnZpY2VOYW1lIDw9PiAkQ3VzdG9tZXJVc2VyTmFtZSIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCRTZXJ2aWNlSUQgXSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJEZWxldGVkIFNlcnZpY2UgLSAkU2VydmljZU5hbWUiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRDdXN0b21lclVzZXJJRCkgewogICAgICAgICAgICAkQ3VzdG9tZXJVc2VyTmFtZSA9ICREQk9iamVjdC0+UXVvdGUoJEN1c3RvbWVyVXNlck5hbWUpOwogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBjdXN0b21lcl91c2VyIFdIRVJFIGN1c3RvbWVyX2lkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCRDdXN0b21lclVzZXJOYW1lIF0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiRGVsZXRlZCBDdXN0b21lclVzZXIgLSAkQ3VzdG9tZXJVc2VyTmFtZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgIGZvciBteSAkQ2FjaGUgKHF3KEN1c3RvbWVyVXNlciBTZXJ2aWNlKSkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJENhY2hlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBzZWxlbml1bSBvYmplY3QKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgaGVscGVyIG9iamVjdAogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbJ2FkbWluJ10sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWRtaW5JVFNNQ0lQQWxsb2NhdGUgc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWRtaW5JVFNNQ0lQQWxsb2NhdGUiKTsKCiAgICAgICAgIyBjaGVjayBmb3IgQ3JpdGljYWxpdHkgPC0+IEltcGFjdCBmaWVsZHMKICAgICAgICBteSBAUHJpb3JpdHkgPSAocXcoMXZlcnlsb3cgMmxvdyAzbm9ybWFsIDRoaWdoIDV2ZXJ5aGlnaCkpOwogICAgICAgIGZvciBteSAkSW1wYWN0IChAUHJpb3JpdHkpIHsKICAgICAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoQFByaW9yaXR5KSB7CiAgICAgICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1ByaW9yaXR5SUQkSW1wYWN0LSRDcml0aWNhbGl0eSIsICdjc3MnICk7CiAgICAgICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAxZWQxZTFhNDE3NzhmMWY1MTkxZDJjYzJkZmU0YzJmNGNkODNjM2MzIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FnZW50U3RhdGlzdGljcy9BZGQudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdzdGF0cycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgYWRkIFNlcnZpY2UgYW5kIFNMQSB0ZXN0IGRhdGEKICAgICAgICBteSAkQ29uZmlnID0gewoKICAgICAgICAgICAgIyBzZXJ2aWNlIGRhdGEKICAgICAgICAgICAgU2VydmljZXMgPT4gWwogICAgICAgICAgICAgICAgeyBOYW1lID0+ICJUZXN0U2VydmljZSAtICIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpIH0sCiAgICAgICAgICAgICAgICB7IE5hbWUgPT4gIlRlc3RTZXJ2aWNlIC0gIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCkgfSwKICAgICAgICAgICAgXSwKCiAgICAgICAgICAgICMgU0xBIGRhdGEKICAgICAgICAgICAgU0xBcyA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAiVGVzdFNMQSAtICIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICJUZXN0U0xBIC0gIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH07CgogICAgICAgIG15ICRTdWNjZXNzID0gJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6U2VydmljZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2VydmljZSBvYmplY3QKICAgICAgICBteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CiAgICAgICAgbXkgQFNlcnZpY2VJRHM7CgogICAgICAgICMgZ2V0IFNMQSBvYmplY3QKICAgICAgICBteSAkU0xBT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwogICAgICAgIG15IEBTTEFJRHM7CgogICAgICAgIGZvciAoIDEgLi4gNSApIHsKCiAgICAgICAgICAgICMgYWRkIHRlc3QgU2VydmljZXMKICAgICAgICAgICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAiVGVzdFNlcnZpY2UgLSAiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAiU2VydmljZSAkU2VydmljZUlEIGhhcyBiZWVuIGNyZWF0ZWQuIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIHNlcnZpY2UgYXMgZGVmYXVsdCBzZXJ2aWNlIGZvciBhbGwgY3VzdG9tZXJzCiAgICAgICAgICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJzxERUZBVUxUPicsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBwdXNoIEBTZXJ2aWNlSURzLCAkU2VydmljZUlEOwoKICAgICAgICAgICAgIyBhZGQgdGVzdCBTTEFzCiAgICAgICAgICAgIG15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUFkZCgKICAgICAgICAgICAgICAgIE5hbWUgICAgPT4gIlRlc3RTTEEgLSAiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTTEFJRCwKICAgICAgICAgICAgICAgICJTTEEgJFNMQUlEIGhhcyBiZWVuIGNyZWF0ZWQuIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHB1c2ggQFNMQUlEcywgJFNMQUlEOwoKICAgICAgICB9CgogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBjaGVjayBhZGQgc3RhdGlzdGljcyBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPUFkZCIpOwoKICAgICAgICAjIGNoZWNrIGxpbmsgJ0R5bmFtaWNNYXRyaXgnCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBkYXRhLXN0YXRpc3RpYy1wcmVzZWxlY3Rpb24sIFwnRHluYW1pY01hdHJpeFwnICldIiksCiAgICAgICAgICAgICJUaGVyZSBpcyBhIGxpbmsgZm9yIGFkZGluZyAnRHluYW1pY01hdHJpeCcgc3RhdGlzdGljcyIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBsaW5rICdEeW5hbWljTGlzdCcKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGRhdGEtc3RhdGlzdGljLXByZXNlbGVjdGlvbiwgXCdEeW5hbWljTGlzdFwnICldIiksCiAgICAgICAgICAgICJUaGVyZSBpcyBhIGxpbmsgZm9yIGFkZGluZyAnRHluYW1pY0xpc3QnIHN0YXRpc3RpY3MiLAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgbGluayAnU3RhdGljJwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAZGF0YS1zdGF0aXN0aWMtcHJlc2VsZWN0aW9uLCBcJ1N0YXRpY1wnICldIiksCiAgICAgICAgICAgICJUaGVyZSBpcyBhIGxpbmsgZm9yIGFkZGluZyAnU3RhdGljJyBzdGF0aXN0aWNzIiwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrICJHbyB0byBvdmVydmlldyIgYnV0dG9uCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50U3RhdGlzdGljcztTdWJhY3Rpb249T3ZlcnZpZXdcJyApXSIpCiAgICAgICAgICAgIC0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICBteSBAVGVzdHMgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgPT4gJ1N0YXRpc3RpYyBEeW5hbWljTWF0cml4JyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgICAgICBPYmplY3QgICAgICAgICAgID0+ICdLZXJuZWw6OlN5c3RlbTo6U3RhdHM6OkR5bmFtaWM6OlRpY2tldCcsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdEeW5hbWljTWF0cml4JywKICAgICAgICAgICAgICAgIFhBeGlzICAgICAgICAgICAgPT4gJ1hBeGlzU2VydmljZUlEcycsCiAgICAgICAgICAgICAgICBZQXhpcyAgICAgICAgICAgID0+ICdZQXhpc1NMQUlEcycsCiAgICAgICAgICAgICAgICBSZXN0cmljdGlvbklEICAgID0+ICdSZXN0cmljdGlvbnNRdWV1ZUlEcycsCiAgICAgICAgICAgICAgICBSZXN0cmljdGlvbnZhbHVlID0+IDMsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgID0+ICdTdGF0aXN0aWMgRHluYW1pY01hdHJpeCcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAogICAgICAgICAgICAgICAgT2JqZWN0ICAgICAgICAgICAgPT4gJ0tlcm5lbDo6U3lzdGVtOjpTdGF0czo6RHluYW1pYzo6VGlja2V0JywKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgID0+ICdEeW5hbWljTWF0cml4JywKICAgICAgICAgICAgICAgIFhBeGlzICAgICAgICAgICAgID0+ICdYQXhpc0NyZWF0ZVRpbWUnLAogICAgICAgICAgICAgICAgWUF4aXMgICAgICAgICAgICAgPT4gJ1lBeGlzU0xBSURzJywKICAgICAgICAgICAgICAgIFJlc3RyaWN0aW9uSUQgICAgID0+ICdSZXN0cmljdGlvbnNRdWV1ZUlEcycsCiAgICAgICAgICAgICAgICBSZXN0cmljdGlvbnZhbHVlICA9PiAzLAogICAgICAgICAgICAgICAgU2VsZWN0ZWRUaW1lRmllbGQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICA9PiAnU3RhdGlzdGljIC0gVGlja2V0QWNjb3VudGVkVGltZScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAogICAgICAgICAgICAgICAgT2JqZWN0ICAgICAgICAgICA9PiAnS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpUaWNrZXRBY2NvdW50ZWRUaW1lJywKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0R5bmFtaWNMaXN0JywKICAgICAgICAgICAgICAgIFhBeGlzICAgICAgICAgICAgPT4gJ1hBeGlzU2VydmljZUlEcycsCiAgICAgICAgICAgICAgICBZQXhpcyAgICAgICAgICAgID0+ICdZQXhpc1NMQUlEcycsCiAgICAgICAgICAgICAgICBSZXN0cmljdGlvbklEICAgID0+ICdSZXN0cmljdGlvbnNLaW5kc09mUmVwb3J0aW5nJywKICAgICAgICAgICAgICAgIFJlc3RyaWN0aW9udmFsdWUgPT4gJ1RvdGFsVGltZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgPT4gJ1N0YXRpc3RpYyAtIFRpY2tldFNvbHV0aW9uUmVzcG9uc2VUaW1lJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgICAgICBPYmplY3QgICAgICAgICAgID0+ICdLZXJuZWw6OlN5c3RlbTo6U3RhdHM6OkR5bmFtaWM6OlRpY2tldFNvbHV0aW9uUmVzcG9uc2VUaW1lJywKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0R5bmFtaWNMaXN0JywKICAgICAgICAgICAgICAgIFhBeGlzICAgICAgICAgICAgPT4gJ1hBeGlzU2VydmljZUlEcycsCiAgICAgICAgICAgICAgICBZQXhpcyAgICAgICAgICAgID0+ICdZQXhpc1NMQUlEcycsCiAgICAgICAgICAgICAgICBSZXN0cmljdGlvbklEICAgID0+ICdSZXN0cmljdGlvbnNLaW5kc09mUmVwb3J0aW5nJywKICAgICAgICAgICAgICAgIFJlc3RyaWN0aW9udmFsdWUgPT4gJ1NvbHV0aW9uQXZlcmFnZUFsbE92ZXInLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgID0+ICdTdGF0aXN0aWMgLSBUaWNrZXRMaXN0JyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgICAgICBPYmplY3QgICAgICAgICAgID0+ICdLZXJuZWw6OlN5c3RlbTo6U3RhdHM6OkR5bmFtaWM6OlRpY2tldExpc3QnLAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnRHluYW1pY0xpc3QnLAogICAgICAgICAgICAgICAgWUF4aXMgICAgICAgICAgICA9PiAnWUF4aXNPcmRlckJ5JywKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gJ1RpY2tldE51bWJlcicsCiAgICAgICAgICAgICAgICBSZXN0cmljdGlvbklEICAgID0+ICdSZXN0cmljdGlvbnNTZXJ2aWNlSURzJywKICAgICAgICAgICAgICAgIFJlc3RyaWN0aW9udmFsdWUgPT4gJFNlcnZpY2VJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgQFN0YXRzRm9ybWF0RHluYW1pY01hdHJpeCA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRm9ybWF0ICAgICAgICAgPT4gJ1ByaW50JywKICAgICAgICAgICAgICAgIFByZXZpZXdDb250ZW50ID0+ICdQcmV2aWV3Q29udGVudFByaW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRm9ybWF0ICAgICAgICAgPT4gJ0QzOjpTdGFja2VkQXJlYUNoYXJ0JywKICAgICAgICAgICAgICAgIFByZXZpZXdDb250ZW50ID0+ICdQcmV2aWV3Q29udGVudEQzU3RhY2tlZEFyZWFDaGFydCcsCgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGb3JtYXQgICAgICAgICA9PiAnRDM6OkxpbmVDaGFydCcsCiAgICAgICAgICAgICAgICBQcmV2aWV3Q29udGVudCA9PiAnUHJldmlld0NvbnRlbnREM0xpbmVDaGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZvcm1hdCAgICAgICAgID0+ICdEMzo6QmFyQ2hhcnQnLAogICAgICAgICAgICAgICAgUHJldmlld0NvbnRlbnQgPT4gJ1ByZXZpZXdDb250ZW50RDNCYXJDaGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgQFN0YXRzRm9ybWF0RHluYW1pY0xpc3QgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZvcm1hdCAgICAgICAgID0+ICdQcmludCcsCiAgICAgICAgICAgICAgICBQcmV2aWV3Q29udGVudCA9PiAnUHJldmlld0NvbnRlbnRQcmludCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgbmV3IHN0YXRpc3RpY3MKICAgICAgICBmb3IgbXkgJFN0YXRzRGF0YSAoQFRlc3RzKSB7CgogICAgICAgICAgICAjIGdvIHRvIGFkZCBzdGF0aXN0aWNzIHNjcmVlbgogICAgICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPUFkZCIpOwoKICAgICAgICAgICAgIyBhZGQgbmV3IHN0YXRpc3RpY3MKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGRhdGEtc3RhdGlzdGljLXByZXNlbGVjdGlvbiwgXCckU3RhdHNEYXRhLT57VHlwZX1cJyApXSIpCiAgICAgICAgICAgICAgICAtPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIiNUaXRsZSIpLmxlbmd0aCcgKTsKCiAgICAgICAgICAgIG15ICREZXNjcmlwdGlvbiA9ICdEZXNjcmlwdGlvbiAnIC4gJFN0YXRzRGF0YS0+e1RpdGxlfTsKCiAgICAgICAgICAgICMgc2V0IHZhbHVlcyBmb3IgbmV3IHN0YXRpc3RpY3MgLSBHZW5lcmFsIFNwZWNpZmljYXRpb25zCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1RpdGxlIiwgICAgICAgJ2NzcycgKS0+c2VuZF9rZXlzKCAkU3RhdHNEYXRhLT57VGl0bGV9ICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0Rlc2NyaXB0aW9uIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAiXCQoJyNPYmplY3RNb2R1bGUnKS52YWwoJyRTdGF0c0RhdGEtPntPYmplY3R9JykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTYXZlJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAjIGNoZWNrIFgtYXhpcyBjb25maWd1cmF0aW9uIGRpYWxvZwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi5FZGl0WEF4aXMiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgICAgIGlmICggJFN0YXRzRGF0YS0+e09iamVjdH0gbmUgJ0tlcm5lbDo6U3lzdGVtOjpTdGF0czo6RHluYW1pYzo6VGlja2V0TGlzdCcgKSB7CiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgICAgICJcJCgnI0VkaXREaWFsb2cgc2VsZWN0JykudmFsKCckU3RhdHNEYXRhLT57WEF4aXN9JykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0RpYWxvZ0J1dHRvbjEiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAjIGNoZWNrIFktYXhpcyBjb25maWd1cmF0aW9uIGRpYWxvZwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi5FZGl0WUF4aXMiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAiXCQoJyNFZGl0RGlhbG9nIHNlbGVjdCcpLnZhbCgnJFN0YXRzRGF0YS0+e1lBeGlzfScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAkU3RhdHNEYXRhLT57T2JqZWN0fSBlcSAnS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpUaWNrZXRMaXN0JyApIHsKCiAgICAgICAgICAgICAgICAjIHdhaXQgZm9yIGxvYWQgc2VsZWN0ZWQgWUF4aXMKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnIyRTdGF0c0RhdGEtPntZQXhpc30nKS5sZW5ndGg7IgogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNlbGVjdCBvcmRlciBieSBvcHRpb24KICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAgICAgIlwkKCcjRWRpdERpYWxvZyAjJFN0YXRzRGF0YS0+e1lBeGlzfScpLnZhbCgnJFN0YXRzRGF0YS0+e09yZGVyQnl9JykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0RpYWxvZ0J1dHRvbjEiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAjIGNoZWNrIFJlc3RyaWN0aW9ucyBjb25maWd1cmF0aW9uIGRpYWxvZwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi5FZGl0UmVzdHJpY3Rpb25zIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgIlwkKCcjRWRpdERpYWxvZyBzZWxlY3Qgb3B0aW9uW3ZhbHVlPVwiJFN0YXRzRGF0YS0+e1Jlc3RyaWN0aW9uSUR9XCJdJykucHJvcCgnc2VsZWN0ZWQnLCB0cnVlKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgd2FpdCBmb3IgbG9hZCBzZWxlY3RlZCBSZXN0cmljdGlvbgogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnIyRTdGF0c0RhdGEtPntSZXN0cmljdGlvbklEfScpLmxlbmd0aDsiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCByZXN0cmljdGlvbgogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgIlwkKCcjRWRpdERpYWxvZyAjJFN0YXRzRGF0YS0+e1Jlc3RyaWN0aW9uSUR9IG9wdGlvblt2YWx1ZT1cIiRTdGF0c0RhdGEtPntSZXN0cmljdGlvbnZhbHVlfVwiXScpLnByb3AoJ3NlbGVjdGVkJywgdHJ1ZSkudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0RpYWxvZ0J1dHRvbjEiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAjIGNoYW5nZSBwcmV2aWV3IGZvcm1hdCB0byBQcmludAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bY29udGFpbnMoXEBkYXRhLWZvcm1hdCwgXCdQcmludCcpXSIpLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjUHJldmlld0NvbnRlbnRQcmludCcpLmNzcygnZGlzcGxheScpIikgZXEgJ2Jsb2NrJywKICAgICAgICAgICAgICAgICJQcmludCBmb3JtYXQgaXMgZGlzcGxheWVkIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15IEBTdGF0c0Zvcm1hdCA9IEBTdGF0c0Zvcm1hdER5bmFtaWNNYXRyaXg7CgogICAgICAgICAgICBpZiAoICRTdGF0c0RhdGEtPntUeXBlfSBlcSAnRHluYW1pY0xpc3QnICkgewogICAgICAgICAgICAgICAgQFN0YXRzRm9ybWF0ID0gQFN0YXRzRm9ybWF0RHluYW1pY0xpc3Q7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciBteSAkU3RhdHNGb3JtYXQgKEBTdGF0c0Zvcm1hdCkgewoKICAgICAgICAgICAgICAgICMgY2hhbmdlIHByZXZpZXcgZm9ybWF0CiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bY29udGFpbnMoXEBkYXRhLWZvcm1hdCwgXCckU3RhdHNGb3JtYXQtPntGb3JtYXR9JyldIikKICAgICAgICAgICAgICAgICAgICAtPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnIyRTdGF0c0Zvcm1hdC0+e1ByZXZpZXdDb250ZW50fScpLmNzcygnZGlzcGxheScpIikgZXEgJ2Jsb2NrJywKICAgICAgICAgICAgICAgICAgICAiU3RhY2tlZEFyZWEgZm9ybWF0IGlzIGRpc3BsYXllZCIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENoZWNrIHRoZSBvcHRpb25zIGZvciB0aGUgY2FjaGUgZmllbGQgaW4gdGhlIGdlbmVyYWwgc2VjdGlvbi4KICAgICAgICAgICAgaWYgKCAkU3RhdHNEYXRhLT57U2VsZWN0ZWRUaW1lRmllbGR9ICkgewoKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJyNDYWNoZSBvcHRpb25bdmFsdWU9XCIxXCJdJykudmFsKCkgPT0gMSAmJiBcJCgnI0NhY2hlIG9wdGlvblt2YWx1ZT1cIjFcIl0nKVswXS5pbm5lckhUTUwgPT0gJ1llcyciCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAnRm91bmQgZWxlbWVudCAiWWVzIiBpbiBDYWNoZSB0aGUgc2VsZWN0IGZpZWxkLicsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJyNDYWNoZSBvcHRpb25bdmFsdWU9XCIxXCJdJykudmFsKCkgPT0gMSIpLAogICAgICAgICAgICAgICAgICAgICdGb3VuZCBubyBlbGVtZW50ICJZZXMiIGluIHRoZSBDYWNoZSBzZWxlY3QgZmllbGQuJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2F2ZSBhbmQgZmluaXNoIHRlc3Qgc3RhdGlzdGljcwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEBuYW1lPSdTYXZlQW5kRmluaXNoJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICBteSAkQ2hlY2tDb25maXJtSlMgPSA8PCJKQVZBU0NSSVBUIjsKKGZ1bmN0aW9uICgpIHsKICAgIHdpbmRvdy5jb25maXJtID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07Cn0oKSk7CkpBVkFTQ1JJUFQKCiAgICAgICAgICAgICMgc29ydCBkZWNyZWFzaW5nIGJ5IFN0YXRzSUQKICAgICAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPU92ZXJ2aWV3O0RpcmVjdGlvbj1ERVNDO09yZGVyQnk9SUQ7U3RhcnRIaXQ9MSIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRTdGF0c09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0cycpOwoKICAgICAgICAgICAgIyBnZXQgc3RhdHMgSURzCiAgICAgICAgICAgIG15ICRTdGF0c0lEcyA9ICRTdGF0c09iamVjdC0+R2V0U3RhdHNMaXN0KAogICAgICAgICAgICAgICAgQWNjZXNzUncgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkQ291bnQgICAgICAgPSBzY2FsYXIgQHskU3RhdHNJRHN9OwogICAgICAgICAgICBteSAkU3RhdHNJRExhc3QgPSAkU3RhdHNJRHMtPlsgJENvdW50IC0gMSBdOwoKICAgICAgICAgICAgIyBjaGVjayBmb3IgY3JlYXRlZCBzdGF0cyBvbiBvdmVydmlldyBzY3JlZW4KICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFN0YXRzRGF0YS0+e1RpdGxlfSApID4gLTEsCiAgICAgICAgICAgICAgICAiVGVzdCBzdGF0aXN0aWMgaXMgY3JlYXRlZCAtICRTdGF0c0RhdGEtPntUaXRsZX0gIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgkQ2hlY2tDb25maXJtSlMpOwoKICAgICAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IHN0YXRpc3RpY3MKICAgICAgICAgICAgIyBjbGljayBvbiBkZWxldGUgaWNvbgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgKICAgICAgICAgICAgICAgICIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPURlbGV0ZUFjdGlvbjtTdGF0SUQ9JFN0YXRzSURMYXN0XCcgKV0iCiAgICAgICAgICAgICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJBY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1FZGl0O1N0YXRJRD0kU3RhdHNJRExhc3QiICkKICAgICAgICAgICAgICAgICAgICA9PSAtMSwKICAgICAgICAgICAgICAgICJTdGF0c0RhdGEgc3RhdGlzdGljIGlzIGRlbGV0ZWQgLSAkU3RhdHNEYXRhLT57VGl0bGV9ICIKICAgICAgICAgICAgKTsKCiAgICAgICAgfQoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBjbGVhbiB1cCB0ZXN0IGRhdGEKICAgICAgICBmb3IgbXkgJFNMQUlEIChAU0xBSURzKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTZXJ2aWNlU2xhIC0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2xhIFdIRVJFIGlkID0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTTEFEZWxldGUgLSAkU0xBSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKEBTZXJ2aWNlSURzKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9jdXN0b21lcl91c2VyIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTZXJ2aWNlQ3VzdG9tZXJVc2VyIGRlbGV0ZWQgLSAkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkRlbGV0ZWQgU2VydmljZSAtICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QuCiAgICAgICAgZm9yIG15ICRDYWNoZSAoCiAgICAgICAgICAgIHF3IChTZXJ2aWNlIFNMQSBTdGF0cykKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgICAgICBUeXBlID0+ICRDYWNoZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FnZW50U3RhdGlzdGljcy9JbXBvcnQudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdzdGF0cycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgIG15ICRDb25maWcgPSB7CgogICAgICAgICAgICAjIFNlcnZpY2UgZGF0YQogICAgICAgICAgICBTZXJ2aWNlcyA9PiBbCiAgICAgICAgICAgICAgICB7IE5hbWUgPT4gIlRlc3RTZXJ2aWNlIC0gIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCkgfSwKICAgICAgICAgICAgICAgIHsgTmFtZSA9PiAiVGVzdFNlcnZpY2UgLSAiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSB9LAogICAgICAgICAgICBdLAoKICAgICAgICAgICAgIyBTTEEgZGF0YQogICAgICAgICAgICBTTEFzID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICJUZXN0U0xBIC0gIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gIlRlc3RTTEEgLSAiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfTsKCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzZXJ2aWNlIG9iamVjdAogICAgICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKICAgICAgICBteSBAU2VydmljZUlEczsKCiAgICAgICAgIyBhZGQgU2VydmljZXMKICAgICAgICBteSAlU2VydmljZXNOYW1lVG9JRDsKICAgICAgICBTRVJWSUNFOgogICAgICAgIGZvciBteSAkU2VydmljZSAoIEB7ICRDb25maWctPntTZXJ2aWNlc30gfSApIHsKCiAgICAgICAgICAgIG5leHQgU0VSVklDRSBpZiAhJFNlcnZpY2U7CiAgICAgICAgICAgIG5leHQgU0VSVklDRSBpZiAhJXskU2VydmljZX07CgogICAgICAgICAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgICAgICAgICAleyRTZXJ2aWNlfSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAiU2VydmljZSAkU2VydmljZUlEIGhhcyBiZWVuIGNyZWF0ZWQuIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgc2VydmljZSBhcyBkZWZhdWx0IHNlcnZpY2UgZm9yIGFsbCBjdXN0b21lcnMKICAgICAgICAgICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnPERFRkFVTFQ+JywKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHB1c2ggQFNlcnZpY2VJRHMsICRTZXJ2aWNlSUQ7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBTTEEgb2JqZWN0CiAgICAgICAgbXkgJFNMQU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKTsKICAgICAgICBteSBAU0xBSURzOwoKICAgICAgICAjIGFkZCBTTEFzIGFuZCBjb25uZWN0IHRoZW0gd2l0aCB0aGUgU2VydmljZXMKICAgICAgICBTTEE6CiAgICAgICAgZm9yIG15ICRTTEEgKCBAeyAkQ29uZmlnLT57U0xBc30gfSApIHsKCiAgICAgICAgICAgIG5leHQgU0xBIGlmICEkU0xBOwogICAgICAgICAgICBuZXh0IFNMQSBpZiAhJXskU0xBfTsKCiAgICAgICAgICAgIG15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUFkZCgKICAgICAgICAgICAgICAgICV7JFNMQX0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU0xBSUQsCiAgICAgICAgICAgICAgICAiU0xBICRTTEFJRCBoYXMgYmVlbiBjcmVhdGVkLiIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHB1c2ggQFNMQUlEcywgJFNMQUlEOwogICAgICAgIH0KCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50U3RhdGlzdGljcztTdWJhY3Rpb249SW1wb3J0Iik7CgogICAgICAgICMgaW1wb3J0IHRlc3Qgc2VsZW5pdW0gc3RhdGlzdGljCiAgICAgICAgbXkgJExvY2F0aW9uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdIb21lJykKICAgICAgICAgICAgLiAiL3NjcmlwdHMvdGVzdC9zYW1wbGUvU3RhdHMvU3RhdHMuVGlja2V0T3ZlcnZpZXcuZGUueG1sIjsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNGaWxlIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRMb2NhdGlvbik7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdJbXBvcnQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjcmVhdGUgcGFyYW1zIGZvciBpbXBvcnQgdGVzdCBzdGF0cwogICAgICAgIG15ICVTdGF0c1ZhbHVlcyA9ICgKICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJ8OcYmVyYmxpY2sgw7xiZXIgYWxsZSBUaWNrZXRzIGltIFN5c3RlbScsCiAgICAgICAgICAgIE9iamVjdCAgICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQWt0dWVsbGVyIFN0YXR1cyBhbGxlciBpbSBTeXN0ZW0gYmVmaW5kbGljaGVyIFRpY2tldHMgb2huZSBaZWl0YmVzY2hyw6Rua3VuZy4nLAogICAgICAgICAgICBGb3JtYXQgICAgICA9PiAnRDM6OkJhckNoYXJ0JywKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGZvciBpbXBvcnRlZCB2YWx1ZXMgb24gdGVzdCBzdGF0CiAgICAgICAgZm9yIG15ICRTdGF0c1ZhbHVlICggc29ydCBrZXlzICVTdGF0c1ZhbHVlcyApIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFN0YXRzVmFsdWVzeyRTdGF0c1ZhbHVlfSApID4gLTEsCiAgICAgICAgICAgICAgICAiRXhwZXh0ZWQgcGFyYW0gJFN0YXRzVmFsdWUgZm9yIGltcG9ydGVkIHN0YXQgaXMgZm91bmRlZCAtICRTdGF0c1ZhbHVlc3skU3RhdHNWYWx1ZX0iCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50U3RhdGlzdGljcyBPdmVydmlldyBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1PdmVydmlldztEaXJlY3Rpb249REVTQztPcmRlckJ5PUlEO1N0YXJ0SGl0PTE7IgogICAgICAgICk7CgogICAgICAgIG15ICRTdGF0c09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0cycpOwoKICAgICAgICAjIGdldCBzdGF0cyBJRHMKICAgICAgICBteSAkU3RhdHNJRHMgPSAkU3RhdHNPYmplY3QtPkdldFN0YXRzTGlzdCgKICAgICAgICAgICAgQWNjZXNzUncgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSAkQ291bnQgICAgICAgPSBzY2FsYXIgQHskU3RhdHNJRHN9OwogICAgICAgIG15ICRTdGF0c0lETGFzdCA9ICRTdGF0c0lEcy0+WyAkQ291bnQgLSAxIF07CgogICAgICAgICMgY2hlY2sgZm9yIGltcG9ydGVkIHN0YXRzIG9uIG92ZXJ2aWV3IHNjcmVlbgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFN0YXRzVmFsdWVze1RpdGxlfSApID4gLTEsCiAgICAgICAgICAgICJJbXBvcnRlZCBzdGF0ICRTdGF0c1ZhbHVlc3tUaXRsZX0gLSBmb3VuZCBvbiBvdmVydmlldyBzY3JlZW4iCiAgICAgICAgKTsKCiAgICAgICAgIyBnbyB0byBpbXBvcnRlZCBzdGF0IHRvIHJ1biBpdAogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FnZW50U3RhdGlzdGljcztTdWJhY3Rpb249RWRpdDtTdGF0SUQ9JFN0YXRzSURMYXN0XCcgKV0iKQogICAgICAgICAgICAtPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjaGFuZ2UgcHJldmlldyBmb3JtYXQgdG8gUHJpbnQKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bY29udGFpbnMoXEBkYXRhLWZvcm1hdCwgXCdQcmludCcpXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJyNQcmV2aWV3Q29udGVudFByaW50JykuY3NzKCdkaXNwbGF5JykiKSBlcSAnYmxvY2snLAogICAgICAgICAgICAiUHJpbnQgZm9ybWF0IGlzIGRpc3BsYXllZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjUHJldmlld0NvbnRlbnREM0JhckNoYXJ0JykuY3NzKCdkaXNwbGF5JykiKSBlcSAnbm9uZScsCiAgICAgICAgICAgICJCYXIgZm9ybWF0IGlzIG5vdCBkaXNwbGF5ZWQiLAogICAgICAgICk7CgogICAgICAgICMgY2hhbmdlIHByZXZpZXcgZm9ybWF0IHRvIEJhcgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltjb250YWlucyhcQGRhdGEtZm9ybWF0LCBcJ0QzOjpCYXJDaGFydCcpXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJyNQcmV2aWV3Q29udGVudEQzQmFyQ2hhcnQnKS5jc3MoJ2Rpc3BsYXknKSIpIGVxICdibG9jaycsCiAgICAgICAgICAgICJCYXIgZm9ybWF0IGlzIGRpc3BsYXllZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjUHJldmlld0NvbnRlbnRQcmludCcpLmNzcygnZGlzcGxheScpIikgZXEgJ25vbmUnLAogICAgICAgICAgICAiUHJpbnQgZm9ybWF0IGlzIG5vdCBkaXNwbGF5ZWQiLAogICAgICAgICk7CgogICAgICAgICMgdG9nZ2xlIEdlbmVyYWwgU3BlY2lmaWNhdGlvbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBhcmlhLWNvbnRyb2xzLCBcJ0NvcmVfVUlfQXV0b2dlbmVyYXRlZElEXzEnKV0iKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1RpdGxlIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCIgLSBVcGRhdGVkIik7CgogICAgICAgICMgY2hlY2sgWC1heGlzIGNvbmZpZ3VyYXRpb24gZGlhbG9nCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIuRWRpdFhBeGlzIiwgICAgICAgICAgICAgICAgICAgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0VkaXREaWFsb2cgYS5SZW1vdmVCdXR0b24gaSIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNFZGl0RGlhbG9nIHNlbGVjdCcpLnZhbCgnWEF4aXNTZXJ2aWNlSURzJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEaWFsb2dCdXR0b24xIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIFktYXhpcyBjb25maWd1cmF0aW9uIGRpYWxvZwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiLkVkaXRZQXhpcyIsICAgICAgICAgICAgICAgICAgICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNFZGl0RGlhbG9nIGEuUmVtb3ZlQnV0dG9uIGkiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjRWRpdERpYWxvZyBzZWxlY3QnKS52YWwoJ1lBeGlzU0xBSURzJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEaWFsb2dCdXR0b24xIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIFJlc3RyaWN0aW9ucyBjb25maWd1cmF0aW9uIGRpYWxvZwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiLkVkaXRSZXN0cmljdGlvbnMiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjRWRpdERpYWxvZyBzZWxlY3QnKS52YWwoJ1Jlc3RyaWN0aW9uc1F1ZXVlSURzJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKCiAgICAgICAgIyB3YWl0IGZvciBsb2FkIHNlbGVjdGVkIFJlc3RyaWN0aW9uIC0gUXVldWVJRHMKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI1Jlc3RyaWN0aW9uc1F1ZXVlSURzIikubGVuZ3RoOycgKTsKCiAgICAgICAgIyBhZGQgcmVzdHJpY3Rpb24gcGVyIFF1ZXVlIC0gSnVuawogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0VkaXREaWFsb2cgI1Jlc3RyaWN0aW9uc1F1ZXVlSURzJykudmFsKCczJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEaWFsb2dCdXR0b24xIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIHNhdmUgYW5kIGZpbmlzaCBlZGl0CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAbmFtZT0nU2F2ZUFuZEZpbmlzaCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICBteSAkQ2hlY2tDb25maXJtSlMgPSA8PCJKQVZBU0NSSVBUIjsKKGZ1bmN0aW9uICgpIHsKICAgIHdpbmRvdy5jb25maXJtID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07Cn0oKSk7CkpBVkFTQ1JJUFQKCiAgICAgICAgIyBzb3J0IGRlY3JlYXNpbmcgYnkgU3RhdHNJRAogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPU92ZXJ2aWV3O0RpcmVjdGlvbj1ERVNDO09yZGVyQnk9SUQ7U3RhcnRIaXQ9MSIKICAgICAgICApOwoKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCRDaGVja0NvbmZpcm1KUyk7CgogICAgICAgICMgZGVsZXRlIGltcG9ydGVkIHRlc3Qgc3RhdHMKICAgICAgICAjIGNsaWNrIG9uIGRlbGV0ZSBpY29uCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPURlbGV0ZUFjdGlvbjtTdGF0SUQ9JFN0YXRzSURMYXN0XCcpXSIKICAgICAgICApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIkFjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPUVkaXQ7U3RhdElEPSRTdGF0c0lETGFzdCIgKSA9PSAtMSwKICAgICAgICAgICAgIlRlc3Qgc3RhdGlzdGljIGlzIGRlbGV0ZWQgLSAkU3RhdHNJRExhc3QgIgogICAgICAgICk7CgogICAgICAgICMgZ2V0IERCIG9iamVjdAogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIGNsZWFuIHVwIHRlc3QgZGF0YQogICAgICAgIGZvciBteSAkU0xBSUQgKEBTTEFJRHMpIHsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlX3NsYSBXSEVSRSBzbGFfaWQgPSAkU0xBSUQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIlNlcnZpY2VTbGEgLSAkU0xBSUQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzbGEgV0hFUkUgaWQgPSAkU0xBSUQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIlNMQURlbGV0ZSAtICRTTEFJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoQFNlcnZpY2VJRHMpIHsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIlNlcnZpY2VDdXN0b21lclVzZXIgZGVsZXRlZCAtICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gJFNlcnZpY2VJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiRGVsZXRlZCBTZXJ2aWNlIC0gJFNlcnZpY2VJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdC4KICAgICAgICBmb3IgbXkgJENhY2hlICgKICAgICAgICAgICAgcXcgKFNlcnZpY2UgU0xBIFN0YXRzKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJENhY2hlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3Qgc2VydmljZQogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICJTZXJ2aWNlIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICA9PiAnU2VsZW5pdW0gVGVzdCBTZXJ2aWNlJywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiU2VydmljZSBpcyBjcmVhdGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNlcnZpY2Ugc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNU2VydmljZSIpOwoKICAgICAgICAjIGNoZWNrIG92ZXJ2aWV3IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGNoZWNrIGZvciBsaW5rIHRvIEFnZW50SVRTTVNlcnZpY2Vab29tIHNjcmVlbgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIkFjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9JFNlcnZpY2VJRCIgKSA+IC0xLAogICAgICAgICAgICAiTGluayB0byBBZ2VudElUU01TZXJ2aWNlWm9vbSBmb3IgU2VydmljZSBJRCAkU2VydmljZUlEIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IERCIG9iamVjdAogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IHNlcnZpY2UgcHJlZmVyZW5jZXMKICAgICAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9wcmVmZXJlbmNlcyBXSEVSRSBzZXJ2aWNlX2lkID0gJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJTZXJ2aWNlIHByZWZlcmVuY2VzIGlzIGRlbGV0ZWQgLSBJRCAkU2VydmljZUlEIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IHNlcnZpY2UKICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBpcyBkZWxldGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICdTZXJ2aWNlJwogICAgICAgICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3Qgc2VydmljZQogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICJTZXJ2aWNlIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICA9PiAnU2VsZW5pdW0gVGVzdCBTZXJ2aWNlJywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiU2VydmljZSBpcyBjcmVhdGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNlcnZpY2Vab29tIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVNlcnZpY2Vab29tO1NlcnZpY2VJRD0kU2VydmljZUlEIik7CgogICAgICAgICMgY2xpY2sgb24gcHJpbnQKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNU2VydmljZVByaW50O1NlcnZpY2VJRD0kU2VydmljZUlEXCcgKV0iKQogICAgICAgICAgICAtPmNsaWNrKCk7CgogICAgICAgICMgc3dpdGNoIHRvIGFub3RoZXIgd2luZG93CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcHJpbnQgc2NyZWVuIGlzIGxvYWRlZAogICAgICAgIEFDVElWRVNMRUVQOgogICAgICAgIGZvciBteSAkU2Vjb25kICggMSAuLiAyMCApIHsKICAgICAgICAgICAgaWYgKCBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgInByaW50ZWQgYnkiICkgPiAtMSwgKSB7CiAgICAgICAgICAgICAgICBsYXN0IEFDVElWRVNMRUVQOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNsZWVwIDE7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGZvciBwcmludGVkIHZhbHVlcyBvZiB0ZXN0IHNlcnZpY2UKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICIkU2VydmljZU5hbWUiICkgPiAtMSwKICAgICAgICAgICAgIlNlcnZpY2U6ICRTZXJ2aWNlTmFtZSAtIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIk9wZXJhdGlvbmFsIiApID4gLTEsCiAgICAgICAgICAgICJDdXJyZW50IEluY2lkZW50OiBPcGVyYXRpb25hbCAtIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIjMgbm9ybWFsIiApID4gLTEsCiAgICAgICAgICAgICJDcml0aWNhbGl0eTogMyBub3JtYWwgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgREIgb2JqZWN0CiAgICAgICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgICMgY2xlYW4gdXAgc2VydmljZSBkYXRhCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2VfcHJlZmVyZW5jZXMgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBwcmVmZXJlbmNlcyBpcyBkZWxldGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBzZXJ2aWNlCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSAkU2VydmljZUlEIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlNlcnZpY2UgaXMgZGVsZXRlZCAtIElEICRTZXJ2aWNlSUQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAnU2VydmljZScKICAgICAgICApOwoKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3Qgc2VydmljZQogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICJTZXJ2aWNlIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICA9PiAnU2VsZW5pdW0gVGVzdCBTZXJ2aWNlJywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiU2VydmljZSBpcyBjcmVhdGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNlcnZpY2Vab29tIHNjcmVlbiB3aXRoIG5vIFNlcnZpY2VJRCwgZXhwZWN0aW5nIGVycm9yIG1lc3NhZ2Ugc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPSIpOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnICkgPiAtMSwKICAgICAgICAgICAgIkVycm9yIG1lc3NhZ2Ugd2l0aG91dCBzZXJ2aWNlIElEIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNU2VydmljZVpvb20gc2NyZWVuIHdpdGggd3JvbmcgU2VydmljZUlELCBleHBlY3RpbmcgZXJyb3IgbWVzc2FnZSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9YXNkIik7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAnU2VydmljZUlEIGFzZCBub3QgZm91bmQgaW4gZGF0YWJhc2UhJyApID4gLTEsCiAgICAgICAgICAgICJFcnJvciBtZXNzYWdlIHdpdGggd3Jvbmcgc2VydmljZSBJRCAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNlcnZpY2Vab29tIHNjcmVlbiB3aXRoIGNvcnJlY3QgU2VydmljZUlECiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPSRTZXJ2aWNlSUQiKTsKCiAgICAgICAgIyBjaGVjayBmb3IgQWdlbnRJVFNNU2VydmljZVpvb20gZmllbGRzCiAgICAgICAgbXkgQEVsZW1lbnRMaXN0ID0gKCAnQ29udGVudENvbHVtbicsICdTaWRlYmFyQ29sdW1uJyApOwogICAgICAgIGZvciBteSAkRWxlbWVudENoZWNrIChARWxlbWVudExpc3QpIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi4kRWxlbWVudENoZWNrIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJTZXJ2aWNlOiAkU2VydmljZU5hbWUiICkgPiAtMSwKICAgICAgICAgICAgIlNlcnZpY2U6ICRTZXJ2aWNlTmFtZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBzZXJ2aWNlIHByZWZlcmVuY2VzCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2VfcHJlZmVyZW5jZXMgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBwcmVmZXJlbmNlcyBpcyBkZWxldGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBzZXJ2aWNlCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSAkU2VydmljZUlEIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlNlcnZpY2UgaXMgZGVsZXRlZCAtIElEICRTZXJ2aWNlSUQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAnU2VydmljZScKICAgICAgICApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgU0xBCiAgICAgICAgbXkgJFNMQU5hbWUgPSAiU0xBIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNMQUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICdTZWxlbml1bSB0ZXN0IFNMQScsCiAgICAgICAgICAgIFR5cGVJRCAgPT4gMiwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTTEFJRCwKICAgICAgICAgICAgIlNMQSBpcyBjcmVhdGVkIC0gSUQgJFNMQUlEIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNU0xBIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVNMQSIpOwoKICAgICAgICAjIGNoZWNrIG92ZXJ2aWV3IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGNoZWNrIGZvciBsaW5rIHRvIEFnZW50SVRTTVNMQVpvb20gc2NyZWVuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiQWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9JFNMQUlEIiApID4gLTEsCiAgICAgICAgICAgICJMaW5rIHRvIEFnZW50SVRTTVNMQVpvb20gZm9yIFNMQSBJRCAkU0xBSUQgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBTTEEKICAgICAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzbGEgV0hFUkUgaWQgPSAkU0xBSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU0xBIGlzIGRlbGV0ZWQgLSBJRCAkU0xBSUQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAnU0xBJwogICAgICAgICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgU0xBCiAgICAgICAgbXkgJFNMQU5hbWUgPSAiU0xBIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNMQUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gJFNMQU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lID0+IDEyMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgPT4gMTgwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICA9PiA1ODAsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgID0+ICdTZWxlbml1bSB0ZXN0IFNMQScsCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNMQUlELAogICAgICAgICAgICAiU0xBIGlzIGNyZWF0ZWQgLSBJRCAkU0xBSUQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01TTEFab29tIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9JFNMQUlEIik7CgogICAgICAgICMgY2xpY2sgb24gcHJpbnQgbWVudQogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01TTEFQcmludDtTTEFJRD0kU0xBSURcJyApXSIpLT5jbGljaygpOwoKICAgICAgICAjIHN3aXRjaCB0byBhbm90aGVyIHdpbmRvdwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHByaW50IHNjcmVlbiBpcyBsb2FkZWQKICAgICAgICBBQ1RJVkVTTEVFUDoKICAgICAgICBmb3IgbXkgJFNlY29uZCAoIDEgLi4gMjAgKSB7CiAgICAgICAgICAgIGlmICggaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJwcmludGVkIGJ5IiApID4gLTEsICkgewogICAgICAgICAgICAgICAgbGFzdCBBQ1RJVkVTTEVFUDsKICAgICAgICAgICAgfQogICAgICAgICAgICBzbGVlcCAxOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBmb3IgcHJpbnRlZCB2YWx1ZXMgb2YgdGVzdCBTTEEKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICIkU0xBTmFtZSIgKSA+IC0xLAogICAgICAgICAgICAiU2VydmljZTogJFNMQU5hbWUgLSBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJDYWxlbmRhciBEZWZhdWx0IiApID4gLTEsCiAgICAgICAgICAgICJDYWxlbmRhcjogQ2FsZW5kYXIgRGVmYXVsdCAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICBteSBAUmVzcG9uZFRpbWUgPSAoIDEyMCwgMTgwLCA1ODAgKTsKICAgICAgICBmb3IgbXkgJFRpbWUgKEBSZXNwb25kVGltZSkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGltZSAuICIgbWludXRlcyIgKSA+IC0xLAogICAgICAgICAgICAgICAgIlJlc3BvbmQgJFRpbWUgbWludXRlcyAtIGZvdW5kIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIHRlc3QgU0xBCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2xhIFdIRVJFIGlkID0gJFNMQUlEIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlNMQSBpcyBkZWxldGVkIC0gSUQgJFNMQUlEIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgIFR5cGUgPT4gJ1NMQScKICAgICAgICApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgU0xBCiAgICAgICAgbXkgJFNMQU5hbWUgPSAiU0xBIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNMQUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gJFNMQU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lID0+IDEyMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgPT4gMTgwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICA9PiA1ODAsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgID0+ICdTZWxlbml1bSB0ZXN0IFNMQScsCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNMQUlELAogICAgICAgICAgICAiU0xBIGlzIGNyZWF0ZWQgLSBJRCAkU0xBSUQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01TTEFab29tIHNjcmVlbiB3aXRoIG5vIFNMQUlELCBleHBlY3RpbmcgZXJyb3IgbWVzc2FnZSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01TTEFab29tO1NMQUlEPSIpOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ05vIFNMQUlEIGlzIGdpdmVuIScgKSA+IC0xLAogICAgICAgICAgICAiRXJyb3IgbWVzc2FnZSB3aXRob3V0IFNMQSBJRCAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNMQVpvb20gc2NyZWVuIHdpdGggd3JvbmcgU0xBSUQsIGV4cGVjdGluZyBlcnJvciBtZXNzYWdlIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9YXNkIik7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAnU0xBSUQgYXNkIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnICkgPiAtMSwKICAgICAgICAgICAgIkVycm9yIG1lc3NhZ2Ugd2l0aCB3cm9uZyBTTEEgSUQgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01TTEFab29tIHNjcmVlbiB3aXRoIGNvcnJlY3QgU0xBSUQKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01TTEFab29tO1NMQUlEPSRTTEFJRCIpOwoKICAgICAgICAjIGNoZWNrIGZvciBBZ2VudElUU01TTEFab29tIGZpZWxkcwogICAgICAgIG15IEBFbGVtZW50TGlzdCA9ICggJ0NvbnRlbnRDb2x1bW4nLCAnU2lkZWJhckNvbHVtbicgKTsKICAgICAgICBmb3IgbXkgJEVsZW1lbnRDaGVjayAoQEVsZW1lbnRMaXN0KSB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIuJEVsZW1lbnRDaGVjayIsICdjc3MnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiU0xBOiAkU0xBTmFtZSIgKSA+IC0xLAogICAgICAgICAgICAiU0xBOiAkU0xBTmFtZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGZvciByZXNwb25kIHRpbWVzCiAgICAgICAgbXkgQFJlc3BvbmRUaW1lID0gKCAxMjAsIDE4MCwgNTgwICk7CiAgICAgICAgZm9yIG15ICRUaW1lIChAUmVzcG9uZFRpbWUpIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRpbWUgLiAiIG1pbnV0ZXMiICkgPiAtMSwKICAgICAgICAgICAgICAgICJSZXNwb25kICRUaW1lIG1pbnV0ZXMgLSBmb3VuZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IFNMQQogICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNsYSBXSEVSRSBpZCA9ICRTTEFJRCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJTTEEgaXMgZGVsZXRlZCAtIElEICRTTEFJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICdTTEEnCiAgICAgICAgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FnZW50VGlja2V0U2VydmljZS50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBzZWxlbml1bSBvYmplY3QKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgICAgICBteSAkSGVscGVyICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKICAgICAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAgICAgIyBkbyBub3QgY2hlY2sgZW1haWwgYWRkcmVzc2VzCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgICAgICBWYWx1ZSA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgZW5hYmxlIHRpY2tldCBzZXJ2aWNlIGZlYXR1cmUKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gMQogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzZXJ2aWNlIG9iamVjdAogICAgICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdHdvIHRlc3Qgc2VydmljZXMKICAgICAgICBteSBAU2VydmljZUlEczsKICAgICAgICBteSBAU2VydmljZU5hbWVzOwogICAgICAgIGZvciBteSAkU2VydmljZSAocXcoUGFyZW50IENoaWxkKSkgewogICAgICAgICAgICBteSAkU2VydmljZU5hbWUgPSAkU2VydmljZSAuICdTZXJ2aWNlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgICAgIG15ICRTZXJ2aWNlSUQgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWUsCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdTZWxlbml1bSBUZXN0JywKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgICJTZXJ2aWNlIElEICRTZXJ2aWNlSUQgaXMgY3JlYXRlZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQFNlcnZpY2VJRHMsICAgJFNlcnZpY2VJRDsKICAgICAgICAgICAgcHVzaCBAU2VydmljZU5hbWVzLCAkU2VydmljZU5hbWU7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBzZWNvbmQgc2VydmljZSB0byBiZSBjaGlsZCBvZiBmaXJzdCBvbmUKICAgICAgICBteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRHNbMV0sCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVzWzFdLAogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJFNlcnZpY2VJRHNbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBJRCAkU2VydmljZUlEc1sxXSBpcyBub3cgY2hpbGQgc2VydmljZSIKICAgICAgICApOwoKICAgICAgICAjIHVwZGF0ZSBwYXJlbnQgc2VydmljZSB0byBpbnZhbGlkIHN0YXR1cywgYnVnICMxMTgxNgogICAgICAgICMgdGVzdCBpZiBjaGlsZCBzZXJ2aWNlIGFyZSB2aXNpYmxlIHdoZW4gcGFyZW50IGlzIGludmFsaWQKICAgICAgICAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRHNbMF0sCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVzWzBdLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMiwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlBhcmVudCBTZXJ2aWNlIElEICRTZXJ2aWNlSURzWzBdIGlzIGludmFsaWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdGlja2V0cwogICAgICAgIG15IEBUaWNrZXRJRHM7CiAgICAgICAgZm9yIG15ICRMb2NrIChxdyhsb2NrIHVubG9jaykpIHsKICAgICAgICAgICAgbXkgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnU2VsZW5pdW0gVGVzdCBUaWNrZXQnLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgICAgIExvY2sgICAgICAgICAgPT4gJExvY2ssCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRHNbMV0sCiAgICAgICAgICAgICAgICBDdXN0b21lcklEICAgID0+ICdTZWxlbml1bUN1c3RvbWVyJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJ1NlbGVuaXVtQ3VzdG9tZXJAbG9jYWxob3N0LmNvbScsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAgICAgIlRpY2tldCBJRCAkVGlja2V0SUQgaXMgY3JlYXRlZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQFRpY2tldElEcywgJFRpY2tldElEOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50VGlja2V0U2VydmljZSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFRpY2tldFNlcnZpY2UiKTsKCiAgICAgICAgIyB2ZXJpZnkgdGhhdCB0aGVyZSBhcmUgbm8gdGlja2V0cyB3aXRoIE15IFNlcnZpY2UgZmlsdGVyCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50VGlja2V0U2VydmljZTtTZXJ2aWNlSUQ9MDtcJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ05vIHRpY2tldCBkYXRhIGZvdW5kLicgKSA+IC0xLAogICAgICAgICAgICAiTm8gdGlja2V0cyBmb3VuZCB3aXRoIE15IFNlcnZpY2UgZmlsdGVyIiwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGZvciBwYXJlbnQgdGVzdCBzZXJ2aWNlIGZpbHRlciBidXR0b24gYW5kIGNsaWNrIG9uIGl0CiAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgKICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50VGlja2V0U2VydmljZTtTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMF07XCcgKV0iCiAgICAgICAgKTsKICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICAkRWxlbWVudC0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNsaWNrIG9uIGNoaWxkIHNlcnZpY2UKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRUaWNrZXRTZXJ2aWNlO1NlcnZpY2VJRD0kU2VydmljZUlEc1sxXTtcJyApXSIpCiAgICAgICAgICAgIC0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIGRpZmZlcmVudCB2aWV3cyBmb3IgZmlsdGVycwogICAgICAgIGZvciBteSAkVmlldyAocXcoU21hbGwgTWVkaXVtIFByZXZpZXcpKSB7CgogICAgICAgICAgICAjIGdvIHRvIGRlZmF1bHQgc21hbGwgdmlldwogICAgICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0U2VydmljZTtTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07Vmlldz1TbWFsbCIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2xpY2sgb24gdmlld2VyIGNvbnRyb2xsZXIKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdGaWx0ZXI9VW5sb2NrZWQ7Vmlldz0kVmlldztTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07U29ydEJ5PUFnZTtPcmRlckJ5PVVwO1ZpZXc9U21hbGw7XCcgKV0iCiAgICAgICAgICAgICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgICAgICMgdmVyaWZ5IHRoYXQgYWxsIGV4cGVjdGVkIHRpY2tldHMgYXJlIHByZXNlbnQKICAgICAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewoKICAgICAgICAgICAgICAgIG15ICVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBsb2NrZWQgYW5kIHVubG9ja2VkIHRpY2tldHMKICAgICAgICAgICAgICAgIGlmICggJFRpY2tldERhdGF7TG9ja30gZXEgJ3VubG9jaycgKSB7CgogICAgICAgICAgICAgICAgICAgICMgY2xpY2sgb24gJ0F2YWlsYWJsZSB0aWNrZXQnIGZpbHRlcgogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07U29ydEJ5PUFnZTtPcmRlckJ5PVVwO1ZpZXc9JFZpZXc7RmlsdGVyPVVubG9ja2VkXCcgKV0iCiAgICAgICAgICAgICAgICAgICAgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciB1bmxvY2tlZCB0aWNrZXRzIHdpdGggJ0F2YWlsYWJsZSB0aWNrZXRzJyBmaWx0ZXIgb24KICAgICAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRUaWNrZXREYXRhe1RpY2tldE51bWJlcn0gKSA+IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAiVGlja2V0IGZvdW5kIG9uIHBhZ2Ugd2l0aCAnQXZhaWxhYmxlIHRpY2tldHMnIGZpbHRlciAtICRUaWNrZXREYXRhe1RpY2tldE51bWJlcn0gIiwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGNsaWNrIG9uICdBbGwgdGlja2V0JyBmaWx0ZXIKICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgKICAgICAgICAgICAgICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnU2VydmljZUlEPSRTZXJ2aWNlSURzWzFdO1NvcnRCeT1BZ2U7T3JkZXJCeT1VcDtWaWV3PSRWaWV3O0ZpbHRlcj1BbGxcJyApXSIKICAgICAgICAgICAgICAgICAgICApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgZm9yIHVubG9ja2VkIHRpY2tldHMgd2l0aCAnQWxsIHRpY2tldHMnIGZpbHRlciBvbgogICAgICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRpY2tldERhdGF7VGlja2V0TnVtYmVyfSApID4gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICJUaWNrZXQgZm91bmQgb24gcGFnZSB3aXRoICdBbGwgdGlja2V0cycgZmlsdGVyIG9uIC0gJFRpY2tldERhdGF7VGlja2V0TnVtYmVyfSAiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBjbGljayBvbiAnQWxsIHRpY2tldCcgZmlsdGVyCiAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICIvL2FbY29udGFpbnMoXEBocmVmLCBcJ1NlcnZpY2VJRD0kU2VydmljZUlEc1sxXTtTb3J0Qnk9QWdlO09yZGVyQnk9VXA7Vmlldz0kVmlldztGaWx0ZXI9QWxsXCcgKV0iCiAgICAgICAgICAgICAgICAgICAgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBsb2NrZWQgdGlja2V0cyB3aXRoICAnQWxsIHRpY2tldCcgZmlsdGVyCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGlja2V0RGF0YXtUaWNrZXROdW1iZXJ9ICkgPiAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2tlZCBUaWNrZXQgZm91bmQgb24gcGFnZSB3aXRoICdBbGwgdGlja2V0cycgZmlsdGVyIG9uIC0gJFRpY2tldERhdGF7VGlja2V0TnVtYmVyfSAiLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY2xpY2sgb24gJ0F2YWlsYWJsZSB0aWNrZXQnIGZpbHRlcgogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07U29ydEJ5PUFnZTtPcmRlckJ5PVVwO1ZpZXc9JFZpZXc7RmlsdGVyPVVubG9ja2VkXCcgKV0iCiAgICAgICAgICAgICAgICAgICAgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBsb2NrZWQgdGlja2V0cyB3aXRoICdBdmFpbGFibGUgdGlja2V0cycgZmlsdGVyIG9uCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGlja2V0RGF0YXtUaWNrZXROdW1iZXJ9ICkgPT0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICJEaWQgbm90IGZpbmQgbG9ja2VkIHRpY2tldCAtICRUaWNrZXREYXRhe1RpY2tldE51bWJlcn0gLSB3aXRoICdBdmFpbGFibGUgdGlja2V0cycgZmlsdGVyIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgdGlja2V0cwogICAgICAgIGZvciBteSAkVGlja2V0SUQgKEBUaWNrZXRJRHMpIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIlRpY2tldCBJRCAkVGlja2V0SUQgaXMgZGVsZXRlZCIKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIGNyZWF0ZWQgdGVzdCBzZXJ2aWNlCiAgICAgICAgZm9yIG15ICRTZXJ2aWNlRGVsZXRlIChAU2VydmljZUlEcykgewogICAgICAgICAgICAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlRGVsZXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTZXJ2aWNlIElEICRTZXJ2aWNlRGVsZXRlIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICBmb3IgbXkgJENhY2hlICgKICAgICAgICAgICAgcXcgKFRpY2tldCBTZXJ2aWNlKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJENhY2hlLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL091dHB1dC9QcmVmZXJlbmNlcy9BZ2VudC9DdXN0b21TZXJ2aWNlLnQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZW5hYmxlIHRoZSBzZXJ2aWNlcwogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OlNlcnZpY2UnLAogICAgICAgICAgICBWYWx1ZSA9PiAnMScsCiAgICAgICAgKTsKCiAgICAgICAgIyBkb24ndCBrZWVwIGNoaWxkcmVuIHNlcnZpY2VzCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6U2VydmljZTo6S2VlcENoaWxkcmVuJywKICAgICAgICAgICAgVmFsdWUgPT4gJzAnLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0ZXN0IHVzZXIgSUQKICAgICAgICBteSAkVGVzdFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzZXJ2aWNlIG9iamVjdAogICAgICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdHdvIHRlc3Qgc2VydmljZXMKICAgICAgICBteSBAU2VydmljZUlEczsKICAgICAgICBteSBAU2VydmljZU5hbWVzOwogICAgICAgIGZvciBteSAkU2VydmljZSAocXcoUGFyZW50IENoaWxkKSkgewogICAgICAgICAgICBteSAkU2VydmljZU5hbWUgPSAkU2VydmljZSAuICdTZXJ2aWNlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgICAgIG15ICRTZXJ2aWNlSUQgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWUsCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDIsICAgICAgICAgICAgICAgICAjIGludmFsaWQKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gJ1NlbGVuaXVtIFRlc3QnLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAgICAgIlNlcnZpY2UgSUQgJFNlcnZpY2VJRCBpcyBjcmVhdGVkIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBAU2VydmljZUlEcywgICAkU2VydmljZUlEOwogICAgICAgICAgICBwdXNoIEBTZXJ2aWNlTmFtZXMsICRTZXJ2aWNlTmFtZTsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHNlY29uZCBzZXJ2aWNlIHRvIGJlIGNoaWxkIG9mIGZpcnN0IG9uZSBhbmQgZW5hYmxlIGl0CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSURzWzFdLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lc1sxXSwKICAgICAgICAgICAgUGFyZW50SUQgID0+ICRTZXJ2aWNlSURzWzBdLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlNlcnZpY2UgSUQgJFNlcnZpY2VJRHNbMV0gaXMgbm93IGNoaWxkIHNlcnZpY2UiCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIGdvIHRvIGFnZW50IHByZWZlcmVuY2VzCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRQcmVmZXJlbmNlcyIpOwoKICAgICAgICAjIHZlcmlmeSBjaGlsZCBzZXJ2aWNlIGlzIG5vdCBzaG93bgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJyNTZXJ2aWNlSUQgb3B0aW9uW3ZhbHVlPVwiJFNlcnZpY2VJRHNbMV1cIl0nKS5sZW5ndGg7IgogICAgICAgICAgICApLAogICAgICAgICAgICAwLAogICAgICAgICAgICAnQ2hpbGQgc2VydmljZSBpcyBub3Qgc2hvd24nLAogICAgICAgICk7CgogICAgICAgICMgdHVybiBvbiBrZWVwIGNoaWxkcmVuIHNldHRpbmcKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlOjpLZWVwQ2hpbGRyZW4nLAogICAgICAgICAgICBWYWx1ZSA9PiAnMScsCiAgICAgICAgKTsKCiAgICAgICAgIyByZWZyZXNoIHRoZSBwYWdlCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRQcmVmZXJlbmNlcyIpOwoKICAgICAgICAjIHZlcmlmeSBjaGlsZCBzZXJ2aWNlIGlzIHNob3duIChidWcjMTE4MTYpCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgInJldHVybiBcJCgnI1NlcnZpY2VJRCBvcHRpb25bdmFsdWU9XCIkU2VydmljZUlEc1sxXVwiXScpLmxlbmd0aDsiCiAgICAgICAgICAgICksCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICdDaGlsZCBzZXJ2aWNlIGlzIHNob3duJywKICAgICAgICApOwoKICAgICAgICAjIGFkZCBjaGlsZCBzZXJ2aWNlIHRvICdNeSBTZXJ2aWNlcycgcHJlZmVyZW5jZQogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI1NlcnZpY2VJRCcpLnZhbCgnJFNlcnZpY2VJRHNbMV0nKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlcnZpY2VJRFVwZGF0ZSIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjaGVjayBmb3IgdXBkYXRlIHByZWZlcmVuY2UgbWVzc2FnZSBvbiBzY3JlZW4KICAgICAgICBteSAkVXBkYXRlTWVzc2FnZSA9ICJQcmVmZXJlbmNlcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseSEiOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFVwZGF0ZU1lc3NhZ2UgKSA+IC0xLAogICAgICAgICAgICAnQWdlbnQgcHJlZmVyZW5jZSBjdXN0b20gc2VydmljZSAtIHVwZGF0ZWQnCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgREIgb2JqZWN0CiAgICAgICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgICMgZGVsZXRlIHBlcnNvbmFsIHNlcnZpY2VzIGNvbm5lY3Rpb24KICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gcGVyc29uYWxfc2VydmljZXMgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSURzWzFdIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkRlbGV0ZSBwZXJzb25hbCBzZXJ2aWNlIGNvbm5lY3Rpb24iLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIGNyZWF0ZWQgdGVzdCBzZXJ2aWNlcwogICAgICAgIGZvciBteSAkSW5kZXggKCAwIC4uIDEgKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSURzWyRJbmRleF0iLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkRlbGV0ZSBzZXJ2aWNlIC0gJFNlcnZpY2VJRHNbJEluZGV4XSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICdTZXJ2aWNlJywKICAgICAgICApOwogICAgfSwKKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiZTQwMTBmMzM2NWRhNTUyZGNmZDA3OWMzNmFkMzFjYzkwZTA2YzMyIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL091dHB1dC9Ub29sQmFyL1RpY2tldFNlcnZpY2UudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICAgICAjIGVuYWJsZSB0b29sIGJhciBBZ2VudFRpY2tldFNlcnZpY2UKICAgICAgICBteSAlQWdlbnRUaWNrZXRRdWV1ZSA9ICgKICAgICAgICAgICAgQ3NzQ2xhc3MgPT4gJ1NlcnZpY2VWaWV3JywKICAgICAgICAgICAgSWNvbiAgICAgPT4gJ2ZhIGZhLXdyZW5jaCcsCiAgICAgICAgICAgIE1vZHVsZSAgID0+ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VG9vbEJhcjo6VGlja2V0U2VydmljZScsCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICcxMDMwMDM1JywKICAgICAgICApOwoKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnRnJvbnRlbmQ6OlRvb2xCYXJNb2R1bGUjIyMxMC1UaWNrZXQ6OkFnZW50VGlja2V0UXVldWUnLAogICAgICAgICAgICBWYWx1ZSA9PiBcJUFnZW50VGlja2V0UXVldWUsCiAgICAgICAgKTsKCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ0Zyb250ZW5kOjpUb29sQmFyTW9kdWxlIyMjMTAtVGlja2V0OjpBZ2VudFRpY2tldFF1ZXVlJywKICAgICAgICAgICAgVmFsdWUgPT4gXCVBZ2VudFRpY2tldFF1ZXVlCiAgICAgICAgKTsKCiAgICAgICAgIyBhbGxvd3MgZGVmaW5pbmcgc2VydmljZXMgYW5kIFNMQXMgZm9yIHRpY2tldHMKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gMQogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB1c2VyIG9iamVjdAogICAgICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAgICAgIyBnZXQgdGVzdCB1c2VyIElECiAgICAgICAgbXkgJFRlc3RVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3Qgc2VydmljZQogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICdTZWxlbml1bScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRTZXJ2aWNlSUQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VBZGQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiU2VydmljZSBpcyBjcmVhdGVkIC0gSUQgJFNlcnZpY2VJRCIKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aWNrZXQgb2JqZWN0CiAgICAgICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB0aWNrZXQKICAgICAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1NlbGVuaXVtIHRlc3QgdGlja2V0JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgTG9jayAgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICdvcGVuJywKICAgICAgICAgICAgQ3VzdG9tZXJJRCAgICA9PiAnU2VsZW5pdW1DdXN0b21lcklEJywKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAndGVzdEBsb2NhbGhvc3QuY29tJywKICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICBPd25lcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAiVGlja2V0IGlzIGNyZWF0ZWQgLSBJRCAkVGlja2V0SUQiCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgdGVzdCB1c2VyICdNeSBTZXJ2aWNlJyBwcmVmZXJlbmNlcyB0byB0ZXN0IHNlcnZpY2UKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRQcmVmZXJlbmNlcycgKV0iKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjU2VydmljZUlEJykudmFsKCckU2VydmljZUlEJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTZXJ2aWNlSURVcGRhdGUiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgY2xpY2sgb24gdG9vbCBiYXIgQWdlbnRUaWNrZXRTZXJ2aWNlCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQHRpdGxlLCBcJ1RpY2tldHMgaW4gTXkgU2VydmljZXM6XCcgKV0iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIHZlcmlmeSB0aGF0IHRlc3QgaXMgb24gdGhlIGNvcnJlY3Qgc2NyZWVuCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpOwogICAgICAgIG15ICRFeHBlY3RlZFVSTCA9ICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFRpY2tldFNlcnZpY2UiOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X2N1cnJlbnRfdXJsKCksICRFeHBlY3RlZFVSTCApID4gLTEsCiAgICAgICAgICAgICJUb29sQmFyIEFnZW50VGlja2V0U2VydmljZSBzaG9ydGN1dCAtIHN1Y2Nlc3MiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgdGlja2V0CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJUaWNrZXQgaXMgZGVsZXRlZC0gJFRpY2tldElEIgogICAgICAgICk7CgogICAgICAgICMgZ2V0IERCIG9iamVjdAogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIGRlbGV0ZSBwZXJzb25hbCBzZXJ2aWNlIGZyb20gREIKICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gcGVyc29uYWxfc2VydmljZXMgV0hFUkUgdXNlcl9pZCA9ICRUZXN0VXNlcklEIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkRlbGV0ZWQgcGVyc29uYWxfc2VydmljZSBjb25uZWN0aW9uIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IHNlcnZpY2UKICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBpcyBkZWxldGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICBmb3IgbXkgJENhY2hlICgKICAgICAgICAgICAgcXcgKFRpY2tldCBTZXJ2aWNlKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJENhY2hlLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICB9Cik7CgoxOwo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoKCgovLyBUT0RPOgovL1JlbW92ZSB0aGlzIGxpbmUgYW5kIGZpeCBKU0RvYwovLyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UUlM6OkphdmFTY3JpcHQ6OkVTTGludCkKCgoKCiJ1c2Ugc3RyaWN0IjsKCnZhciBJVFNNID0gSVRTTSB8fCB7fTsKSVRTTS5BZ2VudCA9IElUU00uQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBJVFNNLkFnZW50LkNvbmZpcm1EaWFsb2cKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgQ29uZmlybURpYWxvZy4KICovCklUU00uQWdlbnQuQ29uZmlybURpYWxvZyA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEB2YXJpYWJsZQogICAgICogQHByaXZhdGUKICAgICAqICAgICBUaGlzIHZhcmlhYmxlIHN0b3JlcyB0aGUgcGFyYW1ldGVycyB0aGF0IGFyZSBwYXNzZWQgZnJvbSB0aGUgRFRMIGFuZCBjb250YWluIGFsbCB0aGUgZGF0YSB0aGF0IHRoZSBkaWFsb2cgbmVlZHMuCiAgICAgKi8KICAgIHZhciBEaWFsb2dEYXRhID0gW107CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwcml2YXRlCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqIEBkZXNjcmlwdGlvbiBTaG93cyB3YWl0aW5nIGRpYWxvZyB1bnRpbCBzZWFyY2ggc2NyZWVuIGlzIHJlYWR5LgogICAgICovCiAgICBmdW5jdGlvbiBTaG93V2FpdGluZ0RpYWxvZyhQb3NpdGlvblRvcCl7CiAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coJzxkaXYgY2xhc3M9IlNwYWNpbmcgQ2VudGVyIj48c3BhbiBjbGFzcz0iQUpBWExvYWRlciIgdGl0bGU9IicgKyBDb3JlLkNvbmZpZy5HZXQoJ0xvYWRpbmdNc2cnKSArICciPjwvc3Bhbj48L2Rpdj4nLCAnJywgUG9zaXRpb25Ub3AsICdDZW50ZXInLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtFdmVudE9iamVjdH0gZXZlbnQgb2JqZWN0IG9mIHRoZSBjbGlja2VkIGVsZW1lbnQuCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBzaG93cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgd2l0aCAyIGJ1dHRvbnM6IFllcyBhbmQgTm8KICAgICAqLwogICAgVGFyZ2V0TlMuU2hvd0NvbmZpcm1EaWFsb2cgPSBmdW5jdGlvbiAoRXZlbnQpIHsKCiAgICAgICAgdmFyIExvY2FsRGlhbG9nRGF0YSwKICAgICAgICAgICAgUG9zaXRpb25Ub3AsCiAgICAgICAgICAgIERhdGEsCiAgICAgICAgICAgIEJ1dHRvbnM7CgogICAgICAgIC8vIGdldCBnbG9iYWwgc2F2ZWQgRGlhbG9nRGF0YSBmb3IgdGhpcyBmdW5jdGlvbgogICAgICAgIExvY2FsRGlhbG9nRGF0YSA9IERpYWxvZ0RhdGFbJChFdmVudC50YXJnZXQpLmF0dHIoJ2lkJyldOwoKICAgICAgICAvLyBkZWZpbmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkaWFsb2cKICAgICAgICBQb3NpdGlvblRvcCA9ICQod2luZG93KS5zY3JvbGxUb3AoKSArICgkKHdpbmRvdykuaGVpZ2h0KCkgKiAwLjMpOwoKICAgICAgICAvLyBzaG93IHdhaXRpbmcgZGlhbG9nCiAgICAgICAgU2hvd1dhaXRpbmdEaWFsb2coUG9zaXRpb25Ub3ApOwoKICAgICAgICAvLyBhamF4IGNhbGwgdG8gdGhlIG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIHRlbXBsYXRlCiAgICAgICAgRGF0YSA9IExvY2FsRGlhbG9nRGF0YS5EaWFsb2dDb250ZW50UXVlcnlTdHJpbmc7CiAgICAgICAgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbChDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJyksIERhdGEsIGZ1bmN0aW9uIChSZXNwb25zZSkgewoKICAgICAgICAgICAgLy8gJ0NvbmZpcm1hdGlvbicgb3BlbnMgYSBkaWFsb2cgd2l0aCAyIGJ1dHRvbnM6IFllcyBhbmQgTm8KICAgICAgICAgICAgaWYgKFJlc3BvbnNlLkRpYWxvZ1R5cGUgPT09ICdDb25maXJtYXRpb24nKSB7CgogICAgICAgICAgICAgICAgLy8gZGVmaW5lIHllcyBhbmQgbm8gYnV0dG9ucwogICAgICAgICAgICAgICAgQnV0dG9ucyA9IFt7CiAgICAgICAgICAgICAgICAgICAgTGFiZWw6IExvY2FsRGlhbG9nRGF0YS5UcmFuc2xhdGVkVGV4dC5ZZXMsCiAgICAgICAgICAgICAgICAgICAgQ2xhc3M6ICJQcmltYXJ5IiwKCiAgICAgICAgICAgICAgICAgICAgLy8gZGVmaW5lIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSAnWWVzJyBidXR0b24gaXMgcHJlc3NlZAogICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOiBmdW5jdGlvbigpewoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBZZXMgYW5kIE5vIGJ1dHRvbnMgdG8gcHJldmVudCBtdWx0aXBsZSBzdWJtaXRzCiAgICAgICAgICAgICAgICAgICAgICAgICQoJ2Rpdi5EaWFsb2c6dmlzaWJsZSBkaXYuQ29udGVudEZvb3RlciBidXR0b24nKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVkaXJlY3QgdG8gdGhlIG1vZHVsZSB0aGF0IGRvZXMgdGhlIGNvbmZpcm1lZCBhY3Rpb24gYWZ0ZXIgcHJlc3NpbmcgdGhlIFllcyBidXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSArIExvY2FsRGlhbG9nRGF0YS5Db25maXJtZWRBY3Rpb25RdWVyeVN0cmluZzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgTGFiZWw6IExvY2FsRGlhbG9nRGF0YS5UcmFuc2xhdGVkVGV4dC5ObywKICAgICAgICAgICAgICAgICAgICBUeXBlOiAiQ2xvc2UiCiAgICAgICAgICAgICAgICB9XTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gJ01lc3NhZ2UnIG9wZW5zIGEgZGlhbG9nIHdpdGggMSBidXR0b246IE9rCiAgICAgICAgICAgIGVsc2UgaWYgKFJlc3BvbnNlLkRpYWxvZ1R5cGUgPT09ICdNZXNzYWdlJykgewoKICAgICAgICAgICAgICAgIC8vIGRlZmluZSBPayBidXR0b24KICAgICAgICAgICAgICAgIEJ1dHRvbnMgPSBbewogICAgICAgICAgICAgICAgICAgIExhYmVsOiBMb2NhbERpYWxvZ0RhdGEuVHJhbnNsYXRlZFRleHQuT2ssCiAgICAgICAgICAgICAgICAgICAgQ2xhc3M6ICJQcmltYXJ5IiwKICAgICAgICAgICAgICAgICAgICBUeXBlOiAiQ2xvc2UiCiAgICAgICAgICAgICAgICB9XTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gc2hvdyB0aGUgY29uZmlybWF0aW9uIGRpYWxvZyB0byBjb25maXJtIHRoZSBhY3Rpb24KICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coUmVzcG9uc2UuSFRNTCwgTG9jYWxEaWFsb2dEYXRhLkRpYWxvZ1RpdGxlLCBQb3NpdGlvblRvcCwgIkNlbnRlciIsIHRydWUsIEJ1dHRvbnMpOwogICAgICAgICAgICAkKCdhLkFzUG9wdXBEaWFsb2cnKS51bmJpbmQoJ2NsaWNrLkFzUG9wdXBEaWFsb2cnKS5iaW5kKCdjbGljay5Bc1BvcHVwRGlhbG9nJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgICAgICAgICBDb3JlLlVJLlBvcHVwLk9wZW5Qb3B1cCAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdBY3Rpb24nKTsKICAgICAgICAgICAgICAgIENvcmUuVUkuRGlhbG9nLkNsb3NlRGlhbG9nKCQoJy5EaWFsb2c6dmlzaWJsZScpKTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwgJ2pzb24nKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge0V2ZW50T2JqZWN0fSBldmVudCBvYmplY3Qgb2YgdGhlIGNsaWNrZWQgZWxlbWVudC4KICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIHNob3dzIGEgY29uZmlybWF0aW9uIGRpYWxvZyB3aXRoIDIgYnV0dG9uczogWWVzIGFuZCBObwogICAgICovCiAgICBUYXJnZXROUy5CaW5kQ29uZmlybURpYWxvZyA9IGZ1bmN0aW9uIChEYXRhKSB7CiAgICAgICAgRGlhbG9nRGF0YVtEYXRhLkVsZW1lbnRJRF0gPSBEYXRhOwoKICAgICAgICAvLyBiaW5kaW5nIGEgY2xpY2sgZXZlbnQgdG8gdGhlIGRlZmluZWQgZWxlbWVudAogICAgICAgICQoRGlhbG9nRGF0YVtEYXRhLkVsZW1lbnRJRF0uRWxlbWVudFNlbGVjdG9yKS5iaW5kKCdjbGljaycsIElUU00uQWdlbnQuQ29uZmlybURpYWxvZy5TaG93Q29uZmlybURpYWxvZyk7CiAgICB9OwoKICAgIHJldHVybiBUYXJnZXROUzsKfShJVFNNLkFnZW50LkNvbmZpcm1EaWFsb2cgfHwge30pKTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tCi8vIC0tCi8vIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCi8vIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKLy8gZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KLy8gLS0KCiJ1c2Ugc3RyaWN0IjsKCnZhciBJVFNNID0gSVRTTSB8fCB7fTsKSVRTTS5BZ2VudCA9IElUU00uQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZSBJVFNNLkFnZW50LkN1c3RvbWVyU2VhcmNoCiAqIEBtZW1iZXJvZiBJVFNNLkFnZW50CiAqIEBhdXRob3IgT1RSUyBBRwogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciB0aGUgY3VzdG9tZXIgc2VhcmNoLgogKi8KSVRTTS5BZ2VudC5DdXN0b21lclNlYXJjaCA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEBuYW1lIEluaXQKICAgICAqIEBtZW1iZXJvZiBJVFNNLkFnZW50LkN1c3RvbWVyU2VhcmNoCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7alF1ZXJ5T2JqZWN0fSAkRWxlbWVudCAtIFRoZSBqUXVlcnkgb2JqZWN0IG9mIHRoZSBpbnB1dCBmaWVsZCB3aXRoIGF1dG9jb21wbGV0ZS4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBJbml0aWFsaXplcyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCRFbGVtZW50KSB7CgogICAgICAgIGlmIChpc0pRdWVyeU9iamVjdCgkRWxlbWVudCkpIHsKCiAgICAgICAgICAgIENvcmUuVUkuQXV0b2NvbXBsZXRlLkluaXQoJEVsZW1lbnQsIGZ1bmN0aW9uIChSZXF1ZXN0LCBSZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBVUkwgPSBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJyksCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb246ICdBZ2VudEN1c3RvbWVyU2VhcmNoJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm06IFJlcXVlc3QudGVybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heFJlc3VsdHM6IENvcmUuVUkuQXV0b2NvbXBsZXRlLkdldENvbmZpZygnTWF4UmVzdWx0c0Rpc3BsYXllZCcpCiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgICAgICRFbGVtZW50LmRhdGEoJ0F1dG9Db21wbGV0ZVhIUicsIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwoVVJMLCBEYXRhLCBmdW5jdGlvbiAoUmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBWYWx1ZURhdGEgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgJEVsZW1lbnQucmVtb3ZlRGF0YSgnQXV0b0NvbXBsZXRlWEhSJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChSZXN1bHQsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlRGF0YS5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5DdXN0b21lclZhbHVlICsgIiAoIiArIHRoaXMuQ3VzdG9tZXJLZXkgKyAiKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuQ3VzdG9tZXJWYWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBSZXNwb25zZShWYWx1ZURhdGEpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoRXZlbnQsIFVJKSB7CgogICAgICAgICAgICAgICAgICAgIHZhciBDdXN0b21lcktleSA9IFVJLml0ZW0ubGFiZWwucmVwbGFjZSgvLipcKCguKilcKSQvLCAnJDEnKTsKCiAgICAgICAgICAgICAgICAgICAgJEVsZW1lbnQudmFsKFVJLml0ZW0udmFsdWUpOwoKICAgICAgICAgICAgICAgICAgICAvLyBzZXQgaGlkZGVuIGZpZWxkIFNlbGVjdGVkQ3VzdG9tZXJVc2VyCiAgICAgICAgICAgICAgICAgICAgLy8gZXNjYXBlIHBvc3NpYmxlIGNvbG9ucyAoOikgaW4gZWxlbWVudCBpZCBiZWNhdXNlIGpRdWVyeSBjYW4gbm90IGhhbmRsZSBpdCBpbiBpZCBhdHRyaWJ1dGUgc2VsZWN0b3JzCiAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcigkRWxlbWVudC5hdHRyKCdpZCcpKSArICdTZWxlY3RlZCcpLnZhbChDdXN0b21lcktleSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnQ3VzdG9tZXJTZWFyY2gnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvLyBiZWZvcmUgdW5sb2FkIHJlbW92ZSBvbGQgc2VsZWN0ZWQgZGF0YS4gSWYgdGhlIHBhZ2UgaXMgcmVsb2FkZWQgKHdpdGggRjUpIHRoaXMgZGF0YSBzdGF5cyBpbiB0aGUgZmllbGQgYW5kIGludm9rZXMgYW4gYWpheCByZXF1ZXN0IG90aGVyd2lzZQogICAgICAgICQod2luZG93KS5vbignYmVmb3JldW5sb2FkLkN1c3RvbWVyU2VhcmNoJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAvLyBlc2NhcGUgcG9zc2libGUgY29sb25zICg6KSBpbiBlbGVtZW50IGlkIGJlY2F1c2UgalF1ZXJ5IGNhbiBub3QgaGFuZGxlIGl0IGluIGlkIGF0dHJpYnV0ZSBzZWxlY3RvcnMKICAgICAgICAgICAgJCgnIycgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcigkRWxlbWVudC5hdHRyKCdpZCcpKSArICdTZWxlY3RlZCcpLnZhbCgnJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9KTsKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuQ3VzdG9tZXJTZWFyY2ggfHwge30pKTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMuY29tCi8vIC0tCi8vIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCi8vIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKLy8gZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KLy8gLS0KCiJ1c2Ugc3RyaWN0IjsKCnZhciBJVFNNID0gSVRTTSB8fCB7fTsKSVRTTS5BZ2VudCA9IElUU00uQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBJVFNNLkFnZW50LkluY2lkZW50U3RhdGUKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgSW5jaWRlbnRTdGF0ZS4KICovCklUU00uQWdlbnQuSW5jaWRlbnRTdGF0ZSA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICBUYXJnZXROUy5TaG93SW5jaWRlbnRTdGF0ZSA9IGZ1bmN0aW9uIChEYXRhKSB7CgogICAgICAgIERhdGEuU3ViYWN0aW9uID0gJ0dldFNlcnZpY2VJbmNpZGVudFN0YXRlJzsKCiAgICAgICAgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbChDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJyksIERhdGEsIGZ1bmN0aW9uIChSZXNwb25zZSkgewoKICAgICAgICAgICAgLy8gaWYgYSBzZXJ2aWNlIHdhcyBzZWxlY3RlZCBhbmQgYW4gaW5jaWRlbnQgc3RhdGUgd2FzIGZvdW5kCiAgICAgICAgICAgIGlmIChSZXNwb25zZS5DdXJJbmNpU2lnbmFsKSB7CgogICAgICAgICAgICAgICAgLy8gc2V0IGluY2lkZW50IHNpZ25hbAogICAgICAgICAgICAgICAgJCgnI1NlcnZpY2VJbmNpZGVudFN0YXRlU2lnbmFsJykuYXR0cignY2xhc3MnLCBSZXNwb25zZS5DdXJJbmNpU2lnbmFsKTsKICAgICAgICAgICAgICAgICQoJyNTZXJ2aWNlSW5jaWRlbnRTdGF0ZVNpZ25hbCcpLmF0dHIoJ3RpdGxlJywgUmVzcG9uc2UuQ3VySW5jaVN0YXRlKTsKCiAgICAgICAgICAgICAgICAvLyBzZXQgaW5jaWRlbnQgc3RhdGUKICAgICAgICAgICAgICAgICQoJyNTZXJ2aWNlSW5jaWRlbnRTdGF0ZScpLmh0bWwoUmVzcG9uc2UuQ3VySW5jaVN0YXRlKTsKCiAgICAgICAgICAgICAgICAvLyBzaG93IHNlcnZpY2UgaW5jaWRlbnQgc2lnbmFsIGFuZCBzdGF0ZQogICAgICAgICAgICAgICAgJCgnI1NlcnZpY2VJbmNpZGVudFN0YXRlQ29udGFpbmVyJykKICAgICAgICAgICAgICAgICAgICAuc2hvdygpCiAgICAgICAgICAgICAgICAgICAgLnByZXYoKQogICAgICAgICAgICAgICAgICAgIC5zaG93KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBoaWRlIHNlcnZpY2UgaW5jaWRlbnQgc2lnbmFsIGFuZCBzdGF0ZQogICAgICAgICAgICAgICAgJCgnI1NlcnZpY2VJbmNpZGVudFN0YXRlQ29udGFpbmVyJykKICAgICAgICAgICAgICAgICAgICAuaGlkZSgpCiAgICAgICAgICAgICAgICAgICAgLnByZXYoKQogICAgICAgICAgICAgICAgICAgIC5oaWRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuSW5jaWRlbnRTdGF0ZSB8fCB7fSkpOwo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMuY29tCi8vIC0tCi8vIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCi8vIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKLy8gZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KLy8gLS0KCiJ1c2Ugc3RyaWN0IjsKCnZhciBJVFNNID0gSVRTTSB8fCB7fTsKSVRTTS5BZ2VudCA9IElUU00uQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZSBJVFNNLkFnZW50Llpvb20KICogQGV4cG9ydHMgVGFyZ2V0TlMgYXMgQ29yZS5JVFNNLlRpY2tldFpvb20KICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgSVRTTS4KICovCklUU00uQWdlbnQuWm9vbSA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IElUU01UYWJsZUhlaWdodCAtIFRoZSBoZWlndGggb2YgdGhlIHRhYmxlLgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucy4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uIChJVFNNVGFibGVIZWlnaHQpIHsKCiAgICAgICAgQ29yZS5VSS5SZXNpemFibGUuSW5pdCgkKCcjSVRTTVRhYmxlQm9keScpLCBJVFNNVGFibGVIZWlnaHQsIGZ1bmN0aW9uIChldmVudCwgdWksIEhlaWdodCkgewoKICAgICAgICAgICAgLy8gcmVtZW1iZXIgbmV3IGhlaWdodCBmb3IgbmV4dCByZWxvYWQKICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChUYXJnZXROUy5SZXNpemVUaW1lT3V0U2Nyb2xsZXIpOwogICAgICAgICAgICBUYXJnZXROUy5SZXNpemVUaW1lT3V0U2Nyb2xsZXIgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBDb3JlLkFnZW50LlByZWZlcmVuY2VzVXBkYXRlKCdVc2VyQ29uZmlnSXRlbVpvb21UYWJsZUhlaWdodCcsIEhlaWdodCk7CiAgICAgICAgICAgIH0sIDEwMDApOwogICAgICAgIH0pOwogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5BZ2VudC5ab29tIHx8IHt9KSk7Cg==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRGVmYXVsdCBTZXR0aW5ncwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gIEZsYWcKICovCgpmaWVsZHNldC5UYWJsZUxpa2UgZGl2LlZhbHVlIC5GbGFnIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tdG9wOiAzcHg7Cn0KCiNTZXJ2aWNlSW5jaWRlbnRTdGF0ZUNvbnRhaW5lciAuRmxhZywKLlNpZGViYXJDb2x1bW4gZmllbGRzZXQuVGFibGVMaWtlIGRpdi5WYWx1ZSAuRmxhZyB7CiAgICBtYXJnaW4tdG9wOiA3cHg7Cn0KCnVsLklUU01GbGFnIHsKICAgIG1hcmdpbi10b3A6IDVweDsKfQoKdWwuSVRTTUZsYWcgZGl2LlZhbHVlIC5GbGFnIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tdG9wOiAzcHg7Cn0KCi5SVEwgZmllbGRzZXQuVGFibGVMaWtlIGRpdi5WYWx1ZSAuRmxhZyB7CiAgICBmbG9hdDogcmlnaHQ7CiAgICBtYXJnaW4tbGVmdDogNXB4Owp9CgouRmxhZyBzcGFuLmdyYXlsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojY2RjZGNkOwp9CgouRmxhZyBzcGFuLmdyZWVubGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICM4YmVmNGQ7Cn0KCi5GbGFnIHNwYW4ueWVsbG93bGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmRkNTA7Cn0KCi5GbGFnIHNwYW4ucmVkbGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6I2ZmNTA1ZTsKfQoKLkZsYWcgc3Bhbi5wdXJwbGVsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojYjIzYWVlOwp9CgouRmxhZyBzcGFuLm9yYW5nZWxlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNmZjhjMDA7Cn0KCi5GbGFnIHNwYW4uY3lhbmxlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiM3OWNkY2Q7Cn0KCi5GbGFnIHNwYW4ud2hpdGVsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmOwp9CgouRmxhZyBzcGFuLmJsYWNrbGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IzAwMDAwMDsKfQoKLyoqCiAqIEBub3RlICAgICBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIGZvciBhIExhYmVsIGFuZCBhIERpdiB3aXRoIGNsYXNzICdGaWVsZCcsCiAqICAgICAgICAgICB0aGF0IGFyZSBpbnNpZGUgYSBGaWVsZCBEaXYgLgogKi8KCmxhYmVsLlN1YkVsZW1lbnQgewogICAgd2lkdGg6IDQwJSAhaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiAxMHB4Owp9CgpkaXYuU3ViRWxlbWVudCB7CiAgICBtYXJnaW4tbGVmdDogNDAlICFpbXBvcnRhbnQ7Cn0KCmRpdi5TdWJFbGVtZW50IGlucHV0Llc1MHBjIHsKICAgIHdpZHRoOiAzMyU7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiBOb0RvdWJsZUJvcmRlcnMKICovCgouQ29udGVudC5Ob0RvdWJsZUJvcmRlcnMgewogICAgYm9yZGVyLWxlZnQ6IDAgbm9uZSAjMDAwMDAwOwogICAgYm9yZGVyLXJpZ2h0OiAwIG5vbmUgIzAwMDAwMDsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uICBTdGFuZGFyZCBXaWR0aHMKICovCi5XNXBjIHsKICAgIHdpZHRoOiA1JTsKfQoKLlcxNXBjIHsKICAgIHdpZHRoOiAxNSU7Cn0KCi5XMzBwYyB7CiAgICB3aWR0aDogMzAlOwp9Cgp9LyogZW5kIG1lZGlhICovCgoK
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgSVRTTURldGFpbHMKICovCgpAbWVkaWEgc2NyZWVuLHByb2plY3Rpb24sdHYsaGFuZGhlbGQgewoKLyoqCiAqIEBzdWJzZWN0aW9uICBIZWFkbGluZQogKi8KCi8qKgogKiBAc3Vic2VjdGlvbiAgSVRTTSB0cmVlCiAqLwojSVRTTVRyZWUgewogICAgbWFyZ2luLXRvcDogMjBweDsKfQoKCi8qKgogKiBAc3Vic2VjdGlvbiAgSVRTTSB0YWJsZSBib2R5CiAqLwojSVRTTVRhYmxlQm9keSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoKI0lUU01UYWJsZUJvZHkgLlNjcm9sbGVyIHsKICAgIGhlaWdodDogMTQwcHg7CiAgICBvdmVyZmxvdy15OiBzY3JvbGw7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgQ29udHJvbFJvdyBJY29ucwogKi8KCgouSVRTTUl0ZW1WaWV3IHsKICAgIGZsb2F0OiByaWdodDsKfQoKLlJUTCAuSVRTTUl0ZW1WaWV3IHsKICAgIGZsb2F0OiBsZWZ0Owp9CgoKLkNvbnRyb2xSb3cgLklUU01JdGVtVmlldy5JY29ucyAuT25lSVRTTUl0ZW0uQWN0aXZlIHNwYW4sCi5Db250cm9sUm93IC5JVFNNSXRlbVZpZXcuSWNvbnMgLk9uZUlUU01JdGVtLkFjdGl2ZTpob3ZlciBzcGFuIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IDA7Cn0KCi5Db250cm9sUm93IC5JVFNNSXRlbVZpZXcuSWNvbnMgLkFsbElUU01JdGVtcyBzcGFuLAouQ29udHJvbFJvdyAuSVRTTUl0ZW1WaWV3Lkljb25zIC5BbGxJVFNNSXRlbXM6aG92ZXIgc3BhbiB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNnB4Owp9CgouQ29udHJvbFJvdyAuSVRTTUl0ZW1WaWV3Lkljb25zIC5BbGxJVFNNSXRlbXMuQWN0aXZlIHNwYW4sCi5Db250cm9sUm93IC5JVFNNSXRlbVZpZXcuSWNvbnMgLkFsbElUU01JdGVtcy5BY3RpdmU6aG92ZXIgc3BhbiB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTZweDsKfQoKLkNvbnRyb2xSb3cgLklUU01GaWx0ZXIuSWNvbnMgLkFjdGl2ZSBzcGFuIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2cHg7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgSXRlbVJvdwogKiBAbm90ZSAgICAgICAgY29udGFpbnMgcmFuZG9tIGl0ZW1zIGFuZCBpcyBwb3NpdGlvbmVkIGluIHRoZSBzaWRlYmFyCiAqLwoKLkl0ZW1Sb3cgewogICAgbWFyZ2luLWxlZnQ6IDQwJTsKfQoKLlJUTCAuSXRlbVJvdyB7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIG1hcmdpbi1yaWdodDogNDAlOwp9CgouSXRlbVJvdyBsaSB7CiAgICBwYWRkaW5nOiAzcHggMCA1cHggOHB4Owp9CgouUlRMIC5JdGVtUm93IGxpIHsKICAgIHBhZGRpbmc6IDNweCA4cHggNXB4IDA7Cn0KCi5JdGVtUm93IGEgewogICAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgICBjb2xvcjogIzAwMDsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouSXRlbVJvdyBhOmhvdmVyIHsKICAgIGNvbG9yOiAjNjY2Owp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqIEBjc3MtZm9yICAgICBJRTcKICovCgovKioKICogQHBhY2thZ2UgICAgIFNraW4gIkRlZmF1bHQiCiAqIEBzZWN0aW9uICAgICBJVFNNRGV0YWlscwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gIENvbXBhdGliaWxpdHkgSUU3IGZvciBUaWNrZXQgWm9vbQogKi8KI0lUU01UYWJsZUJvZHkgdGFibGUgewogICAgd2lkdGg6IDk4JTsKfQoKCn0gLyogZW5kIEBtZWRpYSAqLw==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgU2VhcmNoCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCgovKioKICogQHN1YnNlY3Rpb24gIEF1dG9Db21wbGV0ZQogKi8KCi51aS1hdXRvY29tcGxldGUgewogICAgei1pbmRleDogMTAwMDAwICFpbXBvcnRhbnQ7Cn0KCn0K
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgQ1NTIGZvciBwcmludGluZwogKi8KCkBtZWRpYSBwcmludCB7CgoKI0lUU01UYWJsZSB7CiAgICBkaXNwbGF5OiBub25lOwp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgVGFibGVzCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCi8qKgogKiBAc3Vic2VjdGlvbiAgT3ZlcnZpZXcgU21hbGwgVmlldyBUYWJsZQogKi8KCi5UYWJsZVNtYWxsIHRoZWFkLklUU01IZWFkZXIgc3BhbiB7CiAgICBjb2xvcjogIzRBNEE0QTsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uICB0YWJsZSBlbGVtZW50cyB3aXRob3V0IGhpZ2hsaWdodAogKi8KCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0Ym9keSB0ciB0ZCB7CiAgICBoZWlnaHQ6IDMwcHg7Cn0KCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0Ym9keSB0ciB0ZCBpbnB1dCwKLkRhdGFUYWJsZU5vSGlnaGxpZ2h0IHRib2R5IHRyIHRkIHNlbGVjdHsKICAgIHdpZHRoOiA4NSU7Cn0KCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0Ym9keSB0cjpob3ZlciB0ZCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQouRGF0YVRhYmxlTm9IaWdobGlnaHQgdHIuRXZlbjpob3ZlciB0ZCwKLkRhdGFUYWJsZU5vSGlnaGxpZ2h0IHRyLkV2ZW46aG92ZXIuTGFzdCB0ZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGNUY1Owp9CgouRGF0YVRhYmxlTm9IaWdobGlnaHQgdGJvZHkgdHIuTGFzdDpob3ZlciB0ZCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKfQ==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgdmFyOjpwYWNrYWdlc2V0dXA6OklUU01Db3JlOyAgICAjIyBubyBjcml0aWMKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Ok91dHB1dDo6VGVtcGxhdGU6OlByb3ZpZGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5JywKICAgICdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnLAopOwoKPWhlYWQxIE5BTUUKCklUU01Db3JlLnBtIC0gY29kZSB0byBleGNlY3V0ZSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24KCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGZ1bmN0aW9ucwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ29kZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ3Zhcjo6cGFja2FnZXNldHVwOjpJVFNNQ29yZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGFsd2F5cyBkaXNjYXJkIHRoZSBjb25maWcgb2JqZWN0IGJlZm9yZSBwYWNrYWdlIGNvZGUgaXMgZXhlY3V0ZWQsCiAgICAjIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb25maWcgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCBuZXdseSwgc28gdGhhdCBpdAogICAgIyB3aWxsIHVzZSB0aGUgcmVjZW50bHkgd3JpdHRlbiBuZXcgY29uZmlnIGZyb20gdGhlIHBhY2thZ2UKICAgICRLZXJuZWw6Ok9NLT5PYmplY3RzRGlzY2FyZCgKICAgICAgICBPYmplY3RzID0+IFsnS2VybmVsOjpDb25maWcnXSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBDb2RlSW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlSW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVJbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjcmVhdGUgZHluYW1pYyBmaWVsZHMgZm9yIElUU01Db3JlCiAgICAkU2VsZi0+X0NyZWF0ZUlUU01EeW5hbWljRmllbGRzKCk7CgogICAgIyBzZXQgZGVmYXVsdCBDSVAgbWF0cml4CiAgICAkU2VsZi0+X0NJUERlZmF1bHRNYXRyaXhTZXQoKTsKCiAgICAjIGFkZCB0aGUgZ3JvdXAgaXRzbS1zZXJ2aWNlCiAgICAkU2VsZi0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICdpdHNtLXNlcnZpY2UnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdHcm91cCBmb3IgSVRTTSBTZXJ2aWNlIG1hc2sgYWNjZXNzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJywKICAgICk7CgogICAgIyBmaWxsdXAgZW1wdHkgdHlwZV9pZCByb3dzIGluIHNlcnZpY2UgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTZXJ2aWNlVHlwZUlEKCk7CgogICAgIyBmaWxsdXAgZW1wdHkgY3JpdGljYWxpdHkgcm93cyBpbiBzZXJ2aWNlIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U2VydmljZUNyaXRpY2FsaXR5KCk7CgogICAgIyBmaWxsdXAgZW1wdHkgdHlwZV9pZCByb3dzIGluIHNsYSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNMQVR5cGVJRCgpOwoKICAgICMgc2V0IHByZWZlcmVuY2VzIGZvciBzb21lIEdlbmVyYWxDYXRhbG9nIGVudHJpZXMKICAgICMgdGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBpbiBDb2RlSW5zdGFsbAogICAgIyAoRm9yIFVwZ3JhZGVzIHRoaXMgaXMgZG9uZSBhbHJlYWR5IGluIHRoZSBHZW5lcmFsQ2F0YWxvZyBwYWNrYWdlKQogICAgJFNlbGYtPl9TZXRQcmVmZXJlbmNlcygpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlUmVpbnN0YWxsKCkKCnJ1biB0aGUgY29kZSByZWluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVJlaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVSZWluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNldCBkZWZhdWx0IENJUCBtYXRyaXgKICAgICRTZWxmLT5fQ0lQRGVmYXVsdE1hdHJpeFNldCgpOwoKICAgICMgYWRkIHRoZSBncm91cCBpdHNtLXNlcnZpY2UKICAgICRTZWxmLT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2l0c20tc2VydmljZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0dyb3VwIGZvciBJVFNNIFNlcnZpY2UgbWFzayBhY2Nlc3MgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nLAogICAgKTsKCiAgICAjIGZpbGx1cCBlbXB0eSB0eXBlX2lkIHJvd3MgaW4gc2VydmljZSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNlcnZpY2VUeXBlSUQoKTsKCiAgICAjIGZpbGx1cCBlbXB0eSBjcml0aWNhbGl0eSByb3dzIGluIHNlcnZpY2UgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTZXJ2aWNlQ3JpdGljYWxpdHkoKTsKCiAgICAjIGZpbGx1cCBlbXB0eSB0eXBlX2lkIHJvd3MgaW4gc2xhIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U0xBVHlwZUlEKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl8zXzJfOTEoKQoKVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIGlmIHRoZSBpbnN0YWxsZWQgbW9kdWxlIHZlcnNpb24gaXMgc21hbGxlciB0aGFuIDMuMi45MSAoMy4zLjAgQmV0YSAxKS4KCm15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzNfMl85MSgpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl8zXzJfOTEgeyAgICAjIyBubyBjcml0aWMKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBtaWdyYXRlIHRoZSB2YWx1ZXMgZm9yIENyaXRpY2FsaXR5IGFuZCB0aGUgSW1wYWN0IGZyb20gR2VuZXJhbENhdGFsb2cgdG8gRHluYW1pY0ZpZWxkcwogICAgJFNlbGYtPl9NaWdyYXRlQ3JpdGljYWxpdHlBbmRJbXBhY3RUb0R5bmFtaWNGaWVsZHMoKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzRfMF8yKCkKClRoaXMgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBpZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSB2ZXJzaW9uIGlzIHNtYWxsZXIgdGhhbiA0LjAuMi4KCm15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzRfMF8yKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzRfMF8yIHsgICAgIyMgbm8gY3JpdGljCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgbWlncmF0ZSB0aGUgRFRMIENvbnRlbnQgaW4gdGhlIFN5c0NvbmZpZwogICAgJFNlbGYtPl9NaWdyYXRlRFRMSW5TeXNDb25maWcoKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzRfMF85MSgpCgpUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXhlY3V0ZWQgaWYgdGhlIGluc3RhbGxlZCBtb2R1bGUgdmVyc2lvbiBpcyBzbWFsbGVyIHRoYW4gNC4wLjkxLgoKbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzRfMF85MSB7ICAgICMjIG5vIGNyaXRpYwogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoYW5nZSBjb25maWd1cmF0aW9ucyB0byBtYXRjaCB0aGUgbmV3IG1vZHVsZSBsb2NhdGlvbi4KICAgICRTZWxmLT5fTWlncmF0ZUNvbmZpZ3MoKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVVwZ3JhZGUoKQoKcnVuIHRoZSBjb2RlIHVwZ3JhZGUgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVwZ3JhZGUoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2V0IGRlZmF1bHQgQ0lQIG1hdHJpeAogICAgJFNlbGYtPl9DSVBEZWZhdWx0TWF0cml4U2V0KCk7CgogICAgIyBmaWxsdXAgZW1wdHkgdHlwZV9pZCByb3dzIGluIHNlcnZpY2UgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTZXJ2aWNlVHlwZUlEKCk7CgogICAgIyBmaWxsdXAgZW1wdHkgY3JpdGljYWxpdHkgcm93cyBpbiBzZXJ2aWNlIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U2VydmljZUNyaXRpY2FsaXR5KCk7CgogICAgIyBmaWxsdXAgZW1wdHkgdHlwZV9pZCByb3dzIGluIHNsYSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNMQVR5cGVJRCgpOwoKICAgICMgbWFrZSBkeW5hbWljIGZpZWxkcyBpbnRlcm5hbAogICAgJFNlbGYtPl9NYWtlRHluYW1pY0ZpZWxkc0ludGVybmFsKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVVbmluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIHVuaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVW5pbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZVVuaW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVhY3RpdmF0ZSB0aGUgZ3JvdXAgaXRzbS1zZXJ2aWNlCiAgICAkU2VsZi0+X0dyb3VwRGVhY3RpdmF0ZSgKICAgICAgICBOYW1lID0+ICdpdHNtLXNlcnZpY2UnLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0dldElUU01EeW5hbWljRmllbGRzRGVmaW5pdGlvbigpCgpyZXR1cm5zIHRoZSBkZWZpbml0aW9uIGZvciBJVFNNQ29yZSByZWxhdGVkIGR5bmFtaWMgZmllbGRzCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fR2V0SVRTTUR5bmFtaWNGaWVsZHNEZWZpbml0aW9uKCk7Cgo9Y3V0CgpzdWIgX0dldElUU01EeW5hbWljRmllbGRzRGVmaW5pdGlvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVmaW5lIGFsbCBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTUNvcmUKICAgIG15IEBEeW5hbWljRmllbGRzID0gKAogICAgICAgIHsKICAgICAgICAgICAgT2xkTmFtZSAgICA9PiAnVGlja2V0RnJlZVRleHQxMycsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0lUU01Dcml0aWNhbGl0eScsCiAgICAgICAgICAgIExhYmVsICAgICAgPT4gJ0NyaXRpY2FsaXR5JywKICAgICAgICAgICAgRmllbGRUeXBlICA9PiAnRHJvcGRvd24nLAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgIFRyYW5zbGF0YWJsZVZhbHVlcyA9PiAxLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICcxIHZlcnkgbG93JyAgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgICAgICcyIGxvdycgICAgICAgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgICAgICAnMyBub3JtYWwnICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgICAgICAgICAgJzQgaGlnaCcgICAgICA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgICAgICAnNSB2ZXJ5IGhpZ2gnID0+ICc1IHZlcnkgaGlnaCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBPbGROYW1lICAgID0+ICdUaWNrZXRGcmVlVGV4dDE0JywKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnSVRTTUltcGFjdCcsCiAgICAgICAgICAgIExhYmVsICAgICAgPT4gJ0ltcGFjdCcsCiAgICAgICAgICAgIEZpZWxkVHlwZSAgPT4gJ0Ryb3Bkb3duJywKICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgICAgICBEZWZhdWx0VmFsdWUgICAgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgIFRyYW5zbGF0YWJsZVZhbHVlcyA9PiAxLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICcxIHZlcnkgbG93JyAgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgICAgICcyIGxvdycgICAgICAgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgICAgICAnMyBub3JtYWwnICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgICAgICAgICAgJzQgaGlnaCcgICAgICA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgICAgICAnNSB2ZXJ5IGhpZ2gnID0+ICc1IHZlcnkgaGlnaCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiBARHluYW1pY0ZpZWxkczsKfQoKPWl0ZW0gX0NyZWF0ZUlUU01EeW5hbWljRmllbGRzKCkKCmNyZWF0ZXMgYWxsIGR5bmFtaWMgZmllbGRzIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IgSVRTTUNvcmUKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9DcmVhdGVJVFNNRHluYW1pY0ZpZWxkcygpOwoKPWN1dAoKc3ViIF9DcmVhdGVJVFNNRHluYW1pY0ZpZWxkcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRWYWxpZElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTG9va3VwKAogICAgICAgIFZhbGlkID0+ICd2YWxpZCcsCiAgICApOwoKICAgICMgZ2V0IGFsbCBjdXJyZW50IGR5bmFtaWMgZmllbGRzCiAgICBteSAkRHluYW1pY0ZpZWxkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICAjIGdldCB0aGUgbGlzdCBvZiBvcmRlciBudW1iZXJzIChpcyBhbHJlYWR5IHNvcnRlZCkuCiAgICBteSBARHluYW1pY2ZpZWxkT3JkZXJMaXN0OwogICAgZm9yIG15ICREeW5hbWljZmllbGQgKCBAeyREeW5hbWljRmllbGRMaXN0fSApIHsKICAgICAgICBwdXNoIEBEeW5hbWljZmllbGRPcmRlckxpc3QsICREeW5hbWljZmllbGQtPntGaWVsZE9yZGVyfTsKICAgIH0KCiAgICAjIGdldCB0aGUgbGFzdCBlbGVtZW50IGZyb20gdGhlIG9yZGVyIGxpc3QgYW5kIGFkZCAxCiAgICBteSAkTmV4dE9yZGVyTnVtYmVyID0gMTsKICAgIGlmIChARHluYW1pY2ZpZWxkT3JkZXJMaXN0KSB7CiAgICAgICAgJE5leHRPcmRlck51bWJlciA9ICREeW5hbWljZmllbGRPcmRlckxpc3RbLTFdICsgMTsKICAgIH0KCiAgICAjIGdldCB0aGUgZGVmaW5pdGlvbiBmb3IgYWxsIGR5bmFtaWMgZmllbGRzIGZvciBJVFNNCiAgICBteSBARHluYW1pY0ZpZWxkcyA9ICRTZWxmLT5fR2V0SVRTTUR5bmFtaWNGaWVsZHNEZWZpbml0aW9uKCk7CgogICAgIyBjcmVhdGUgYSBkeW5hbWljIGZpZWxkcyBsb29rdXAgdGFibGUKICAgIG15ICVEeW5hbWljRmllbGRMb29rdXA7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmIHJlZiAkRHluYW1pY0ZpZWxkIG5lICdIQVNIJzsKICAgICAgICAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGQ7CiAgICB9CgogICAgIyBjcmVhdGUgb3IgdXBkYXRlIGR5bmFtaWMgZmllbGRzCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoQER5bmFtaWNGaWVsZHMpIHsKCiAgICAgICAgbXkgJENyZWF0ZUR5bmFtaWNGaWVsZDsKCiAgICAgICAgIyBjaGVjayBpZiB0aGUgZHluYW1pYyBmaWVsZCBhbHJlYWR5IGV4aXN0cwogICAgICAgIGlmICggcmVmICREeW5hbWljRmllbGRMb29rdXB7ICREeW5hbWljRmllbGQtPntOYW1lfSB9IG5lICdIQVNIJyApIHsKICAgICAgICAgICAgJENyZWF0ZUR5bmFtaWNGaWVsZCA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIGlmIHRoZSBmaWVsZCBleGlzdHMgY2hlY2sgaWYgdGhlIHR5cGUgbWF0Y2ggd2l0aCB0aGUgbmVlZGVkIHR5cGUKICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICREeW5hbWljRmllbGRMb29rdXB7ICREeW5hbWljRmllbGQtPntOYW1lfSB9LT57RmllbGRUeXBlfQogICAgICAgICAgICBuZSAkRHluYW1pY0ZpZWxkLT57RmllbGRUeXBlfQogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyByZW5hbWUgdGhlIGZpZWxkIGFuZCBjcmVhdGUgYSBuZXcgb25lCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRVcGRhdGUoCiAgICAgICAgICAgICAgICAleyAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSB9LAogICAgICAgICAgICAgICAgTmFtZSAgID0+ICREeW5hbWljRmllbGRMb29rdXB7ICREeW5hbWljRmllbGQtPntOYW1lfSB9LT57TmFtZX0gLiAnT2xkJywKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJENyZWF0ZUR5bmFtaWNGaWVsZCA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSBpZiB0aGUgZmllbGQgZXhpc3RzIGFuZCB0aGUgdHlwZSBtYXRjaCwgdXBkYXRlIGl0IHRvIHRoZSBJVFNNIGRlZmluaXRpb24KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZFVwZGF0ZSgKICAgICAgICAgICAgICAgICV7JER5bmFtaWNGaWVsZH0sCiAgICAgICAgICAgICAgICBJRCAgICAgICAgID0+ICREeW5hbWljRmllbGRMb29rdXB7ICREeW5hbWljRmllbGQtPntOYW1lfSB9LT57SUR9LAogICAgICAgICAgICAgICAgRmllbGRPcmRlciA9PiAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfS0+e0ZpZWxkT3JkZXJ9LAogICAgICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAkVmFsaWRJRCwKICAgICAgICAgICAgICAgIFJlb3JkZXIgICAgPT4gMCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgbmV3IGZpZWxkIGhhcyB0byBiZSBjcmVhdGVkCiAgICAgICAgaWYgKCRDcmVhdGVEeW5hbWljRmllbGQpIHsKCiAgICAgICAgICAgICMgY3JlYXRlIGEgbmV3IGZpZWxkCiAgICAgICAgICAgIG15ICRGaWVsZElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRBZGQoCiAgICAgICAgICAgICAgICBJbnRlcm5hbEZpZWxkID0+IDEsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICREeW5hbWljRmllbGQtPntOYW1lfSwKICAgICAgICAgICAgICAgIExhYmVsICAgICAgICAgPT4gJER5bmFtaWNGaWVsZC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgIEZpZWxkT3JkZXIgICAgPT4gJE5leHRPcmRlck51bWJlciwKICAgICAgICAgICAgICAgIEZpZWxkVHlwZSAgICAgPT4gJER5bmFtaWNGaWVsZC0+e0ZpZWxkVHlwZX0sCiAgICAgICAgICAgICAgICBPYmplY3RUeXBlICAgID0+ICREeW5hbWljRmllbGQtPntPYmplY3RUeXBlfSwKICAgICAgICAgICAgICAgIENvbmZpZyAgICAgICAgPT4gJER5bmFtaWNGaWVsZC0+e0NvbmZpZ30sCiAgICAgICAgICAgICAgICBWYWxpZElEICAgICAgID0+ICRWYWxpZElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJEZpZWxkSUQ7CgogICAgICAgICAgICAjIGluY3JlYXNlIHRoZSBvcmRlciBudW1iZXIKICAgICAgICAgICAgJE5leHRPcmRlck51bWJlcisrOwogICAgICAgIH0KICAgIH0KCiAgICAjIG1ha2UgZHluYW1pYyBmaWVsZHMgaW50ZXJuYWwKICAgICRTZWxmLT5fTWFrZUR5bmFtaWNGaWVsZHNJbnRlcm5hbCgpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfTWlncmF0ZUNyaXRpY2FsaXR5QW5kSW1wYWN0VG9EeW5hbWljRmllbGRzKCkKClRoaXMgZnVuY3Rpb24gbWlncmF0ZXMgdGhlIHZhbHVlcyBmb3IgQ3JpdGljYWxpdHkgYW5kIHRoZSBJbXBhY3QgZnJvbSBHZW5lcmFsQ2F0YWxvZyB0byBEeW5hbWljRmllbGRzLgoKbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fTWlncmF0ZUNyaXRpY2FsaXR5QW5kSW1wYWN0VG9EeW5hbWljRmllbGRzKCk7Cgo9Y3V0CgpzdWIgX01pZ3JhdGVDcml0aWNhbGl0eUFuZEltcGFjdFRvRHluYW1pY0ZpZWxkcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNyaXRpY2FsaXR5IGxpc3QgKG9ubHkgdmFsaWQgaXRlbXMpCiAgICBteSAkQ3JpdGljYWxpdHlMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpDcml0aWNhbGl0eScsCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgaW1wYWN0IGxpc3QgKG9ubHkgdmFsaWQgaXRlbXMpCiAgICBteSAkSW1wYWN0TGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW1wYWN0JywKICAgICAgICBWYWxpZCA9PiAxLAogICAgKTsKCiAgICAjIGNvbnZlcnQgaW4gYSBoYXNoIHJlZmVyZW5jZSB3aGVyZSBrZXkgaXMgdGhlIHNhbWUgYXMgdGhlIHZhbHVlCiAgICAkQ3JpdGljYWxpdHlMaXN0ID0geyBtYXAgeyAkXyA9PiAkXyB9IHNvcnQgdmFsdWVzICV7JENyaXRpY2FsaXR5TGlzdH0gfTsKICAgICRJbXBhY3RMaXN0ICAgICAgPSB7IG1hcCB7ICRfID0+ICRfIH0gc29ydCB2YWx1ZXMgJXskSW1wYWN0TGlzdH0gfTsKCiAgICAjIGdldCB0aGUgZGVmaW5pdGlvbiBmb3IgYWxsIGR5bmFtaWMgZmllbGRzIGZvciBJVFNNQ29yZQogICAgIyAodGhpcyBpcyBvbmx5IElUU01Dcml0aWNhbGl0eSBhbmQgSVRTTUltcGFjdCkKICAgIG15IEBEeW5hbWljRmllbGRzID0gJFNlbGYtPl9HZXRJVFNNRHluYW1pY0ZpZWxkc0RlZmluaXRpb24oKTsKCiAgICBteSAkU3VjY2Vzc0NvdW50ZXI7CiAgICBteSAlRHluYW1pY0ZpZWxkTmFtZTJJRDsKCiAgICAjIHJlbmFtZSB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QgYW5kIGFkZCBwb3NzaWJsZSB2YWx1ZSBjb25maWd1cmF0aW9uCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZE5ldyAoQER5bmFtaWNGaWVsZHMpIHsKCiAgICAgICAgIyByZXBsYWNlIHRoZSBwb3NzaWJsZSB2YWx1ZXMgd2l0aCBhbHJlYWR5IGV4aXN0aW5nIHZhbHVlcyBmcm9tIEdlbmVyYWwgQ2F0YWxvZwogICAgICAgIGlmICggJER5bmFtaWNGaWVsZE5ldy0+e05hbWV9IGVxICdJVFNNQ3JpdGljYWxpdHknICkgewogICAgICAgICAgICAkRHluYW1pY0ZpZWxkTmV3LT57Q29uZmlnfS0+e1Bvc3NpYmxlVmFsdWVzfSA9ICRDcml0aWNhbGl0eUxpc3Q7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJER5bmFtaWNGaWVsZE5ldy0+e05hbWV9IGVxICdJVFNNSW1wYWN0JyApIHsKICAgICAgICAgICAgJER5bmFtaWNGaWVsZE5ldy0+e0NvbmZpZ30tPntQb3NzaWJsZVZhbHVlc30gPSAkSW1wYWN0TGlzdDsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGV4aXN0aW5nIGR5bmFtaWMgZmllbGQgZGF0YQogICAgICAgIG15ICREeW5hbWljRmllbGRPbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgTmFtZSA9PiAkRHluYW1pY0ZpZWxkTmV3LT57T2xkTmFtZX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzdG9yZSB0aGUgaW50ZXJuYWwgaWQgb2YgZWFjaCBkeW5hbWljIGZpZWxkIGluIGEgbG9va3VwIGhhc2gKICAgICAgICAkRHluYW1pY0ZpZWxkTmFtZTJJRHsgJER5bmFtaWNGaWVsZE5ldy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkT2xkLT57SUR9OwoKICAgICAgICAjIHVwZGF0ZSB0aGUgZHluYW1pYyBmaWVsZAogICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRVcGRhdGUoCiAgICAgICAgICAgIElEICAgICAgICAgPT4gJER5bmFtaWNGaWVsZE9sZC0+e0lEfSwKICAgICAgICAgICAgRmllbGRPcmRlciA9PiAkRHluYW1pY0ZpZWxkT2xkLT57RmllbGRPcmRlcn0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJER5bmFtaWNGaWVsZE5ldy0+e05hbWV9LAogICAgICAgICAgICBMYWJlbCAgICAgID0+ICREeW5hbWljRmllbGROZXctPntMYWJlbH0sCiAgICAgICAgICAgIEZpZWxkVHlwZSAgPT4gJER5bmFtaWNGaWVsZE5ldy0+e0ZpZWxkVHlwZX0sCiAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJER5bmFtaWNGaWVsZE5ldy0+e09iamVjdFR5cGV9LAogICAgICAgICAgICBDb25maWcgICAgID0+ICREeW5hbWljRmllbGROZXctPntDb25maWd9LAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFJlb3JkZXIgICAgPT4gMCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIGlmICgkU3VjY2VzcykgewogICAgICAgICAgICAkU3VjY2Vzc0NvdW50ZXIrKzsKICAgICAgICB9CiAgICB9CgogICAgIyBlcnJvciBoYW5kbGluZyBpZiBub3QgYWxsIGR5bmFtaWMgZmllbGRzIGNvdWxkIGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5CiAgICBpZiAoIHNjYWxhciBARHluYW1pY0ZpZWxkcyAhPSAkU3VjY2Vzc0NvdW50ZXIgKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ291bGQgbm90IG1pZ3JhdGUgQ3JpdGljYWxpdHkgYW5kIEltcGFjdCBmcm9tIEdlbmVyYWwgQ2F0YWxvZyB0byBEeW5hbWljIEZpZWxkcyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICVHZW5lcmFsQ2F0YWxvZ0xpc3Q7CgogICAgIyBnZXQgY3JpdGljYWxpdHkgbGlzdCAodmFsaWQgYW5kIGludmFsaWQgaXRlbXMpCiAgICAkR2VuZXJhbENhdGFsb2dMaXN0e0lUU01Dcml0aWNhbGl0eX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkNyaXRpY2FsaXR5JywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICAjIGdldCBpbXBhY3QgbGlzdCAodmFsaWQgYW5kIGludmFsaWQgaXRlbXMpCiAgICAkR2VuZXJhbENhdGFsb2dMaXN0e0lUU01JbXBhY3R9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpJbXBhY3QnLAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgICMgZmluZCBleGlzdGluZyBkeW5hbWljIGZpZWxkIHZhbHVlcyBmb3IgY3JpdGljYWxpdHkgYW5kIGltcGFjdAogICAgIyB3aGljaCBoYXZlIGJlZW4gc3RvcmVkIGFzIGlkcyBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdmFsdWVzCiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZE5hbWUgKCBzb3J0IGtleXMgJUdlbmVyYWxDYXRhbG9nTGlzdCApIHsKCiAgICAgICAgZm9yIG15ICRJRCAoIHNvcnQga2V5cyAleyAkR2VuZXJhbENhdGFsb2dMaXN0eyREeW5hbWljRmllbGROYW1lfSB9ICkgewoKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICdVUERBVEUgZHluYW1pY19maWVsZF92YWx1ZQogICAgICAgICAgICAgICAgICAgIFNFVCB2YWx1ZV90ZXh0ID0gPwogICAgICAgICAgICAgICAgICAgIFdIRVJFIGZpZWxkX2lkID0gPwogICAgICAgICAgICAgICAgICAgIEFORCB2YWx1ZV90ZXh0ID0gPycsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgICAgICBcJEdlbmVyYWxDYXRhbG9nTGlzdHskRHluYW1pY0ZpZWxkTmFtZX0tPnskSUR9LAogICAgICAgICAgICAgICAgICAgIFwkRHluYW1pY0ZpZWxkTmFtZTJJRHskRHluYW1pY0ZpZWxkTmFtZX0sCiAgICAgICAgICAgICAgICAgICAgXCRJRCwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZGVsZXRlIHRoZSBlbnRyaWVzIGZvciBjcml0aWNhbGl0eSBhbmQgaW1wYWN0IGZyb20gZ2VuZXJhbCBjYXRhbG9nCiAgICBmb3IgbXkgJENsYXNzIChxdyhJVFNNOjpDb3JlOjpDcml0aWNhbGl0eSBJVFNNOjpDb3JlOjpJbXBhY3QpKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBnZW5lcmFsX2NhdGFsb2cgV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJENsYXNzIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG1pZ3JhdGUgc2VydmljZSB0YWJsZSBmcm9tIGNyaXRpY2FsaXR5X2lkIHRvIGNyaXRpY2FsaXR5CiAgICBmb3IgbXkgJENyaXRpY2FsaXR5SUQgKCBzb3J0IGtleXMgJXsgJEdlbmVyYWxDYXRhbG9nTGlzdHtJVFNNQ3JpdGljYWxpdHl9IH0gKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICdVUERBVEUgc2VydmljZQogICAgICAgICAgICAgICAgU0VUIGNyaXRpY2FsaXR5ID0gPwogICAgICAgICAgICAgICAgV0hFUkUgY3JpdGljYWxpdHlfaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICBcJEdlbmVyYWxDYXRhbG9nTGlzdHtJVFNNQ3JpdGljYWxpdHl9LT57JENyaXRpY2FsaXR5SUR9LAogICAgICAgICAgICAgICAgXCRDcml0aWNhbGl0eUlELAogICAgICAgICAgICBdLAogICAgICAgICk7CiAgICB9CgogICAgIyBtaWdyYXRlIGNpcF9hbGxvY2F0ZSB0YWJsZSBmcm9tIGNyaXRpY2FsaXR5X2lkIHRvIGNyaXRpY2FsaXR5CiAgICBmb3IgbXkgJENyaXRpY2FsaXR5SUQgKCBzb3J0IGtleXMgJXsgJEdlbmVyYWxDYXRhbG9nTGlzdHtJVFNNQ3JpdGljYWxpdHl9IH0gKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICdVUERBVEUgY2lwX2FsbG9jYXRlCiAgICAgICAgICAgICAgICBTRVQgY3JpdGljYWxpdHkgPSA/CiAgICAgICAgICAgICAgICBXSEVSRSBjcml0aWNhbGl0eV9pZCA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgIFwkR2VuZXJhbENhdGFsb2dMaXN0e0lUU01Dcml0aWNhbGl0eX0tPnskQ3JpdGljYWxpdHlJRH0sCiAgICAgICAgICAgICAgICBcJENyaXRpY2FsaXR5SUQsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG1pZ3JhdGUgY2lwX2FsbG9jYXRlIHRhYmxlIGZyb20gaW1wYWN0X2lkIHRvIGltcGFjdAogICAgZm9yIG15ICRJbXBhY3RJRCAoIHNvcnQga2V5cyAleyAkR2VuZXJhbENhdGFsb2dMaXN0e0lUU01JbXBhY3R9IH0gKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICdVUERBVEUgY2lwX2FsbG9jYXRlCiAgICAgICAgICAgICAgICBTRVQgaW1wYWN0ID0gPwogICAgICAgICAgICAgICAgV0hFUkUgaW1wYWN0X2lkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgXCRHZW5lcmFsQ2F0YWxvZ0xpc3R7SVRTTUltcGFjdH0tPnskSW1wYWN0SUR9LAogICAgICAgICAgICAgICAgXCRJbXBhY3RJRCwKICAgICAgICAgICAgXSwKICAgICAgICApOwogICAgfQoKICAgICMgZHJvcCBtaWdyYXRlZCBjb2x1bW5zCiAgICBteSBARHJvcCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5TUUxQcm9jZXNzb3IoCiAgICAgICAgRGF0YWJhc2UgPT4gWwoKICAgICAgICAgICAgIyBkcm9wIGNvbHVtbiBjcml0aWNhbGl0eV9pZCBmcm9tIHNlcnZpY2UgdGFibGUKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnVGFibGVBbHRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICdzZXJ2aWNlJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ1N0YXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnQ29sdW1uRHJvcCcsCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICdjcml0aWNhbGl0eV9pZCcsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdTdGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnRW5kJywKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgZHJvcCBjb2x1bW4gY3JpdGljYWxpdHlfaWQgZnJvbSBjaXBfYWxsb2NhdGUgdGFibGUKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnVGFibGVBbHRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICdjaXBfYWxsb2NhdGUnLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnU3RhcnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUYWcgICAgID0+ICdDb2x1bW5Ecm9wJywKICAgICAgICAgICAgICAgIE5hbWUgICAgPT4gJ2NyaXRpY2FsaXR5X2lkJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ1N0YXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnVGFibGVBbHRlcicsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdFbmQnLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgIyBkcm9wIGNvbHVtbiBpbXBhY3RfaWQgZnJvbSBjaXBfYWxsb2NhdGUgdGFibGUKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnVGFibGVBbHRlcicsCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICdjaXBfYWxsb2NhdGUnLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnU3RhcnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUYWcgICAgID0+ICdDb2x1bW5Ecm9wJywKICAgICAgICAgICAgICAgIE5hbWUgICAgPT4gJ2ltcGFjdF9pZCcsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdTdGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnRW5kJywKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgKTsKCiAgICBmb3IgbXkgJFNRTCAoQERyb3ApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAkU1FMLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9TZXRQcmVmZXJlbmNlcygpCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fU2V0UHJlZmVyZW5jZXMoKQoKPWN1dAoKc3ViIF9TZXRQcmVmZXJlbmNlcyB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIG15ICVNYXAgPSAoCiAgICAgICAgT3BlcmF0aW9uYWwgPT4gJ29wZXJhdGlvbmFsJywKICAgICAgICBXYXJuaW5nICAgICA9PiAnd2FybmluZycsCiAgICAgICAgSW5jaWRlbnQgICAgPT4gJ2luY2lkZW50JywKICAgICk7CgogICAgTkFNRToKICAgIGZvciBteSAkTmFtZSAoIHNvcnQga2V5cyAlTWFwICkgewoKICAgICAgICBteSAkSXRlbSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBOYW1lICA9PiAkTmFtZSwKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgICAgICk7CgogICAgICAgIG5leHQgTkFNRSBpZiAhJEl0ZW07CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJEl0ZW0tPntJdGVtSUR9LAogICAgICAgICAgICBLZXkgICAgPT4gJ0Z1bmN0aW9uYWxpdHknLAogICAgICAgICAgICBWYWx1ZSAgPT4gJE1hcHskTmFtZX0sCiAgICAgICAgKTsKICAgIH0KfQoKPWl0ZW0gX0NJUERlZmF1bHRNYXRyaXhTZXQoKQoKc2V0IHRoZSBkZWZhdWx0IENJUCBtYXRyaXgKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9DSVBEZWZhdWx0TWF0cml4U2V0KCk7Cgo9Y3V0CgpzdWIgX0NJUERlZmF1bHRNYXRyaXhTZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjdXJyZW50IGFsbG9jYXRpb24gbGlzdAogICAgbXkgJExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlJyktPkFsbG9jYXRlTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkTGlzdDsKICAgIHJldHVybiBpZiByZWYgJExpc3QgbmUgJ0hBU0gnOwoKICAgICMgc2V0IG5vIG1hdHJpeCBpZiBhbHJlYWR5IGRlZmluZWQKICAgIHJldHVybiBpZiAleyRMaXN0fTsKCiAgICAjIGRlZmluZSB0aGUgYWxsb2NhdGlvbnMKICAgIG15ICVBbGxvY2F0aW9uOwogICAgJEFsbG9jYXRpb257JzEgdmVyeSBsb3cnfS0+eycxIHZlcnkgbG93J30gICA9ICcxIHZlcnkgbG93JzsKICAgICRBbGxvY2F0aW9ueycxIHZlcnkgbG93J30tPnsnMiBsb3cnfSAgICAgICAgPSAnMSB2ZXJ5IGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMSB2ZXJ5IGxvdyd9LT57JzMgbm9ybWFsJ30gICAgID0gJzIgbG93JzsKICAgICRBbGxvY2F0aW9ueycxIHZlcnkgbG93J30tPnsnNCBoaWdoJ30gICAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzEgdmVyeSBsb3cnfS0+eyc1IHZlcnkgaGlnaCd9ICA9ICczIG5vcm1hbCc7CiAgICAkQWxsb2NhdGlvbnsnMiBsb3cnfS0+eycxIHZlcnkgbG93J30gICAgICAgID0gJzEgdmVyeSBsb3cnOwogICAgJEFsbG9jYXRpb257JzIgbG93J30tPnsnMiBsb3cnfSAgICAgICAgICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMiBsb3cnfS0+eyczIG5vcm1hbCd9ICAgICAgICAgID0gJzIgbG93JzsKICAgICRBbGxvY2F0aW9ueycyIGxvdyd9LT57JzQgaGlnaCd9ICAgICAgICAgICAgPSAnMyBub3JtYWwnOwogICAgJEFsbG9jYXRpb257JzIgbG93J30tPnsnNSB2ZXJ5IGhpZ2gnfSAgICAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzMgbm9ybWFsJ30tPnsnMSB2ZXJ5IGxvdyd9ICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMyBub3JtYWwnfS0+eycyIGxvdyd9ICAgICAgICAgID0gJzIgbG93JzsKICAgICRBbGxvY2F0aW9ueyczIG5vcm1hbCd9LT57JzMgbm9ybWFsJ30gICAgICAgPSAnMyBub3JtYWwnOwogICAgJEFsbG9jYXRpb257JzMgbm9ybWFsJ30tPnsnNCBoaWdoJ30gICAgICAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzMgbm9ybWFsJ30tPnsnNSB2ZXJ5IGhpZ2gnfSAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzQgaGlnaCd9LT57JzEgdmVyeSBsb3cnfSAgICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnNCBoaWdoJ30tPnsnMiBsb3cnfSAgICAgICAgICAgID0gJzMgbm9ybWFsJzsKICAgICRBbGxvY2F0aW9ueyc0IGhpZ2gnfS0+eyczIG5vcm1hbCd9ICAgICAgICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc0IGhpZ2gnfS0+eyc0IGhpZ2gnfSAgICAgICAgICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc0IGhpZ2gnfS0+eyc1IHZlcnkgaGlnaCd9ICAgICAgPSAnNSB2ZXJ5IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzUgdmVyeSBoaWdoJ30tPnsnMSB2ZXJ5IGxvdyd9ICA9ICczIG5vcm1hbCc7CiAgICAkQWxsb2NhdGlvbnsnNSB2ZXJ5IGhpZ2gnfS0+eycyIGxvdyd9ICAgICAgID0gJzQgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNSB2ZXJ5IGhpZ2gnfS0+eyczIG5vcm1hbCd9ICAgID0gJzQgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNSB2ZXJ5IGhpZ2gnfS0+eyc0IGhpZ2gnfSAgICAgID0gJzUgdmVyeSBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc1IHZlcnkgaGlnaCd9LT57JzUgdmVyeSBoaWdoJ30gPSAnNSB2ZXJ5IGhpZ2gnOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTUNyaXRpY2FsaXR5IGFuZCBJVFNNSW1wYWN0CiAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiBbJ1RpY2tldCddLAogICAgICAgIEZpZWxkRmlsdGVyID0+IHsKICAgICAgICAgICAgSVRTTUNyaXRpY2FsaXR5ID0+IDEsCiAgICAgICAgICAgIElUU01JbXBhY3QgICAgICA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZvciBJVFNNQ3JpdGljYWxpdHkgYW5kIElUU01JbXBhY3QKICAgIG15ICVQb3NzaWJsZVZhbHVlczsKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWZ9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgUG9zc2libGVWYWx1ZXMKICAgICAgICAkUG9zc2libGVWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntQb3NzaWJsZVZhbHVlc30gfHwge307CiAgICB9CgogICAgIyBnZXQgdGhlIGNyaXRpY2FsaXR5IGxpc3QKICAgIG15ICVDcml0aWNhbGl0eUxpc3QgPSAleyAkUG9zc2libGVWYWx1ZXN7SVRTTUNyaXRpY2FsaXR5fSB9OwoKICAgICMgZ2V0IHRoZSBpbXBhY3QgbGlzdAogICAgbXkgJUltcGFjdExpc3QgPSAleyAkUG9zc2libGVWYWx1ZXN7SVRTTUltcGFjdH0gfTsKCiAgICAjIGdldCBwcmlvcml0eSBsaXN0CiAgICBteSAlUHJpb3JpdHlMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5JyktPlByaW9yaXR5TGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlUHJpb3JpdHlMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVByaW9yaXR5TGlzdDsKCiAgICAjIGNyZWF0ZSB0aGUgYWxsb2NhdGlvbiBtYXRyaXgKICAgIG15ICVBbGxvY2F0aW9uTWF0cml4OwogICAgSU1QQUNUOgogICAgZm9yIG15ICRJbXBhY3QgKCBzb3J0IGtleXMgJUFsbG9jYXRpb24gKSB7CgogICAgICAgIG5leHQgSU1QQUNUIGlmICEkSW1wYWN0TGlzdHskSW1wYWN0fTsKCiAgICAgICAgQ1JJVElDQUxJVFk6CiAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoIHNvcnQga2V5cyAleyAkQWxsb2NhdGlvbnskSW1wYWN0fSB9ICkgewoKICAgICAgICAgICAgbmV4dCBDUklUSUNBTElUWSBpZiAhJENyaXRpY2FsaXR5TGlzdHskQ3JpdGljYWxpdHl9OwoKICAgICAgICAgICAgIyBleHRyYWN0IHByaW9yaXR5CiAgICAgICAgICAgIG15ICRQcmlvcml0eSA9ICRBbGxvY2F0aW9ueyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fTsKCiAgICAgICAgICAgIG5leHQgQ1JJVElDQUxJVFkgaWYgISRQcmlvcml0eUxpc3RSZXZlcnNleyRQcmlvcml0eX07CgogICAgICAgICAgICAjIGV4dHJhY3QgcHJpb3JpdHkgaWQKICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkUHJpb3JpdHlMaXN0UmV2ZXJzZXskUHJpb3JpdHl9OwoKICAgICAgICAgICAgJEFsbG9jYXRpb25NYXRyaXh7JEltcGFjdH0tPnskQ3JpdGljYWxpdHl9ID0gJFByaW9yaXR5SUQ7CiAgICAgICAgfQogICAgfQoKICAgICMgc2F2ZSB0aGUgbWF0cml4CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlJyktPkFsbG9jYXRlVXBkYXRlKAogICAgICAgIEFsbG9jYXRlRGF0YSA9PiBcJUFsbG9jYXRpb25NYXRyaXgsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfR3JvdXBBZGQoKQoKYWRkIGEgZ3JvdXAKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAndGhlLWdyb3VwLW5hbWUnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdUaGUgZ3JvdXAgZGVzY3JpcHRpb24uJywKICAgICk7Cgo9Y3V0CgpzdWIgX0dyb3VwQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgRGVzY3JpcHRpb24pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICMgZ2V0IGxpc3Qgb2YgYWxsIGdyb3VwcwogICAgbXkgJUdyb3VwTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExpc3QoKTsKCiAgICAjIHJldmVyc2UgdGhlIGdyb3VwIGxpc3QgZm9yIGVhc2llciBsb29rdXAKICAgIG15ICVHcm91cExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlR3JvdXBMaXN0OwoKICAgICMgY2hlY2sgaWYgZ3JvdXAgYWxyZWFkeSBleGlzdHMKICAgIG15ICRHcm91cElEID0gJEdyb3VwTGlzdFJldmVyc2V7ICRQYXJhbXtOYW1lfSB9OwoKICAgICMgcmVhY3RpdmF0ZSB0aGUgZ3JvdXAKICAgIGlmICgkR3JvdXBJRCkgewoKICAgICAgICAjIGdldCBjdXJyZW50IGdyb3VwIGRhdGEKICAgICAgICBteSAlR3JvdXBEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwR2V0KAogICAgICAgICAgICBJRCAgICAgPT4gJEdyb3VwSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgcmVhY3RpdmF0ZSBncm91cAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cFVwZGF0ZSgKICAgICAgICAgICAgJUdyb3VwRGF0YSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIGFkZCB0aGUgZ3JvdXAKICAgIGVsc2UgewogICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwQWRkKAogICAgICAgICAgICBOYW1lICAgID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgQ29tbWVudCA9PiAkUGFyYW17RGVzY3JpcHRpb259LAogICAgICAgICAgICBWYWxpZElEID0+ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBsb29rdXAgdGhlIG5ldyBncm91cCBpZAogICAgbXkgJE5ld0dyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoCiAgICAgICAgR3JvdXAgID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBhZGQgdXNlciByb290IHRvIHRoZSBncm91cAogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTWVtYmVyQWRkKAogICAgICAgIEdJRCAgICAgICAgPT4gJE5ld0dyb3VwSUQsCiAgICAgICAgVUlEICAgICAgICA9PiAxLAogICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICBybyAgICAgICAgPT4gMSwKICAgICAgICAgICAgbW92ZV9pbnRvID0+IDEsCiAgICAgICAgICAgIGNyZWF0ZSAgICA9PiAxLAogICAgICAgICAgICBvd25lciAgICAgPT4gMSwKICAgICAgICAgICAgcHJpb3JpdHkgID0+IDEsCiAgICAgICAgICAgIHJ3ICAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfR3JvdXBEZWFjdGl2YXRlKCkKCmRlYWN0aXZhdGUgYSBncm91cAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0dyb3VwRGVhY3RpdmF0ZSgKICAgICAgICBOYW1lID0+ICd0aGUtZ3JvdXAtbmFtZScsCiAgICApOwoKPWN1dAoKc3ViIF9Hcm91cERlYWN0aXZhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBOYW1lIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb29rdXAgZ3JvdXAgaWQKICAgIG15ICRHcm91cElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwID0+ICRQYXJhbXtOYW1lfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkR3JvdXBJRDsKCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAjIGdldCBjdXJyZW50IGdyb3VwIGRhdGEKICAgIG15ICVHcm91cERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBHZXQoCiAgICAgICAgSUQgICAgID0+ICRHcm91cElELAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGRlYWN0aXZhdGUgZ3JvdXAKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cFVwZGF0ZSgKICAgICAgICAlR3JvdXBEYXRhLAogICAgICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdFJldmVyc2V7aW52YWxpZH0sCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0ZpbGx1cEVtcHR5U2VydmljZVR5cGVJRCgpCgpmaWxsdXAgZW1wdHkgZW50cmllcyBpbiB0aGUgdHlwZV9pZCBjb2x1bW4gb2YgdGhlIHNlcnZpY2UgdGFibGUKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9GaWxsdXBFbXB0eVNlcnZpY2VUeXBlSUQoKTsKCj1jdXQKCnN1YiBfRmlsbHVwRW1wdHlTZXJ2aWNlVHlwZUlEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgc2VydmljZSB0eXBlIGxpc3QKICAgIG15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgKTsKCiAgICAjIGVycm9yIGhhbmRsaW5nCiAgICBpZiAoICEkU2VydmljZVR5cGVMaXN0IHx8IHJlZiAkU2VydmljZVR5cGVMaXN0IG5lICdIQVNIJyB8fCAhJXskU2VydmljZVR5cGVMaXN0fSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGZpbmQgYW55IGl0ZW0gaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIElUU006OlNlcnZpY2U6OlR5cGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNvcnQgaWRzCiAgICBteSBAU2VydmljZVR5cGVLZXlMaXN0ID0gc29ydCBrZXlzICV7JFNlcnZpY2VUeXBlTGlzdH07CgogICAgIyB1cGRhdGUgdHlwZV9pZAogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzZXJ2aWNlCiAgICAgICAgICAgIFNFVCB0eXBlX2lkID0gPwogICAgICAgICAgICBXSEVSRSB0eXBlX2lkID0gMAogICAgICAgICAgICBPUiB0eXBlX2lkIElTIE5VTEwiLAogICAgICAgIEJpbmQgPT4gWyBcJFNlcnZpY2VUeXBlS2V5TGlzdFswXSBdLAogICAgKTsKfQoKPWl0ZW0gX0ZpbGx1cEVtcHR5U2VydmljZUNyaXRpY2FsaXR5KCkKCmZpbGx1cCBlbXB0eSBlbnRyaWVzIGluIHRoZSBjcml0aWNhbGl0eSBjb2x1bW4gb2YgdGhlIHNlcnZpY2UgdGFibGUKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSgpOwoKPWN1dAoKc3ViIF9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiBbJ1RpY2tldCddLAogICAgICAgIEZpZWxkRmlsdGVyID0+IHsKICAgICAgICAgICAgSVRTTUNyaXRpY2FsaXR5ID0+IDEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZm9yIElUU01Dcml0aWNhbGl0eSBhbmQgSVRTTUltcGFjdAogICAgbXkgJVBvc3NpYmxlVmFsdWVzOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGRDb25maWdBcnJheVJlZn0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgICAgICRQb3NzaWJsZVZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e1Bvc3NpYmxlVmFsdWVzfSB8fCB7fTsKICAgIH0KCiAgICAjIGdldCB0aGUgY3JpdGljYWxpdHkgbGlzdAogICAgbXkgQENyaXRpY2FsaXR5S2V5TGlzdCA9IHNvcnQga2V5cyAleyAkUG9zc2libGVWYWx1ZXN7SVRTTUNyaXRpY2FsaXR5fSB9OwoKICAgICMgZXJyb3IgaGFuZGxpbmcKICAgIGlmICggIUBDcml0aWNhbGl0eUtleUxpc3QgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCBmaW5kIGFueSBwb3NzaWJsZSB2YWx1ZXMgZm9yIElUU01Dcml0aWNhbGl0eSBpbiBkeW5hbWljIGZpZWxkIGNvbmZpZ3VyYXRpb24hIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHVwZGF0ZSBjcml0aWNhbGl0eSB3aXRoIHRoZSBmaXJzdCBjcml0aWNhbGl0eSBlbnRyeQogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzZXJ2aWNlCiAgICAgICAgICAgIFNFVCBjcml0aWNhbGl0eSA9ID8KICAgICAgICAgICAgV0hFUkUgY3JpdGljYWxpdHkgPSAnJwogICAgICAgICAgICBPUiBjcml0aWNhbGl0eSBJUyBOVUxMIiwKICAgICAgICBCaW5kID0+IFsgXCRDcml0aWNhbGl0eUtleUxpc3RbMF0gXSwKICAgICk7Cn0KCj1pdGVtIF9GaWxsdXBFbXB0eVNMQVR5cGVJRCgpCgpmaWxsdXAgZW1wdHkgZW50cmllcyBpbiB0aGUgdHlwZV9pZCBjb2x1bW4gb2YgdGhlIHNsYSB0YWJsZQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0ZpbGx1cEVtcHR5U0xBVHlwZUlEKCk7Cgo9Y3V0CgpzdWIgX0ZpbGx1cEVtcHR5U0xBVHlwZUlEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgc2xhIHR5cGUgbGlzdAogICAgbXkgJFNMQVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAogICAgKTsKCiAgICAjIGVycm9yIGhhbmRsaW5nCiAgICBpZiAoICEkU0xBVHlwZUxpc3QgfHwgcmVmICRTTEFUeXBlTGlzdCBuZSAnSEFTSCcgfHwgISV7JFNMQVR5cGVMaXN0fSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGZpbmQgYW55IGl0ZW0gaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIElUU006OlNMQTo6VHlwZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc29ydCBpZHMKICAgIG15IEBTTEFUeXBlS2V5TGlzdCA9IHNvcnQga2V5cyAleyRTTEFUeXBlTGlzdH07CgogICAgIyB1cGRhdGUgdHlwZV9pZAogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzbGEKICAgICAgICAgICAgU0VUIHR5cGVfaWQgPSA/CiAgICAgICAgICAgIFdIRVJFIHR5cGVfaWQgPSAwCiAgICAgICAgICAgIE9SIHR5cGVfaWQgSVMgTlVMTCIsCiAgICAgICAgQmluZCA9PiBbIFwkU0xBVHlwZUtleUxpc3RbMF0gXSwKICAgICk7Cn0KCj1pdGVtIF9NYWtlRHluYW1pY0ZpZWxkc0ludGVybmFsKCkKCkNvbnZlcnRzIHRoZSBkeW5hbWljIGZpZWxkcyB0byBpbnRlcm5hbCBmaWVsZHMsIHdoaWNoIG1lYW5zIHRoYXQgdGhleSBjYW4gbm90IGJlIGRlbGV0ZWQgaW4gdGhlIGFkbWluIGludGVyZmFjZS4KCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9NYWtlRHluYW1pY0ZpZWxkc0ludGVybmFsKCk7Cgo9Y3V0CgpzdWIgX01ha2VEeW5hbWljRmllbGRzSW50ZXJuYWwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCB0aGUgZGVmaW5pdGlvbiBmb3IgYWxsIGR5bmFtaWMgZmllbGRzIGZvciBJVFNNCiAgICBteSBARHluYW1pY0ZpZWxkcyA9ICRTZWxmLT5fR2V0SVRTTUR5bmFtaWNGaWVsZHNEZWZpbml0aW9uKCk7CgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKEBEeW5hbWljRmllbGRzKSB7CgogICAgICAgICMgc2V0IGFzIGludGVybmFsIGZpZWxkCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gJ1VQREFURSBkeW5hbWljX2ZpZWxkCiAgICAgICAgICAgICAgICBTRVQgaW50ZXJuYWxfZmllbGQgPSAxCiAgICAgICAgICAgICAgICBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgXCREeW5hbWljRmllbGQtPntOYW1lfSwKICAgICAgICAgICAgXSwKICAgICAgICApOwogICAgfQogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9NaWdyYXRlRFRMSW5TeXNDb25maWcoKQoKQ29udmVydHMgRFRMIHNldHRpbmdzIGluIHN5c2NvbmZpZyB0byBUVC4KCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9NaWdyYXRlRFRMSW5TeXNDb25maWcoKTsKCj1jdXQKCnN1YiBfTWlncmF0ZURUTEluU3lzQ29uZmlnIHsKCiAgICAjIGNyZWF0ZSBuZWVkZWQgb2JqZWN0cwogICAgbXkgJENvbmZpZ09iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwogICAgbXkgJFByb3ZpZGVyT2JqZWN0ICA9IEtlcm5lbDo6T3V0cHV0OjpUZW1wbGF0ZTo6UHJvdmlkZXItPm5ldygpOwoKICAgIE5BTUU6CiAgICBmb3IgbXkgJE5hbWUgKHF3KElUU01TZXJ2aWNlOjpGcm9udGVuZDo6TWVudU1vZHVsZSBJVFNNU0xBOjpGcm9udGVuZDo6TWVudU1vZHVsZSkpIHsKCiAgICAgICAgIyBnZXQgc2V0dGluZydzIGNvbnRlbnQKICAgICAgICBteSAkU2V0dGluZyA9ICRDb25maWdPYmplY3QtPkdldCgkTmFtZSk7CiAgICAgICAgbmV4dCBOQU1FIGlmICEkU2V0dGluZzsKCiAgICAgICAgTUVOVU1PRFVMRToKICAgICAgICBmb3IgbXkgJE1lbnVNb2R1bGUgKCBzb3J0IGtleXMgJXskU2V0dGluZ30gKSB7CgogICAgICAgICAgICBTRVRUSU5HSVRFTToKICAgICAgICAgICAgZm9yIG15ICRTZXR0aW5nSXRlbSAoIHNvcnQga2V5cyAleyAkU2V0dGluZy0+eyRNZW51TW9kdWxlfSB9ICkgewoKICAgICAgICAgICAgICAgIG15ICRTZXR0aW5nQ29udGVudCA9ICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LT57JFNldHRpbmdJdGVtfTsKCiAgICAgICAgICAgICAgICAjIGRvIG5vdGhpbmcgaWYgdGhlcmUgaXMgbm8gdmFsdWUgZm9yIG1pZ3JhdGluZwogICAgICAgICAgICAgICAgbmV4dCBTRVRUSU5HSVRFTSBpZiAhJFNldHRpbmdDb250ZW50OwoKICAgICAgICAgICAgICAgIG15ICRUVENvbnRlbnQ7CiAgICAgICAgICAgICAgICBldmFsIHsKICAgICAgICAgICAgICAgICAgICAkVFRDb250ZW50ID0gJFByb3ZpZGVyT2JqZWN0LT5NaWdyYXRlRFRMdG9UVCggQ29udGVudCA9PiAkU2V0dGluZ0NvbnRlbnQgKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICBpZiAoJEApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRNZW51TW9kdWxlLT4kU2V0dGluZ0l0ZW0gOiAkQCEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkU2V0dGluZy0+eyRNZW51TW9kdWxlfS0+eyRTZXR0aW5nSXRlbX0gPSAkVFRDb250ZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHVwZGF0ZSB0aGUgY29uZmlnIGl0ZW0KICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU3lzQ29uZmlnT2JqZWN0LT5Db25maWdJdGVtVXBkYXRlKAogICAgICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgICAgIEtleSAgID0+ICROYW1lLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFNldHRpbmcsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfTWlncmF0ZUNvbmZpZ3MoKQoKY2hhbmdlIGNvbmZpZ3VyYXRpb25zIHRvIG1hdGNoIHRoZSBuZXcgbW9kdWxlIGxvY2F0aW9uLgoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X01pZ3JhdGVDb25maWdzKCk7Cgo9Y3V0CgpzdWIgX01pZ3JhdGVDb25maWdzIHsKCiAgICBmb3IgbXkgJFR5cGUgKHF3KElUU01TZXJ2aWNlIElUU01TTEEpKSB7CgogICAgICAgICMgbWlncmF0ZSBJVFNNQ29yZSBQcmVmZXJlbmNlcwogICAgICAgICMgZ2V0IHNldHRpbmcgY29udGVudCBmb3IgSVRTTUNvcmUgUHJlZmVyZW5jZXMKICAgICAgICBteSAkU2V0dGluZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCggJFR5cGUgLiAnOjpGcm9udGVuZDo6TWVudU1vZHVsZScgKTsKCiAgICAgICAgQ09ORklHSVRFTToKICAgICAgICBmb3IgbXkgJE1lbnVNb2R1bGUgKCBzb3J0IGtleXMgJXskU2V0dGluZ30gKSB7CgogICAgICAgICAgICBteSAkT2xkTWVudSA9ICRUeXBlIC4gIk1lbnUiOwoKICAgICAgICAgICAgIyB1cGRhdGUgbW9kdWxlIGxvY2F0aW9uCiAgICAgICAgICAgIG15ICRNb2R1bGUgPSAkU2V0dGluZy0+eyRNZW51TW9kdWxlfS0+eydNb2R1bGUnfTsKICAgICAgICAgICAgaWYgKCAkTW9kdWxlICF+IG17S2VybmVsOjpPdXRwdXQ6OkhUTUw6OiRPbGRNZW51KFx3Kyl9ICkgewogICAgICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkTmV3TWVudSA9ICRUeXBlIC4gIk1lbnU6OiQxIjsKICAgICAgICAgICAgJE1vZHVsZSA9fiBze0tlcm5lbDo6T3V0cHV0OjpIVE1MOjokT2xkTWVudShcdyspfXtLZXJuZWw6Ok91dHB1dDo6SFRNTDo6JE5ld01lbnV9eG1zZzsKICAgICAgICAgICAgJFNldHRpbmctPnskTWVudU1vZHVsZX0tPntNb2R1bGV9ID0gJE1vZHVsZTsKCiAgICAgICAgICAgICMgc2V0IG5ldyBzZXR0aW5nCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpLT5Db25maWdJdGVtVXBkYXRlKAogICAgICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgICAgIEtleSAgID0+ICRUeXBlIC4gJzo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMnIC4gJE1lbnVNb2R1bGUsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkU2V0dGluZy0+eyRNZW51TW9kdWxlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
ITSM::Core::IncidentState
Operational
1
current_timestamp
1
current_timestamp
1
ITSM::Core::IncidentState
Warning
1
current_timestamp
1
current_timestamp
1
ITSM::Core::IncidentState
Incident
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
End User Service
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Front End
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Back End
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
IT Management
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Reporting
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
IT Operational
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Demonstration
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Project
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Training
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Underpinning Contract
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Other
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Availability
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Response Time
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Recovery Time
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Resolution Rate
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Transactions
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Errors
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Other
1
current_timestamp
1
current_timestamp
1